Spring과 HttpClient

김파란·2025년 5월 28일

SpringAdv

목록 보기
8/8

RestTemplate

  • RestTemplate는 스프링 프레임워크에서 제공하는 HTTP 클라이언트 라이브러리이다.
    • 웹 기반(HTTP)에서 통신하기 위해 사용된다

1. 특징

  • 멀티 스레드, 블로킹방식을 사용한다
    • 블로킹 방식이기 떄문에 응답을 받을 때까지 해당 스레드를 사용할 수 없고, 스레드가 부족해지면 Queue에 요청을 대기시킨다
    • 다만 블로킹 방식이기 때문에 Queue에 요청대기가 시작되는 순간부터 서비스가 느려진다
  • 응답을 받을 때까지 커넥션을 유지하기 때문에 요청을 수행하는 쓰레드마다 응답받는 시간동안 가용할 수 없게 된다
  • RestTemplate에서 사용할 쓰레드풀을 별도로 설정해서 운영해야 한다
  • 무한정 기다리면 스레드가 부족하기 때문에 제한시간도 설정해줘야 한다

WebClient

  • WebFlux기반 라이브러리로 비동기 넌블럭 통신을 지원한다

1. 특징

  • 싱글 스레드 넌블럭 방식을 사용한다
  • WebFlux 의존성 추가해야 하기 때문에 Spring MVC와는 안맞을 수 있다

RestClient

  • Spring framework 6.1(Spring Boot 3.2)에 새로 추가된 동기식 Http Client이다
  • 등장이유
    • RestTemplate는 2009년에 추가된 오래된 방식으로 수많은 메서드가 오버로딩되어있어 기능을 사용하는데 혼란을 줄 수 있다
    • Non-Blocking 환경에서는 적절하지 않다
    • Spring MVC 환경에서 현대적인 방식으로 Http Client를 사용하기 위해 등장했다
RestClient restClient = RestClient.create();
        ResponseEntity<String> entity1 = restClient.get()
                .uri("http://example.com")
                .retrieve()
                .toEntity(String.class);

참고) https://poalim.tistory.com/59

HttpClient

  • Java에서 제공하는 Http Client이다
  • 비동기 및 동기 방식의 HTTP(S) 요청을 손쉽게 수행할 수 있게 해주는 클래스입니다. HttpClient를 사용하면 성능이 향상되고, HTTP/2 및 Web Socket을 지원하는 등 여러 가지 이점을 제공한다

FeignClient

  • Spring Cloud 프로젝트 일부로서, 서비스 간 Http 통신을 자동화하는데 사용된다
  • 애플리케이션 간의 서비스 호출을 단순화하고 클라이언트 코드를 간결하게 유지할 수 있도록 지원한다

Spring Boot 3 – HTTP 클라이언트 비교

✅ 클라이언트 요약 비교

클라이언트동기/비동기사용 편의성커스터마이징Spring 권장 여부특징 / 주요 용도
RestTemplate✅ 동기✅ 쉬움🔶 제한적❌ 더 이상 권장 X간단한 요청, 레거시 프로젝트 유지에 적합
WebClient✅ 비동기 / 리액티브🔶 약간 복잡✅ 매우 유연✅ 적극 권장비동기, 고성능, 체이닝 지원
RestClient (Spring 6+)✅ 동기✅ 매우 쉬움✅ 적절함✅ 기본 권장RestTemplate 대체, 최신 동기 방식
HttpClient (Apache/JDK)동기 또는 비동기❌ 복잡✅ 매우 유연❌ 비권장Spring 외부에서 사용, 저수준 네트워크 제어
FeignClient✅ 동기✅ 인터페이스 기반🔶 제한적🔶 일부 상황 권장선언형 HTTP 호출, 마이크로서비스 간 통신에 적합

🔍 사용 예시

✅ RestClient

RestClient client = RestClient.create();
String result = client.get()
    .uri("https://api.example.com")
    .retrieve()
    .body(String.class);


참고) https://incheol-jung.gitbook.io/docs/q-and-a/spring/resttemplate
https://weight-devlog.tistory.com/46
https://adjh54.tistory.com/234

0개의 댓글