Spring) Resttemplate와 Webclient 비교

TigerFriend·2023년 3월 30일
0

웹 개발

목록 보기
1/7
post-thumbnail

📌 들어가는 말

웹 어플리케이션 개발 프레임워크인 Spring에서 API를 받아오는 대표적인 두가지 라이브러리가 있다.
Resttemplate와 Webclient다.

하지만 Spring 5.0을 기준으로 Resttemplate는 업데이트 되지 않고, Webclient 사용을 권장하고 있다. 아래는 그 원문내용이다.

NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be accepted going forward. Please, consider using the org.springframework.web.reactive.client.WebClient which has a more modern API and supports sync, async, and streaming scenarios.
Class RestTemplate 원문링크

그렇다면 무슨 차이가 있기에 Webclient 방식을 권장하는 걸까?

웹 개발자로서 보다 깊은 이해를 위해, 자원관리와 성능을 중심으로 그 이유를 분석해 보았다.


📌 Blocking-nonBlocking

Spring Resttemplate Class page에 따르면, sync,async에 대한 설명과 비교가 나온다.
위 두가지 방식을 중심으로 Webclient 사용을 권장하는데, 이를 중점으로 Resttemplate와 Webclient를 비교해 보겠다.

Synchronous와 Asynchronous는 스레드가 요청을 처리할 때, 동기식으로 처리하는지 비동기식으로 처리하는지에 대한 설명이다.

  • 동기식 : 요청과 응답이 한쌍으로 이뤄지는 방식으로 요청을 보내면 응답이 올때까지 대기하는 방식이다.
  • 비동기식 : 요청을 보낸 후 응답을 기다리지 않고 다른 요청을 처리하는 방식이다.

-> Resttemplate은 동기식 방식을 사용하는 "Blocking"방식을 사용하고,
-> Webclient은 비동기식 방식을 사용하는 "nonBlocking"방식을 사용한다.

이 차이가 왜 중요할까?
최근 설계된 모든 CPU와 OS는 멀티 쓰레딩을 지원하는데, 스레드 풀로 가상 쓰레드를 여러개 생성하여 진행하면 이 둘의 차이가 무의미하지 않을까?

하지만 조금 더 생각을 해봤을 때, 이 차이만으로도 Webclient를 사용하는 것이 속도와 시스템 자원측면에서 유리함을 확인할 수 있었다.

📌 멀티/싱글스레드 방식과 한정된 자원량

  • Spring 3.0기준 Resttemplate는 동기식 방식으로 요청에 따른 응답을 기다리기 때문에 여러 스레드를 사용하여 많은 요청들을 처리할 수 밖에 없다. 컴퓨터 연산 처리의 핵심은 스레드 관리(스레드 스케줄링)인데 한정된 스레드 파이에서 Resttemplate는 많은 파이를 가져가서 일을 처리하는 방식이다.
  • 하지만 Webclient방식은 비동기 방식을 지원하여 하나의 싱글스레드로 역할을 다할 수 있다. 이는 스레드 관리 측면에서 굉장히 효율적인 자원관리 방법이다.

📌 정리

  1. Resttemplate는 동기방식의 정보교환과 멀티 스레드 사용으로 인한 자원소모량이 높다.
  2. Webclient는 이를 보완하여 간단한 동기방식도 지원하고, 싱글 스레드만을 활용한 비동기방식을 지원하여 자원소모량을 줄이는 방식이다.
  3. 그렇기 때문에 Spring에서는 자원관리 측면에서 이점을 가지고 있는 Webclient 라이브러리로 API 인터페이스를 활용하기를 권장하고 있다.
profile
TigerFriends

0개의 댓글