Spring WebClient

웹클라이언트!!

공식 API 문서는 다음과 같다.

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.html

암만 한글이 좋아도 우선 영어 원문… API문서의 헤드 부분만이라도 보자.

근데 사실 이게 전부야

논블럭킹 I/O인 반응형 HTTP클라이언트이고, 뭐 빠르고 유창하고 어쩌구저쩌구……

여기서 핵심은 ‘논블럭킹’ 이다.

Non-Blocking I/O

서버개발자에게 필수 덕목인 ‘어렵고 반응속도가 빠른’ 개발방법이다. 기존의 RestTemplate은

‘멀티스레드이긴 하지만 블로킹 I/O방식’ 이다.

RestTemplate를 이용해 HTTP request를 날리면, HTTP response가 올 때까지 계속 기다린다(블로킹)는 뜻이다.

긴말 필요없이 당연히 수행속도가 느리겠다. HTTP request 시점부터 response 가 올때까지 하염없이 기다려야 하기 때문…

그래서 WebClient라는, 쓸데없는 리소스 점유율을 낮추는 라이브러리를 Spring 5.0에서부터 제공해 준다.

사용법

https://www.baeldung.com/spring-5-webclient

기타 특이사항

  • 선언형 스타일로 작성 가능
  • (당연하지만) Connection timeout 설정 가능.
  • (당연하지만) request Header 설정 가능.
  • retrive 와 exchange로 response 핸들링 취사선택
    • retrive
      • 간단간단
    • exchange
      • 복잡복잡

retrive vs exchange

ResponseEntity로, 혹은 Bean Object로 한방에 assign
왠만해서 요렇게 exchange로 일일히 response 받아쓰는 흑우들은 없제?

Mono vs Flux

pub/sub 구조에서의 publish를 한번만 처리할 것이냐, 여러번 처리할 것인가의 차이를 갖는다.

단적인 예로 reduce 연산자는 Mono를 리턴하고, 두개의 Mono를 mergeWIth 연산을 통해 나오는 결과는 Flux을 리턴한다.

Leave a Comment