스프링 어플리케이션에서 HTTP 요청에 쓰이는 인터페이스는 RestTemplate과 WebClient가 있다. 둘 다 외부 API호출, 마이크로서비스 간 통신, 서버와의 HTTP 요청 및 응답처리에 사용된다.
restTemplate.exchange(
uri, HttpMethod.GET, httpEntity, KakaoResponseDto.class
).getBody();
RESTful은 많이 들어봤지만 WebClient는 처음 들어봤다. 최신 방식이라고 하니 이번에 간단하게 정리해본다.
WebClient의 큰 특징은 Non-Blocking 방식이며, 동기/비동기 모두 지원한다는 점이다. Non-Blocking 방식
이란 호출된 시스템의 결과를 기다리지 않고 다른 작업을 처리할 수 있다는 것이다
WebClient는 WebFlux에서 제공하는 기능이니까 WebFlux에 대해 알아보자
한 줄로 표현하면 이렇다
many request : 1 thread, async + Non-Blocking
Non-Blocking
: 하나의 작업을 처리하고 결과를 반환하기전에 다른 작업을 수행할 수 있다.Reactive Stream
: Reactive Stream은 비동기적인 데이터 처리를 위한 기반 인터페이스이다.
Publisher, Subscriber, Subscription 간의 상호작용을 하는데 Publisher
는 데이터를 생성하고 발행하는 역할을 담당하며, Subscriber
는 데이터를 읽고 처리하는 역할을 담당한다. Subscription
은 Publisher와 Subscriber 간의 연결을 관리하고 데이터의 요청과 취소를 제어하는 역할을 한다.
Mono
Flux
비동기와 논블로킹이 같은 개념인줄 알았는데 좀 다르다고 한다.
동기와 비동기, 블로킹과 논블로킹의 개념을 나중에 좀 더 명확히 알아봐야겠다.