
안녕하세요. 오늘은 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 |