
Spring Framework에서 제공하는 비동기(Asynchronous) 및 논블로킹(Non-blocking) 방식의 웹 애플리케이션 개발을 지원하는 웹 프레임워크이다. 이는 특히 높은 동시성(Concurrency) 요구 사항을 처리하거나 Reactive Programming(반응형 프로그래밍) 모델을 사용하는 애플리케이션에 적합하다.
request), 응답(response)할 때, 논블로킹 방식으로 스트림 형태로 데이터를 처리한다. Publisher: 데이터를 제공하는 주체Subscriber: 데이터를 소비하는 주체Flux: 0개 이상의 데이터 스트림 (다중 값)Mono: 0개 또는 1개의 데이터 스트림(단일 값)논블로킹 방식은 작업을 요청한 쓰레드가 실행 결과를 기다리지 않고, 다른 작업을 계속 수행할 수 있는 방식이다. 요청한 작업이 완료되면 나중에 그 결과를 처리한다. 이는 일반적인 블로킹 방식과는 반대로, 요청에 대해 즉시 제어권을 반환하며, 작업의 완료 여부와 관계없이 쓰레드가 다른 일을 할 수 있도록 허용한다.
논블로킹 I/O
Reactive Programming 패러다임
map, flatMap, filter 등과 같은 연산자를 사용해 데이터를 변환하고 처리한다.서버와 클라이언트
WebClient)를 제공한다.RestTemplate의 대안으로, 비동기 방식으로 HTTP 요청을 수행한다.| 특징 | Spring MVC | Spring WebFlux |
|---|---|---|
| 요청 처리 모델 | 동기(Blocking) | 비동기(Non-blocking) |
| 기반 서버 | Servlet 기반 (Tomcat 등) | Netty, Undertow, Servlet 기반 |
| Concurrency | 스레드 수 제한 | 이벤트 루프(Event Loop) 기반 처리 |
| Reactive 지원 | 지원하지 않음 | Reactive Streams 및 Project Reactor |
| 적합한 애플리케이션 | 일반적인 웹 애플리케이션 | 높은 동시성을 요구하는 애플리케이션 |
HandlerFunction & RouterFunction
RouterFunction<ServerResponse> route = RouterFunctions
.route(RequestPredicates.GET("/hello"), request -> ServerResponse.ok().bodyValue("Hello, WebFlux!"));
Reactive Data Types
Mono: 1개의 데이터 또는 에러를 비동기적으로 반환Flux: 0개 이상의 데이터를 스트림 형태로 반환public Mono<String> getMessage() {
return Mono.just("Hello, WebFlux!");
}
public Flux<Integer> getNumbers() {
return Flux.just(1, 2, 3, 4, 5);
}
WebClient
WebClient webClient = WebClient.create();
Mono<String> result = webClient.get()
.uri("https://api.example.com/data")
.retrieve()
.bodyToMono(String.class);