웹 어플리케이션 개발 프레임워크인 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 방식을 권장하는 걸까?
웹 개발자로서 보다 깊은 이해를 위해, 자원관리와 성능을 중심으로 그 이유를 분석해 보았다.
Spring Resttemplate Class page에 따르면, sync,async에 대한 설명과 비교가 나온다.
위 두가지 방식을 중심으로 Webclient 사용을 권장하는데, 이를 중점으로 Resttemplate와 Webclient를 비교해 보겠다.
Synchronous와 Asynchronous는 스레드가 요청을 처리할 때, 동기식으로 처리하는지 비동기식으로 처리하는지에 대한 설명이다.
-> Resttemplate은 동기식 방식을 사용하는 "Blocking"방식을 사용하고,
-> Webclient은 비동기식 방식을 사용하는 "nonBlocking"방식을 사용한다.
이 차이가 왜 중요할까?
최근 설계된 모든 CPU와 OS는 멀티 쓰레딩을 지원하는데, 스레드 풀로 가상 쓰레드를 여러개 생성하여 진행하면 이 둘의 차이가 무의미하지 않을까?
하지만 조금 더 생각을 해봤을 때, 이 차이만으로도 Webclient를 사용하는 것이 속도와 시스템 자원측면에서 유리함을 확인할 수 있었다.