RestTemplate란?
RestTemplate는 자바에서 API 호출을 위해 사용되는 Http Client 입니다. 사용하기 간단하고 스프링5 이하 버전부터 많이 사용됐습니다. 동작방식은 멀티 스레드, 블로킹 방식을 사용하는데요.
스레드 풀에서 미리 스레드를 만들어 두었다가 사용자의 요청이 들어오면 각 스레드를 할당해주는 방식으로 사용됩니다. 블로킹 방식이기 때문에 하나의 스레드가 응답을 받을 때까지 해당 스레드는 사용할 수 없습니다. 만약에 동시 사용자가 많아지면 그만큼 스레드도 많이 필요하겠지요.
만약에 스레드가 부족해지면 Que에 요청을 대기시키고, 스레드의 작업이 끝나면 새롭게 요청을 할당 받습니다. 다만 Que에 요청대기가 시작되는 순간부터 서비스는 급격하게 느려지기 시작합니다.
WebClient란?
WebClient도 RestTemplate와 마찬가지로 Http Client 인데요. RestTemplate와 다른점은 논블로킹, 단일 스레드 방식이라는 것입니다. cpu 코어 1개당 1개의 스레드를 사용합니다.
Client에게 요청을 받으면 이벤트 루프는 논블로킹 방식으로 워커에게 job을 넘겨주고 다음 작업을 처리합니다.
그리고 worker로부터 완료를 callback 받으면 이벤트루프는 응답을 client에게 반환하죠.
WebClient는 이렇게 이벤트 반응형으로 동작하도록 설계 되었습니다.
스프링5 이후부터는 RestTemplate 대신 WebClient를 사용하도록 권장하고 있으며 React Web 프레임워크인 Spring WebFlux에서 Http Client로 사용됩니다.
RestTempalte vs WebClient 성능비교
스프링부트 서버1, 2에 각각 RestTemplate, WebClient를 사용하여 성능을 분석했습니다.
서버1은 RestTemplate, 서버2는 WebClient인데 1000명까지는 비슷한 성능을 보이다가 1000명이 넘어가니 RestTemplate은 급격히 응답시간이 늦어지기 시작합니다.
결론은 작은 단위의 애플리케이션을 설계 할 땐 RestTemplate을 사용하고, 많은 사용자가 예상된다면 WebClient를 사용하면 더욱 성능상 이점이 있을 거 같네요.
하지만 스프링 커뮤니티에서는 RestTemplate를 더이상 사용하지 말고 WebClient를 사용할 것을 강력히 권장하고 있습니다.
'Spring' 카테고리의 다른 글
[Spring Boot] Spring 대용량 데이터 페이징 처리하기 2탄(Spring Data JPA + PostgreSQL) (0) | 2025.02.20 |
---|---|
[Spring Boot] Spring 대용량 데이터 페이징 처리하기 1탄(Spring Data JPA + PostgreSQL) (0) | 2025.02.19 |
[Spring Boot]Gradle 의존성 implementation vs runtimeOnly vs api 차이 (0) | 2025.02.17 |
[Spring Boot] Response Entity를 사용하는 이유와 잘 사용하는 법 (0) | 2024.06.01 |
[Spring Boot] @PostConstruct 사용법 (0) | 2024.05.23 |