Spring에서 제공하는 Http 통신에 사용할 수 있는 템플릿
즉, Http 통신을 할 수 있는 Rest한 Client이다.
Bean을 등록해준다.주의점
RestTemplate와 WebClient 두 타입의 Bean을 등록해주는 것이 아니라, 빌더를 등록해준다. 그래서 우리는 빌더를 주입받아서 필요할 때마다 REST Client를 빌드해서 사용해야한다.
Rest API 서비스를 요청 후 응답 받을 수 있도록 설계되어 있으며, HTTP 프로토콜의 메소드(GET, POST, PUT, DELETE)들에 적합한 여러 메소드들을 제공한다.
Multi-Thread와 Blocking 방식 사용
동작
- Thread Pool은 요청자 어플리케이션 구동 시에 미리 만들어 둠
Request는 먼저Queue에 쌓이고 가용한 Thread가 있으면 그 Thread에 할당되어 처리됨
- 1 요청 1 Thread 할당
- 각 Thread에서 Blocking 방식으로 처리되어 응답이 올 때까지 다른 Thread는 다른 요청에 할당될 수 없다.
특징
스프링 5.0 부터 지원하는 비통기 클라이언트
Single-Thread와 Non-Blocking 방식 사용
동작
- 각 요청은 Event Loop 내 Job으로 등록
- Event Loop는 각 Job을 제공자에게 요청 후, 결과 기다리지 않고 다른 Job 처리
특징
가장 큰 차이점은 Non-Blocking과 비동기화 가능 여부이다.
결국 이러한 차이점이 Spring 에서 RestTemplate를 사용하는 것보다 WebClient의 사용을 권장하는 이유라고 생각한다.
그리고 WebClient는 RestTemplate가 할 수 있는 동기호출도 가능하다. 하지만 RestTemplate는 비동기 호출을 할 수 없다.
| RestTemplate | WebClient | |
|---|---|---|
| Non-Blocking | 불가능 | 가능 |
| 비동기화 | 불가능 | 가능 |