Spring에서 외부 API를 이용하는 방법

송민지·2025년 4월 21일
0

PortCoin

목록 보기
3/7

RestTemplate

  • Spring Boot에서 Http통신을 처리하는 동기적인 클라이언트 입니다.
  • Http 클라이언트 라이브러리를 통해 클래식 Spring Template 클래스 형태로 고수준의 API를 제공합니다.
  • 동기적 방식으로 Json, XML등의 다앙햔 데이터 형식으로 통신합니다.
  • 동기 방식이기 때문에 응답을 받을때까지 다음 코드로 진행되지 않습니다.

장점

  1. 간소화하여 HTTP요청을 처리할 수 있습니다.
  2. Spring과 원활한 통합이 가능합니다.
  3. 서비스간의 통신을을 지원합니다.

단점

  1. 수 많은 메서드가 오버로딩되어 제공되기 때문에 기능 사용시 혼란을 줄 수 있습니다.
  2. 고전적인 Template method 패턴을 활용하기 때문에 현대적인 방식과 거리가 있습니다.
  3. 비동기 환경에서는 적절하지 않습니다.

📌 공식문서에는 비동기 및 스트리밍 시나리오를 가진 서비스일 경우 현대적인 API를 제공하는 RestClient를 고려하라는 안내가 있습니다.
또한 과거에 Rest Template이 Depreacted가 되고 Spring Framework 5.x부터 WebClient로 마이그레이션 하라는 글도 찾아볼 수 있습니다.
확인 결과 현재 사용중인 6.0.x 버전에서도 릴리즈가 되고 있기에 사용하는데 문제는 없을 것 같습니다.

특징

  1. HTTP 요청 및 응답이 동기적으로 이뤄지며 데이터를 주고 받습니다.
  2. HTTP의 다양한 메서드를 지원합니다.
  3. HTTP 요청 및 응답을 자동으로 변환하고 역직렬화합니다.
  4. HTTP 요청 및 응답을 다양한 형식으로 처리가 가능합니다.
  5. HTTP요청에 대한 요청 헤더 및 쿼리 매개변수를 설정할 수 있습니다.
  6. HTTP 요청 및 응답에 대한 로깅을 제공합니다.

더 자세한 내용은 [Java] Spring Boot Web 활용 : RestTemplate 이해하기 이곳에서 확인이 가능합니다.

RestClient

최신의 유연한 API를 제공하는 동기식 HTTP클라이언트 입니다.
HTTP라이브러리에 대한 추상화를 제공하여 Java 객체를 HTTP 요청으로 편리하게 변환 및 응당 객체를 생성할 수 있습니다.
2009년 Spring 3.x에 추가되었습니다.

WebClient

Spring 5.x에서 소개된 Spring WebFlux에서 WebClient가 제시되었습니다.
코드의 유연성과 사용성을 향상시키고 가독성을 좋게 만들었습니다.
WebClient는 WebFlux에 기반한 비동기 HTTP 클라이언트 입니다.
WebMVC에서 사용하려면 block()으로 동기화를 해줘야 했고, WebClient 하나만을 위해 spring-webflux를 설치 해야 합니다.

HTTP Interface

HTTP 요청을 위한 서비스를 자바 인터페이스와 어노테이션으로 정의할 수 있도록 도와줍니다. 해당 서비스를 구현하는 프록시 객체를 생성하면 이를 통해 손쉽게 HTTP 요청을 보낼 수 있습니다. 

[ HttpInterface 요청 및 반환 ]
HttpExchange 메소드에는 다음과 같은 동적인 설정들을 사용할 수 있습니다.

@RequestHeader
@PathVariable
@RequestBody
@RequestParam
@RequestPart
@CookieValue

반환 값으로는 다음과 같은 타입들을 사용할 수 있습니다. 그 외에도 ReactiveAdapterRegistry에 등록된 다른 비동기 또는 리액티브 반환 타입을 사용할 수 있습니다.

void, Mono
HttpHeaders, Mono
, Mono
, Flux
ResponseEntity, Mono<ResponseEntity>
ResponseEntity, Mono<ResponseEntity>
Mono<ResponseEntity<Flux>

그래서 뭘 사용해야 하지?

개인적으로 진행하는 프로젝트에서는 실시간으로 코인 가격을 가져와서 수익성 계산 및 순위를 보여줘야 하는 api가 필요합니다. 아마 web-fulx가 필요한 WebClient 대신 RestClient를 사용하지 않을까 생각하고 있습니다.

Spring에서 외부 API를 호출하는 방법들
Spring Boot - REST 템플릿
REST 클라이언트
Spring의 HTTP 인터페이스
Api 보낼 때 RestTemplate, WebClient.. 그리고 RestClient?

[Java] Spring Boot Web 활용 : RestTemplate 이해하기
[Spring] 스프링 부트 3.2 RestClient 살펴보기
[Spring] Spring6에 등장한 HttpInterface에 대한 소개와 다양한 HTTP 도구들
[Spring] Spring Boot3.2에 새롭게 추가될 RestClient

profile
항상 밝게

0개의 댓글