스프링 WebClient에 대해서

Red Culture·2021년 8월 2일
0

스프링 WebClient란

스프링 WebFlux는 HTTP Request를 수행하는 client인 WebClient를 포함하고 있다. 웹으로 API를 호출하기 위해 사용되는 HTTP Client 모듈 중 하나이다. 비동기/논블로킹을 지원하는 HTTP Request Client(API)이다.

RestTemplate 동작 방식

멀티쓰레드와 동기/블로킹 방식을 사용한다.

1) 클라이언트 애플리케이션 구동 시 쓰레드 풀을 만든다.
2) Request는 먼저 queue에 쌓이고 가용 쓰레드가 있으면 해당 쓰레드에 할당된다. (1요청 당 1쓰레드 할당)
3) 각 쓰레드는 블로킹 방식이기 때문에 완료 응답이 올 때까지 다른 요청에 할당될 수 없다.
4) 쓰레드가 다 찼다면 이후 요청은 queue에 대기하게 된다.

WebClient 동작 방식

싱글쓰레드와 비동기/논블로킹 방식을 사용한다. 코어당 1개의 쓰레드를 이용한다.

1) 각 요청은 event loop 내에 job으로 등록이 되고, job을 제공자에게 요청한 후 응답 결과를 기다리지 않고 다른 job을 처리한다.
2) callback을 통해 제공자에게 응답 결과가 오면 그 결과를 요청자에게 제공한다.

WebClient 생성 방법

1) 정적 팩토리 메서드 사용

  • WebClient.create()
  • WebClient.create(String baseUrl)
  • default 값이나 filter, connectionTimeout 등.. 옵션값을 사용하려면 Builder 클래스를 통해 생성하는 것이 좋다.

2) WebClient.builder()

  • 1개의 값을 리턴할 때는 bodyToMono(), 복수의 값을 리턴할 때는 bodyToFlux()를 사용
  • HTTP 호출 결과를 가져올 수 있는데 retrieve()를 통해 바로 ResponseBody를 처리할 수 있다.
  • exchange()를 통해 세세한 컨트롤이 가능하지만, Response 컨텐츠에 대한 모든 처리를 직접 하면서 메모리 누수 가능성 때문에 retrieve()를 권고하고 있다.

*참고 자료
https://binux.tistory.com/56
https://happycloud-lee.tistory.com/220
https://araikuma.tistory.com/832?category=991358
https://ict-nroo.tistory.com/119

profile
자기 개발, 학습 정리를 위한 블로그

0개의 댓글