일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- LV.02
- CoffiesVol.02
- 일정관리프로젝트
- Lv.0
- SQL
- 이것이 자바다
- 프로그래머스
- 포트 폴리오
- LV1
- LV03
- 알고리즘
- 연습문제
- Join
- 네트워크
- LV0
- 디자인 패턴
- mysql
- Java
- Til
- Redis
- JPA
- GIT
- LV01
- 코테
- 포트폴리오
- 데이터 베이스
- jpa blog
- docker
- LV02
- 배열
- Today
- Total
코드 저장소.
외부 api 통신 라이브러리 정리 (RestTemplate,FeignClient,WebClient) 본문
목차
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
'웹개발' 카테고리의 다른 글
인텔리제이에서 로컬에서 동일한 SpringBoot 서버를 여러개 실행하는 방법 (0) | 2024.09.18 |
---|---|
무중단 배포 종류 (0) | 2024.08.05 |
도커 (0) | 2024.06.06 |
Swagger 를 사용해서 api 문서화 자동화 (0) | 2023.11.27 |