본문 바로가기

Spring

JAVA를 사용한 외부 API 호출 방법

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호출이 잦은 서비스에 적합하다.

단점

  • 비동기 프로그래밍에 익숙하지 않는 경우 학습 곡선이 있을 수 있다.