<aside> 💡 이 라이브러리들의 공통점은 HTTP 통신을 지원하기 위해 다양한 기능을 제공해주는 것으로 외부 api를 호출하거나 외부 서비스와 상호작용할 때 그 결과를 처리하기 위해 사용됩니다.

</aside>

그렇다면 이 기능들의 차이는 뭘까?

차이를 알아보기 전에 라이브러리들을 하나씩 알아보자!!

restTemplate이란?

스프링 프레임워크에서 제공하는 HTTP 클라이언트 라이브러리로 아래와 같은 특징이 있습니다.

  1. HTTP GET, POST, PUT, DELETE 등의 요청을 보낼 수 있다.
  2. HTTP 요청에 대한 헤더를 설정하고 응답을 처리할 수 있다.
  3. 요청 본문에 데이터를 추가하여 보낼 수 있다.
  4. 응답을 객체로 매핑하여 처리할 수 있다.(JSON 형식의 응답을 자바 객체로 매핑)

이러한 특징들로, 스프링 프레임워크의 일부이기에 다양한 기능지원을 통해 간편한 사용을 할수 있다는 장점이 있습니다. 하지만 단점 또한 존재합니다

가장 큰문제가 바로 동기식 호출입니다. 요청을 보낸 후 응답이 올 때까지 스레드를 차단하는 것을 의미하는데 간단히 말해 호출한 작업이 완료될 때까지 대기하고, 다른 작업을 수행하지 않는 방식입니다. 고객이 많고 응답 시간이 긴 경우에는 성능 문제를 야기할 수 있습니다.

RestTemplate은 스프링에서 제거되나요?

이러한 문제를 해결하고 나온것이 Spring 5부터 도입된 webClient입니다.

webClient란?

스프링 5부터 도입된 리액티브 프로그래밍 모델을 완벽하게 지원하는 HTTP 클라이언트 라이브러리 특징으로는

  1. 비동기 및 리액티브 프로그래밍 지원: 비동기 및 리액티브 프로그래밍을 지원하여 논블로킹 및 효율적인 비동기식 호출을 가능하게 합니다.
  2. 리액티브 환경과의 통합: 스프링 5부터 도입된 리액티브 스트림을 완벽하게 지원하여 리액티브 환경과의 통합이 용이합니다.
  3. 모듈식 및 구성 가능: 기능을 모듈화하여 필요에 따라 추가할 수 있고, 더욱 유연한 구성이 가능합니다.