개발 이론/Spring

API호출 RestTemplate, WebClient, Feign??

dal_been 2023. 12. 21. 18:38
728x90

개인프로젝트하면서 API호출이 필요해서 Open Feign을 사용했다. 어떠한 이유에서라기 보다 최근에 나온 기술이라고도 하고 생각보다 사용이 쉬워서 Open Feign을 사용했다. 

 

그렇다면 RestTemplate, WebClient,Feign 차이는 뭘까...??

 

RestTemplate

 

Spring Framework 에서 제공하는 동기식 클라이언트 라이브러리다.

동기식 라이브러리라 단순한 요청처리에는 효과적이다.

 

다만 오랫동안 인기있는 라이브러리였지만 대량의 요청이나 비동기적인 처리가 필요한 경우에는 성능이슈가 발생하여

최근에 deprecated되어 WebClient를 권장하는 추세이다.

 

WebClient

 

Spring Framework 5부터 도입된 비동기식 Http클라이언트이다.

비동기 및 리액티브 스트림 처리를 지원하여 확장성 및 성능면에서 우수하다.

리액티브 스트림으로 인해 대량의 요청을 효과적으로 처리할 수 잇다

 

리액티브 스트림 처리??

1. 스트리밍 처리 방식
전통적인 스트리밍 처리 방식은 모든 데이터를 메모리에 가져온 후 데이터베이스에서 조회한 데이터들도 메모리에 저장하며 마지막으로 응답을 위한 데이터를 생서해서 메모리에 저장한후 사용자에게 응답을 보낸다
리액티브 스트림 방식은 최대한 지금 당장 ㅓ리할 데이터만 메모리에 저장되어있기 때문에 작은 시스템 메모리로도 많은 양의 데이터를 처리할 수 있다.

2.back pressure
이벤트를 보내는 쪽이 아니라 받는 쪽에서 먼저 요청(pull)하는 방식을 말한다.
받는 쪽에서 자신이 처리할 사이즈 event를 보내는 쪽에 요청하면 보내는 쪽은 요청 만큼 전달하는 방식이다.
따라서 보내는 쪽과 받는 쪽의 연산차이로 인해 cpu,메모리, 네트워크 낭비, Out of Memory 에러 발생을 방지한다.

 

 

OpenFeign

 

RestTemplate보다 효율적인 통신을 위해 선언적 접근 방식을 활용한 라이브러리이다. Spring Cloud와 통합되어 circuit breaker, retry와 같은 기능을 제공한다.

다만 RestTemplate과 동일한게 동시성 높은 시나리오 에서 에러가 발생할 수 있다.

 

 


음 정리하자면 간단한 조회나 동기식 호출에는 Feign이 편리하고 비동기 및 리액티브 처리를 필요한 경우에는 WebClient를 사용하면 될것같다. 

 

나 같은 경우도 단순히 oauth2통해서 회원가입을 하고 로그인하는 거라서 간단한 호출이기에 OpenFeign을 사용했다.