HTTP Client
HTTP Client는 서버와 HTTP 통신을 담당하는 라이브러리 또는 도구다.
이를 통해 웹 애플리케이션에서 데이터를 조회할 수 있다.
(MSA에서) 다른 서버와 통합 작업을 가능하게 하고, (공공데이터와 같은) 외부 API와 데이터를 주고 받을 수 있다.
Spring Boot의 HTTP Client
Spring Boot는 다양한 HTTP Client를 사용할 수 있다.
HttpURLConnection, Apache HttpClient, RestTemplate, Feign, WebClient, RestClient 등 각각의 HTTP Client는 장점과 단점이 있기에 프로젝트의 요구사항에 따라 선택할 수 있다.
등장 시기

HttpURLConnection
특징
- Java에서 제공하는 기본적인 HTTP Client
- HTTP 및 HTTPS를 지원하며, 각 요청마다 새로운 연결을 만들어 사용
- 최신 HTTP Client들로 대체되는 추세
장점
- JDK에 내장되어 있어 별도의 라이브러리 없이 사용 가능
- 기본적인 HTTP 통신을 다루는데 유용
단점
- 간단한 HTTP request, response는 처리할 수 있지만, 복잡한 처리는 부족
- 확장성과 가독성 ↓
Apache HttpClient
특징
- HttpURLConnection의 한계를 극복하기 위해 개발
장점
단점
- Spring과 통합하는 것이 불편하고 학습 곡선이 높음
RestTemplate
특징
- Spring이 제공하는 HTTP Client
- 간단한 API를 통해 HTTP 요청 처리
- 동기 방식 및 Blocking I/O 사용
장점
- Spring 기반 애플리케이션 사용에 유용
- 간단하고 직관적
단점
- 동기 방식으로 동작하여 비효율적
- Non-Blocking, 비동기 방식을 지원하지 않음
(Feign) OpenFeign
특징
- Netflix가 MSA간 통신을 간소화 하기 위해 개발
- Feign을 오픈 소스로 릴리즈한 프로젝트
- 선언형 기반
- Spring Cloud 기반 MSA에서 주로 활용
장점
단점
WebClient
특징
- RestTemplate에 없는 비동기 및 함수형 프로그래밍을 위해 개발된 HTTP Client
장점
- 비동기
- Non-blocking I/O 지원
- Mono 및 Flux와 같은 타입을 사용하여 반응형 프로그래밍 지원
- 성능 및 확장성 향상
단점
- 초기 학습 곡선이 높음
- 복잡한 코드 작성으로 오버 헤드 발생 가능
- WebFlux 의존성 필요
RestClient
https://poalim.tistory.com/59 참고
특징
- RestTemplate의 상위 호환
- RestTemplate과 WebClient의 장점을 결합하여 개발
- RestTemplate 객체를 주입하여 생성
장점
- 동기/비동기 요청 지원
- 직관적이고 유연, 간결
단점
- 최근에 릴리즈 되어 버그가 있을 수 있고, 참조할 자료가 상대적으로 부족
HttpURLConnection은 기본적인 HTTP 통신에 유용하지만, 복잡한 기능을 구현하는 데 한계
Apache HttpClient는 확정성이 뛰어나지만, 학습 곡선이 가파름
OpenFeign은 선언형 인터페이스로 REST API 호출이 간편하여 MSA에 최적화
RestTemplate은 직관적이고 단순한 동기식 요청에 적합
WebClient는 비동기, 반응형 프로그래밍에 적합
RestClient는 WebClient의 기능을 구현할 수 있으며 WebFlux 의존성 없음