..
Spring WebFlux: WebClient를 활용한 Non-Blocking HTTP 요청
1. Non-Blocking I/O란?
전통적인 Blocking I/O 방식에서는 쓰레드가 HTTP 요청을 보내면 응답이 올 때까지 아무 일도 하지 못하고 기다려야 합니다.
반면 Non-Blocking I/O는 요청을 보낸 후 응답을 기다리지 않고 즉시 다음 작업을 수행할 수 있는 비동기 통신 방식입니다. 이는 쓰레드 가동률을 극대화하여 더 적은 자원으로 대규모 요청을 효율적으로 처리할 수 있게 해줍니다.
2. Spring WebClient 활용 예제
스프링 5부터 도입된 WebFlux의 WebClient를 사용하면 선언적인 방식으로 비동기 요청을 처리할 수 있습니다.
// 의존성: spring-boot-starter-webflux
public Mono<User> getUserInfo(String userId) {
WebClient client = WebClient.create("https://api.example.com");
return client.get()
.uri(uriBuilder -> uriBuilder.path("/users/{id}")
.build(userId))
.retrieve()
.bodyToMono(User.class); // 결과를 비동기 래퍼인 Mono로 반환
}
3. 요약
- 적용 대상: 대규모 트래픽이 발생하거나 외부 API 서비스와의 연동이 잦은 마이크로서비스 환경.
- 핵심 이점: 쓰레드 대기 시간을 없애 서비스의 전체적인 응답 속도와 처리량(Throughput)을 향상시킵니다.
WebClient는 기존의 RestTemplate을 대체하는 현대적인 권장 라이브러리입니다.