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
'MicroService Architecture' 카테고리의 다른 글
API Gateway 라이브러리 선택 및 사용 예제 (0) | 2024.08.23 |
---|---|
FeignClient(OpenFeign) 사용 이유, 예제 (0) | 2024.08.21 |
[Spring Cloud] Netflix Eureka 개념, 용어 정리 및 사용 예제 (0) | 2024.08.20 |
Service Discovery 개념, 종류, 특징 (0) | 2024.08.20 |
Spring Cloud란? (0) | 2024.08.20 |