[Spring] 외부 API 호출 도구 알아보기

bi_sz·2023년 12월 6일
0

Spring

목록 보기
1/2
post-thumbnail

Spring 프로젝트를 다루고있는데 외부 API를 사용해야하는 상황이 생겼습니다. ..

⭐ 외부 API 호출

💫 HttpURLConnection / URLConnection

자바에서 제공하는 기본적인 API 로 순수 JAVA만으로 HTTP통신이 가능합니다.

URL 을 이용하여 외부 API에 연결하고 데이터를 전송할 수 있으며, 테이터의 타입 및 길이에 거의 제한이 없습니다.

https://docs.oracle.com/javase/8/docs/api/java/net/HttpURLConnection.html

오래된 JAVA 버전에서 사용하는 클래스로 동기적 통신을 기본으로 사용하기 때문에 요청 을 보내고 응답 을 받을 때까지 스레드가 대기상태 에 있습니다.

URLConnection 은 상태적으로 저수준의 API에 해당하며 기본적인 요청/응답 기능이 제공되지만 추가적인 기능들은 직접 구현해야합니다.

💫 RestTemplate

Spring 에서 제공하는 http 통신에 적용가능한 템플릿입니다.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html

  • Spring 3.0 에서 추가
  • org.springframework.http.client 패키지
  • HttpClient 를 추상화해서 제공
  • 가장 범용적으로 사용
  • HTTP 요청 후 JSON, XML, String 과 같은 응답
  • Blocking 기반의 동기방식
  • HTTP 서버와의 통신을 단순화하고 Restful 원칙
  • header, content-type 설정하며 외부 API 호출
  • 서버-서버 통신에 사용

사용하고 편하고 직관적이지만 동기적인 HTTP 요청을 합니다.

커넥션풀을 기본적으로 사용하지 않아서 연결할 때마다 로컬 포트를 열고 tcp connection 을 맺어야합니다.

https://stackoverflow.com/questions/31869193/using-spring-rest-template-either-creating-too-many-connections-or-slow/

connection pool 을 사용하여 이를 해결합니다.

동기적인 기술이기 때문에 대규모 요청이 들어올 경우에는 비동기/넌블로킹 방식을 지원하는 WebClient 를 고려하라는 추천이 있습니다.

Spring4 에서 추가된 비동기 방식인 AsyncRestTemplate 도 있습니다.

💫 HttpClient

HTTP 프로토콜을 쉽게 사용할 수 있도록 도와주는 Apache HTTP 컴포넌트입니다.

객체 생성이 쉽고 URLConnection 방식보다 코드가 간결하지만 반복적이고 코드가 깁니다.

응답 의 컨텐츠 타입에 따라 별도의 로직이 필요합니다.

💫 WebClient

Spring5 버전부터 도입된 WebClient 라이브러리입니다.
비동기/논블로킹 방식으로 높은 처리량과 확장성을 지원하며 리액티브 프로그래밍을 할 수 있으며 데이터 스트림을 효과적으로 처리할 수 있습니다.

Webflux를 추가하여야 사용할 수 있습습니다.

💫 OpenFeign

어노테이션을 사용하는 선언적 웹 서비스 클라이언트입니다.

인터페이스에 어노테이션들만 붙여줍으로써 구현이 되며 Spring Data JPA 와 유사합니다.

https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/

넷플릭스에서 개발한 Http client binder 으로 웹 서비스 클라이언트를 쉽게 작성할 수 있도록 지원합니다.

RestTemplate 사용 시 API 호출이 잦은 경우에는 코드를 반복하는게 번거로워서인지 새로운게 자꾸 나오는 느낌입니다.

인터페이스 / 어노테이션 기반으로 코드 작성이 쉬우며 RESTAPI 를 사용하는데 필요한 설정이 간편해서 비즈니스 로직에 더 집중할 수 있으며, 다른 Spring Cloud 기술과 통합이 쉬운 편입니다.

Spring Cloud 모듈이 추가되어야하며, HttpCLientHttp2 를 지원하지 않습니다.(추가 설정 필요)
공식적으로 Reactive 모델을 지원하지 않으며 테스트 도구가 제공되지 않는 단점이 있습니다.


OPenFeign 이 왠지 끌리네요.
Spring4 버전을 사용하고있어서 Webclient 는 사용할 수 없고 RestTemplate 으로 적용한 후에 OPenFeign 도 적용이 가능한지 한 번 알아보고 싶네요. ㅇ _<

0개의 댓글