728x90
WebClient
- RestTemplate를 대체하는 HTTP 클라이언트
- 기존의 동기 API를 제공할 뿐만 아니라, 논블로킹 및 비동기 접근 방식을 지원해서 효율적인 통신이 가능
- 요청을 나타내고 전송하게 해주는 빌더 방식의 인터페이스를 사용
- 외부 API로 요청을 할 때 리액티브 타입의 전송과 수신(Mono, Flux)
- 싱글 스레드 방식을 사용
Non-Blocking & Synchronouse
2024.06.13 - [Spring] - [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
[Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
2024.06.10 - [CS/OS] - 동기 VS 비동기, 블로킹 VS 논블로킹 동기 VS 비동기, 블로킹 VS 논블로킹동기(Synchronous) vs 비동기(Asynchronous)Synchronous작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에
karla.tistory.com
resttemplete과 webclient 차이
1. RestTemplate

- 요청 Thread Pool은 애플리케이션 구동 시에 미리 만들어 놓음
- Request는 먼저 Queue에 쌓이고 가용한 쓰레드가 있으면 그 쓰레드에 할당되어 처리됨
- 1개의 요청당 1개의 스레드 할당
- 각 스레드는 Blocking 방식으로 처리되어 응답이 올때까지 그 스레드는 다른 요청에 할당 될 수 없음
요청을 처리할 스레드가 있으면 아무런 문제가 없지만, 스레드가 다 차는 경우 이후의 요청은 Queue에 대기하게 됩니다.
대부분의 문제는 네트워킹이나 DB와의 통신에서 생기는데 이런 문제가 여러 스레드에서 발생하면
가용한 스레드수가 현저하게 줄어들게 되고, 결국 전체 서비스는 매우 느려지게 됩니다.
2. WebClient

- Core 당 1개의 Thread를 이용
- Single-Thread, Non-Blocking
- 이벤트 반응형으로 동작 Spring Web Reactive 모듈에 포함
- React Web 프레임워크인 Spring WebFlux에서 Http Client로 사용됨
각 요청은 Event Loop내에 Job으로 등록이 됩니다.
Event Loop는 각 Job을 제공자에게 요청한 후, 결과를 기다리지 않고 다른 Job을 처리합니다.
Event Loop는 제공자로부터 callback으로 응답이 오면, 그 결과를 요청자에게 제공합니다.
WebClient는 이렇게 이벤트에 반응형으로 동작하도록 설계되었습니다.
그래서 반응성, 탄력성, 가용성, 비동기성을 보장하는 Spring React 프레임워크를 사용합니다.
728x90