WebClient란

푸드테크·2022년 11월 8일
0

안녕하세요 푸드 테크팀 백엔드 개발자 박형민 입니다

오늘은 Spring5 부터 소개된 WebClient에 대해서 이야기해보자 합니다.



WebClient란

웹으로 API를 호출하기위해 사용되는 Http Client 모듈 중 하나이며, RestTemplate를 대체하는, HTTP 클라이언트 입니다.

웹 클라이언트는
1. 기존의 동기 API를 제공할 뿐만 아니라
2. 논블로킹 및 비동기 접근 방식을 지원해서 효율적인 통신이 가능하다고 합니다.



RestTemplate vs WebClient

두 클라이언트 모듈의 차이점은

  • RestTemplate 는 Multi-ThreadBlocking 방식이며,
  • WebClient 는 Single-ThreadNon-Blocking 방식이라는 것입니다.

Non-Blocking 방식이 네트워킹의 병목 현산을 줄이고 성능을 향상시키기 때문에,

Spring WebClient 를 사용하면 요청자(consumer) 와 제공자(provider) 사이의 통신을 조금 더 효율적으로 진행할 수 있다는 장점이 있습니다.



RestTemplate 의 동작 과정

Multi-Thread & Blocking 방식

  1. Thread Pool은 어플리케이션 구동 시 설정된 만큼 Thread 를 미리 만들어 놓습니다.
  2. Request는 먼저 Queue 에 쌓이고 가용한 스레드가 있으면 그 스레드에 할당되어 처리됩니다.
  3. 각 스레드에서는 Blocking 방식으로 처리되어 응답이 올 때까지 그 스레드는 다른 요청에 할당될 수 없습니다.

📑 RestTemplate의 단점

  • 요청을 처리할 스레드가, 스레드 풀에 충분히 남아있다면 위와같은 방법이 아무런 문제가 없지만
    스레드가 다 차는 경우 이후의 요청은 Queue에 대기하게 됩니다.

  • 대부분의 문제는 네트워킹이나, DB 와의 통신에서 문제가 생기기 때문에 락이나 병목현상이 일어나면
    가용 가능한 스레드 수가 현저하게 줄어들기 때문에, 전체 서비스가 매우 느려지는 결과로 이어지게 됩니다.



WebClient의 동작 과정

Single-Thread & Non-Blocking 방식

  1. 각 요청은 Event Loop 내에 Job으로 등록됩니다.
  2. Event Loop는 각 job을 제공자에게 요청한 후, 결과를 기다리지 않고 다른 job을 처리합니다.
  3. Event Loop는 제공자로부터 Callback으로 응답이 오면, 그 결과를 요청자에게 제공합니다.

WebClient는 이벤트에 대한 반응형으로 설계가 되었기 때문에 반응성, 탄련성, 가용성, 비동기성을 보장하는 Spring React 프레임워크를 사용합니다.



이번 포스팅에서는 WebClient란 무엇이고, WebClient가 RestTemplate의 대체제로 나온 이유에 대해서 공부해보았습니다

감사합니다!

profile
푸드 테크 기술 블로그

0개의 댓글