Backend/Java

Spring - RestTemplate

개발자의 첫 걸음 2025. 12. 23. 18:00

안녕하세요. 오늘은 RestTemplate에 대해서 알아볼게요.

 

 

 

RestTemplate

 

RestTemplate은 스프링에서 제공하는 HTTP 클라이언트예요.

 

우리가 웹 브라우저 주소창에 URL을 입력해서 서버에 요청을 보내듯,

 

자바 코드(서버)에서 다른 서버로 HTTP 요청을 보낼 때 사용해요.

 

 

RestTemplate 기본 개념

                                        [우리 Spring 서버]
                                                |
                                                |  HTTP 요청 (GET/POST)
                                                ↓
                                        [외부 API 서버]
                                                |
                                                |  HTTP 응답 (JSON)
                                                ↑
                                        [우리 Spring 서버]

 

 

 

RestTemplate 생성 방법

 

1. 가장 기본적인 방법

RestTemplate restTemplate = new RestTemplate();

※ 하지만 실무에서는 잘 사용하지 않아요.

 

 

2. Bean으로 등록 후 사용 (권장)

@Configuration
public class RestTemplateConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

그리고 주입해서 사용해요.

@Service
@RequiredArgsConstructor
public class ApiService {

    private final RestTemplate restTemplate;
}

이렇게 사용하는 이유는 테스트가 편하고, 설정 공통 관리할 수 있어요. 그리고 유지보수에도 좋아요.

 

 

 

많이 사용하는 메서드

메서드 설명
getForObject GET 요청 + 객체로 응답
getForEntity GET 요청 + ResponseEntity
postForObject POST 요청
exchange 모든 HTTP 메서드 지원 (가장 강력)

 

1. GET 요청 예제

 

1) getForObject (가장 단순)

String url = "https://api.example.com/users/1";

UserResponse response =
        restTemplate.getForObject(url, UserResponse.class);

응답 JSON이 UserResponse 객체로 자동 변환해요.
(Spring의 Jackson이 처리)

 

2) getForEntity (상태코드 필요할 때)

ResponseEntity<UserResponse> response =
        restTemplate.getForEntity(url, UserResponse.class);

HttpStatus status = response.getStatusCode();
UserResponse body = response.getBody();

HTTP 상태코드까지 필요하다면 이걸 사용해요.

 

 

2. POST 요청 예제

// 요청 DTO
public record UserRequest(
        String name,
        int age
) {}


// POST 호출
String url = "https://api.example.com/users";

UserResponse response =
        restTemplate.postForObject(url, request, UserResponse.class);

 

 

3. Header + Body 같이 보내기 ( ⭐ )

HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
headers.set("Authorization", "Bearer 토큰값");

HttpEntity<UserRequest> entity =
        new HttpEntity<>(request, headers);

ResponseEntity<UserResponse> response =
        restTemplate.exchange(
                url,
                HttpMethod.POST,
                entity,
                UserResponse.class
        );

 

 

 

응답 JOSN → 객체 변환

 

Spring 내부에서 Jackson(ObjectMapper) 사용과 JSON 필드명 ↔ DTO 필드명 자동 매핑으로

// json
{
  "id": 1,
  "name": "kim"
}

// java
public record UserResponse(
        Long id,
        String name
) {}

 

이름만 맞으면 자동 변환이 돼요.

 

 

 

예외 처리 ( ⚠️ )

 

RestTemplate은 4xx / 5xx 응답 시 예외를 던지는데요.

try {
    restTemplate.getForObject(url, UserResponse.class);
} catch (HttpClientErrorException e) {
    // 400번대
} catch (HttpServerErrorException e) {
    // 500번대
}

// 또는

catch (RestClientException e) {
    // 모든 통신 예외
}

 

 

 

RestTemplate 단점

 

RestTemplate은 Deprecated 방향으로 유지보수는 하지만 신규 개발 비추천이라는 Spring의 공식입장이 있어요.

 

 

새 프로젝트인 경우는 WebClient를 권장드려요.

 

RestTemplate WebClient
동기 비동기 / 논블로킹
구식 최신
간단 유연
유지보수 신규 개발 권장

 

 

RestTemplate를 언제 사용할까?

 

 

 

여기까지 RestTemplate에 대해 알아봤는데요.

 

RestTemplate이 스프링에서 다른 서버와 HTTP 통신을 어떻게 하는지,

 

그리고 왜 요즘은 WebClient가 권장되는지도 알 수 있었어요.

'Backend > Java' 카테고리의 다른 글

회원가입 이메일 인증 기능 (Google smtp 활용)  (0) 2025.12.29
Spring - security crypto  (0) 2025.12.25
Spring - OSIV  (0) 2025.12.18
Spring - interceptor  (1) 2025.12.16
영속성 컨텍스트 (Persistence Context)  (1) 2025.12.14