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를 선택 했다.