[TIL] WebFlux, WebClient
in TIL on Til Last modified at:
2025-05-05 TIL
📝 TIL (Today I Learned)
🔗 원본 이슈: #50
📅 작성일: 2025-05-05
🔄 최종 수정: 2025년 05월 22일
🍀 새롭게 배운 것
WebFlux
RestTemplate로 작성했던 Gemini 통신 부분을 Webclient로 작성하려고 하니 공부해야 할 부분이 많았다. 일단 WebFlux를 공부하기 전에 관련 블로그 링크는 아래와 같아.
Spring WebFlux
비동기적으로 동작하는 논블로킹 방식으로, Client와 Server에서 reactive 스타일의 어플리케이션 개발을 도와주는 스프링 모듈
WebClient
는Spring WebFlux
에서 HTTP Client로 사용되는 비동기 방식의 통신 도구- 기존의
RestTemplate
과 달리, I/O 작업을 블로킹하지 않고Mono
,Flux
를 통해 비동기 스트림 처리가 가능
주요 특징
- Netty 기반의 논블로킹 서버 구동 가능 (
@EnableWebFlux
로 설정) - 작은 요청에도 적은 리소스로 대응 가능해, 고성능 시스템에 적합
- 데이터 처리 흐름이
Reactive Stream
기반으로 동작
- Netty 기반의 논블로킹 서버 구동 가능 (
기본 구성 요소
Mono<T>
: 0 또는 1개의 데이터를 비동기적으로 처리Flux<T>
: 0개 이상의 데이터를 스트림 형태로 처리
예제 코드
WebClient client = WebClient.builder() .baseUrl("https://api.example.com") .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .build(); Mono<ResponseDto> response = client.post() .uri("/gemini") .bodyValue(requestDto) .retrieve() .bodyToMono(ResponseDto.class);
아직은
WebClient
내부 동작과 Mono/Flux 체계가 낯설지만, 기존 동기식 방식과 비교하면서 천천히 익히는 중. 테스트할 땐.block()
으로 동기화 가능하지만, 실제 운영 환경에선 꼭 지양해야 한다는 것도 기억!나중에 제대로 정리해서 블로그 업데이트 예정