Java로 외부 API를 통신하는 HTTP Library에 대해 알아보겠습니다.
HttpURLConnection
Java에서 기본적인 HTTP 통신을 수행하기 위한 클래스이다.
장점
- Java 표준 라이브러리에 포함되어 있어 추가적인 의존성이 필요 없다
- 간단한 HTTP 통신에 적합하며 기본적인 요청 및 응답 처리가 가능하다.
단점
- 기능이 제한적이며, 고급 기능이나 편의 기능이 부족할 수 있다.
- 코드가 비교적 복잡하다.
- 응답코드가 4xx 이거나 5xx 일 경우 IOException
- 타임아웃을 설정할 수 없다.
- 쿠키 제어가 불가능하다.
HttpClient
Java 11에 도입된 새로운 HTTP 클라이언트이고 HTTP/2, WebSocket을 지원한다.
HttpURLConnection은 비동기 처리를 위해 별도 과정이 필요했으나, 별도의 과정없이 비동기 처리 기능을 제공한다.
또한 모든 응답코드를 읽을 수 있고, 타임아웃 설정, 쿠키 제어가 가능하다.
장점
- 확장 가능한 API 제공
- Connection Pooling, thread safe한 멀티스레드 지원
- HTTP/2, WebSocekt 지원
단점
- URLConnection을 사용하는 방식보다 간결해졌으나 여전히 반복적이고 코드가 길다.
- 초기 설정이 다소 복잡하며, 다른 라이브러리보다 더 많은 리소스를 사용하고 느리다.
okHttp
java, Android 에서 사용되는 HTTP 클라이언트
장점
- 서버당 단일 연결을 사용하고 자동으로 연결을 재사용하여 연결 생성 및 해제의 오버헤드를 줄인다.
- HTTP/2, WebSocket 지원
단점
- 다른 라이브러리보다 더 많은 리소스를 사용하고 느리다
- 가벼운 HTTP 통신에는 적합하지 않다.
- Android와 사용시 Retrofit 과 함께 사용하는 것이 권장
RestTemplate
스프링에서 제공하는 HTTP 통신에 유용하게 사용가능한 템플릿
장점
- HttpClient를 추상화 하여 제공
- HTTP 서버와의 통신을 단순화하고 Restful 원칙을 지킨다.
- header, conetnt-type 등을 설정하여 외부 API를 호출한다.
- 강력한 기능 및 유연성 제공
- 멀티쓰레드, Blocking 방식 사용
단점
- Spring 프레임워크를 사용하지 않는 경우에는 사용이 불편
- Spring Boot 2.0 이후에는 WebClient를 권장
- 동기적인 요청을 한다.
WebClient
Spring 5.0에서 추가된 인터페이스, 이전에는 비동기 클라이언트로 AsyncRestTemplate를 사용었다. 싱글 스레드, Non-Bloking, 비동기화를 방식을 사용한다.
장점
- Non-bliocing 및 Reactive 스타일의 프로그래밍 지원
- 다양한 exchange 함수를 통해 HTTP 요청 및 응답 처리를 더욱 세밀하게 제어 가능
- 결과를 기다리지 않아 대규모 서비스나, 외부 API호출이 잦은 서비스에 적합하다.
단점
- 비동기 프로그래밍에 익숙하지 않는 경우 학습 곡선이 있을 수 있다.
'Spring' 카테고리의 다른 글
Spring Boot에서 전략 패턴 사용하기 (0) | 2024.03.29 |
---|---|
Spring Mulipart Error (0) | 2023.12.04 |
Spring Boot Redis + Cache를 사용하여 성능 최적화하기 (0) | 2023.11.16 |
SpringBoot, Prometheus, Grafana를 사용하여 Monitoring 구축하기 (2) (0) | 2023.10.30 |
[Spring] log 파일 생성 시 LOG_PATH_IS_UNDEFINED 생성 문제 (0) | 2023.10.27 |