Spring Rest Client?

송현진·2023년 7월 25일

Spring

목록 보기
9/10
post-thumbnail

Rest Client

Spring에서 제공하는 Http 통신에 사용할 수 있는 템플릿
즉, Http 통신을 할 수 있는 Rest한 Client이다.

  • SpringBoot가 REST Client에 관련해 직접적으로 기능 제공하는 것은 아니다. Rest Client는 Spring Framework에서 제공하는 것이고, SpringBoot 그걸 쉽게 사용할 수 있도록 Bean을 등록해준다.

주의점
RestTemplateWebClient 두 타입의 Bean을 등록해주는 것이 아니라, 빌더를 등록해준다. 그래서 우리는 빌더를 주입받아서 필요할 때마다 REST Client를 빌드해서 사용해야한다.

RestTemplate

Rest API 서비스를 요청 후 응답 받을 수 있도록 설계되어 있으며, HTTP 프로토콜의 메소드(GET, POST, PUT, DELETE)들에 적합한 여러 메소드들을 제공한다.
Multi-Thread와 Blocking 방식 사용

동작

  • Thread Pool은 요청자 어플리케이션 구동 시에 미리 만들어 둠
  • Request는 먼저 Queue에 쌓이고 가용한 Thread가 있으면 그 Thread에 할당되어 처리됨
    • 1 요청 1 Thread 할당
  • Thread에서 Blocking 방식으로 처리되어 응답이 올 때까지 다른 Thread는 다른 요청에 할당될 수 없다.

특징

  • Spring 3.0 부터 지원하는 Spring의 Http 통신 템플릿
  • Http 요청 후 JSON, XML, String 과 같은 응답을 받을 수 있는 템플릿
  • Blocking I/O 기반의 동기방식을 사용하는 템플릿
  • Multi-Thread 방식 사용
  • Restful 형식에 맞춰진 템플릿
  • Header, Content-Type 등을 설정하여 외부 API 호출
  • Server to Server 통신에 사용

WebClient

스프링 5.0 부터 지원하는 비통기 클라이언트
Single-Thread와 Non-Blocking 방식 사용

동작

  • 각 요청은 Event Loop 내 Job으로 등록
  • Event Loop는 각 Job을 제공자에게 요청 후, 결과 기다리지 않고 다른 Job 처리

특징

  • Non-Blocking 기반의 비동기 방식을 사용하는 템플릿
  • Single-Thread 방식 사용
  • JSON, XML을 쉽게 응답 받음
  • 반응성, 탄력성, 가용성, 비동기성을 보장하는 Spring React 프레임워크 사용
  • React Web 프레임워크인 Spring WebFlux에서 Http Client로 사용

RestTemplate 와 WebClient 차이

가장 큰 차이점은 Non-Blocking비동기화 가능 여부이다.
결국 이러한 차이점이 Spring 에서 RestTemplate를 사용하는 것보다 WebClient의 사용을 권장하는 이유라고 생각한다.
그리고 WebClientRestTemplate가 할 수 있는 동기호출도 가능하다. 하지만 RestTemplate는 비동기 호출을 할 수 없다.

RestTemplateWebClient
Non-Blocking불가능가능
비동기화불가능가능

참고
Rest Client 자료1
Rest Client 자료2

profile
개발자가 되고 싶은 취준생

0개의 댓글