본문 바로가기

MicroService Architecture

Feign Client / Web Client / RestTemplate

Feign Client / Web Client / RestTemplate 이 세 개는 다른 서버와 통신하기 위해, 즉 REST API로 서비스간 통신하기 위해 사용

 

RestTemplate이란?

  • HTTP 요청을 만들기 위해 Spring Framework에서 제공하는 동기식 클라이언트 라이브러리
  • 오랫동안 사용되었기 때문에 많은 개발자들이 사용법에 익숙하며 대규모 커뮤니티가 존재하는 안정적인 라이브러리
  • 단, Blocking I/O를 사용하기 때문에 동시성이 높은 시나리오에서 성능 문제가 발생할 수 있음
  • 또한 Spring 5.0 이후부터 RestTemplate은 레거시 라이브러리로 간주되면서 WebClient가 권장되는 추세라고 하며, Spring Docs에서는 Dreprecated 선언을 했다가 삭제되지는 않고, 더 이상 업데이트되지 않는 유지 모드로 들어갔다고 함

 

FeignClient(OpenFeign)란?

  • Netflix에서 제공하는 MSA에서 서비스간 HTTP 통신을 간단하고 간결하게 만들어주는 선언적 웹 서비스 클라이언트
  • FeignClient로 선언된 인터페이스를 구현하고 어노테이션을 달아주는 것만으로 HTTP Client 서비스를 작성 가능하여 RestTemplate에 비해 훨씬 간결하게 작성이 가능
  • 인터페이스 기반의 어노테이션을 통해 서비스를 손쉽게 호출이 가능하며, Spring Cloud와 통합되어 circuit breaker, retry 같은 기능을 제공할 뿐만 아니라, Spring MVC에서 제공하는 어노테이션을 사용 가능하다는 장점을 가짐
  • 단점으로는 RestTemplate과 동일하게 Blocking I/O를 사용하여 동시성 높은 시나리오에 문제가 발생 가능성 보유

 

WebClient란?

  • Spring 5 버전에서 출시
  • WebFlux의 라이브러리의 일부로 Non-blokcing I/O를 활용리액티브 프로그래밍 모델을 기반
  • 이를 통해 확장성과 동시 요청 처리를 활성화
  • 또한, 반드시 비동기로 해야하는것만 아니라 동기처럼 동작도 가능
  • reactive programming의 단점으로 높은 러닝 커브

 

Feign Client vs WebClient

  • FeignClient와 WebClient를 선택하는 방법은 동기 프로그래밍인지 비동기 프로그래밍인지에 따라 갈림
  • WebClient는 비동기상황의 이벤트 기반아키텍처에서 활용이 가능하고 그 외에는 단순한 FeignClient를 권장
  • 더 나아가서 Spring WebClinet를 Feign으로 구현Reactive-Feign이 존재
  • Feign의 선언적 구문을 사용하며, WebClient의 빠르고 비동기적인 능력을 활용 가능

 

참고 자료

RestTemplate vs FeignClient vs WebClient : https://junuuu.tistory.com/770