Tech Stack/Java & Spring
[Spring] [카카오 로그인] RestTemplate vs WebClient
_silver
2025. 9. 3. 15:34
Spring에서 외부 API와 통신할 때는 RestTemplate 또는 WebClient를 주로 사용한다.
카카오 로그인을 구현하면서 참고한 블로그는 RestTemplate을 사용했지만, 기존에 WebClient를 사용해 왔고 차이가 궁금해 정리해 봤다.
RestTemplate vs WebClient 차이
| 구분 | RestTemplate | WebClient |
| 방식 | 동기(블로킹) – 호출 스레드가 응답까지 대기 |
비동기/논블로킹 – 보내두고 응답 오면 처리(Mono/Flux) |
| 전송/파싱 | HttpMessageConverter 등록 | 요청 시점에 contentType/헤더 명시, BodyInserters 등으로 명확 |
| 확장성 | 타임아웃/연결 풀 수동 설정 | Reactor Netty로 네트워크 옵션 제어 쉬움 |
카카오 OAuth에 적용할 때 확인할 사항
- 토큰 발급: application/x-www-form-urlencoded(폼 전송)으로 요청해야 함
- 사용자 정보: Authorization: Bearer <access_token> 헤더 필요
- 도메인 분리: kauth.kakao.com(토큰) / kapi.kakao.com(유저 정보)
→ baseUrl을 분리하면 중복과 실수를 줄일 수 있음
@Configuration
public class SocialLoginConfig {
@Bean(name = "kakaoAuthClient")
public WebClient kakaoAuthClient() {
return WebClient.builder()
.baseUrl("https://kauth.kakao.com")
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.build();
}
@Bean(name = "kakaoApiClient")
public WebClient kakaoApiClient() {
return WebClient.builder()
.baseUrl("https://kapi.kakao.com")
.defaultHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.build();
}
}
- WebClient 장점: 요청마다 contentType/헤더를 명확히 지정하기 쉬워 형식 오류를 줄이기 용이
정리
RestTemplate로도 충분히 구현할 수 있지만, 도메인별 클라이언트를 분리해 중복/실수를 줄이고, 향후 비동기 확장과 운영 편의(동시성·네트워크 제어)를 고려해 WebClient를 선택 했다.