HTTP Client

김도비·2024년 10월 23일
post-thumbnail

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의 한계를 극복하기 위해 개발

장점

  • Web Socket, 동기/비동기 처리 지원

단점

  • Spring과 통합하는 것이 불편하고 학습 곡선이 높음



RestTemplate

특징

  • Spring이 제공하는 HTTP Client
  • 간단한 API를 통해 HTTP 요청 처리
  • 동기 방식 및 Blocking I/O 사용

장점

  • Spring 기반 애플리케이션 사용에 유용
  • 간단하고 직관적

단점

  • 동기 방식으로 동작하여 비효율적
  • Non-Blocking, 비동기 방식을 지원하지 않음



(Feign) OpenFeign

특징

  • Netflix가 MSA간 통신을 간소화 하기 위해 개발
  • Feign을 오픈 소스로 릴리즈한 프로젝트
  • 선언형 기반
  • Spring Cloud 기반 MSA에서 주로 활용

장점

  • 간결함
  • Spring Cloud와 통합 용이

단점

  • 복잡한 기능 구현이 어렵고 유연성 ↓



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 의존성 없음

profile
Java Backend

0개의 댓글