- Blocking I/O 기반의 RestTemplate, Non-Blocking I/O 기반의 WebClient ~~~ WebClient는 Non-Blocking I/O 기반이기 때문에 각 Http 요청이 비동기적으로 발생하게 됩니다. 따라서 위 RestTemplate를 이용하여 Http 요청을 진행했을 때와 다르게 동작하게 되며 총 합쳐 대략 8초 정도가 걸리는 것이 아닌 각각 5초, 3초 걸리는 Http 요청을 동시에 처리하게 됩니다. Mono는 WebClient의 결과를 0 또는 1개의 결과를 받는 추상클래스며 Publisher 인터페이스를 구현하여 작성되었습니다. 이 Publisher는 바로 즉각적으로 로직을 실행하는 것이 아닌 subscribe 메서드를 통해 결과를 받아올 코드가 실행될 시 그때서야 로직을 실행하게 됩니다.
RestTemplate도 마찬가지로 커스터마이징이 가능하며 위 예시는 아파치의 HttpClient를 쓰도록 커스터마이징 한 것입니다. 기본적으로는 java.net.HttpURLConnection을 사용하지만 위 설정을 통해 HttpClient로 Http 요청을 하도록 바꾼 것입니다.
WebClient를 이용하는 경우 WebClientCustomizer를 반환하는 WebClientBuilder를 통하여 WebClient에 대한 설정을 할 수 있습니다. 위 예시는 baseUrl을 설정함으로써 WebClient를 통한 Http 요청을 할 때 주소를 생략하고 해당 자원을 요청하는 (/hello, /world) 부분만 명시하도록 한 것입니다. RestTemplate도 마찬가지로 커스터마이징이 가능하며 위 예시는 아파치의 HttpClient를 쓰도록 커스터마이징 한 것입니다. 기본적으로는 java.net.HttpURLConnection을 사용하지만 위 설정을 통해 HttpClient로 Http 요청을 하도록 바꾼 것입니다. ~~~
(참고) https://engkimbs.tistory.com/808 https://junebuug.github.io/2019-02-11/resttemplate-vs-webclient