코드 저장소.

외부 api 통신 라이브러리 정리 (RestTemplate,FeignClient,WebClient) 본문

웹개발

외부 api 통신 라이브러리 정리 (RestTemplate,FeignClient,WebClient)

slown 2025. 2. 2. 00:02

목차

1.개요

2.각 라이브러리의 특징

 

1.개요

Java에서는 다른 서버와 통신하기 위해서 즉, REST API로 서비스 간 통신하기 위해서 FeignClient, WebClient, RestTemplate 등을 활용하곤 합니다. 대표적인 이 3가지의 특징에 대해서 알아보도록 하겠습니다.

2.각 라이브러리의 특징

RestTemplate이란?

HTTP 요청을 만들기 위해 Spring Framework에서 제공하는 동기식 클라이언트 라이브러리입니다. 아래는 RestTemplate의 특징입니다.

 

  • RestTemplate은 Spring 4에서부터 사용되었으며, Spring 5 이후로는 비권장(deprecated) 상태입니다.
  • 요청과 응답에 대한 JSON 변환, 오류 처리 등을 수동으로 설정해야 합니다.
  • 멀티파트 파일 전송, 인증 등의 기능을 쉽게 구현을 할 수 있습니다.
  • 단점으로는 Blocking I/O를 사용하므로 동시성이 높은 시나리오에서 성능 문제가 발생할 수 있습니다.

FeignClient란?

Netflix에서 RestTemplate보다 효율적인 통신을 위해 선언적 접근 방식을 활용한 라이브러리입니다. 아래는 FeginClient의 특징입니다.

 

  • 선언형(Declarative) HTTP 클라이언트로, 인터페이스를 통해 API 호출을 정의할 수 있습니다.
  • Spring Cloud 환경에서 주로 사용되며, 마이크로서비스 아키텍처에서 서비스 간 통신을 쉽게 처리할 수 있습니다.
  • @FeignClient 어노테이션을 사용하여 REST API 호출을 간결하게 구현할 수 있습니다.
  • Feign 내부적으로 RestTemplate, OkHttpClient, Apache HttpClient 등을 사용할 수 있습니다.
  • 단점으로는 RestTemplate과 동일하게 Blocking I/O를 사용하여 동시성 높은 시나리오에 문제가 발생합니다.

WebClient란?

Spring 5에서 출시되었으며 WebFlux의 라이브러리의 일부로 Non-blokcing I/O를 활용한 리액티브 프로그래밍 모델을 기반으로 합니다. 아래는 WebClient의 특징입니다.

 

  • Spring WebFlux에서 제공하는 비동기(Asynchronous) 및 논블로킹(Non-blocking) HTTP 클라이언트입니다.
  • 기존 RestTemplate의 대체 라이브러리로, Spring 5부터 공식적으로 권장됩니다.
  • Mono, Flux를 사용하여 리액티브 프로그래밍을 지원합니다.
  • WebClient 내부적으로 Netty, Reactor, HttpClient, OkHttp 등을 사용할 수 있습니다.

그럼 이 중에서는 어떤상황에서 사용을 해야 되는 것인가???

 

 

  • RestTemplate
    • 기존 코드 유지보수를 위해 사용 (새로운 프로젝트에서는 사용 지양)
    • 단순하고 간단한 동기식 API 호출이 필요한 경우
  • FeignClient
    • Spring Cloud 기반 마이크로서비스 환경에서 사용
    • 선언적으로 API 호출을 관리하고 싶을 때
    • 간결한 코드 스타일을 선호할 때
  • WebClient
    • 비동기 및 논블로킹 환경이 필요한 경우
    • Spring WebFlux 기반 애플리케이션을 개발할 때
    • 높은 성능이 필요한 경우 (ex. 대량의 API 호출을 처리해야 하는 경우)

 

 

 

 

참고 사이트

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

 

Spring Cloud OpenFeign

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable

docs.spring.io

https://github.com/OpenFeign/feign/tree/master/reactive

 

feign/reactive at master · OpenFeign/feign

Feign makes writing java http clients easier. Contribute to OpenFeign/feign development by creating an account on GitHub.

github.com

https://www.baeldung.com/spring-boot-feignclient-vs-webclient

https://stackoverflow.com/questions/67191617/springboot-feignclient-vs-webclient