Skip to main content

Spring WebFlux & Reactor 초급 가이드

· 4 min read
hwayoung kim
소주같은 개발자

Spring WebFlux와 Reactor는 비동기 논블로킹 프로그래밍을 가능하게 해주는 강력한 도구입니다.
이 글에서는 초급자들이 입문하기 좋은 4가지 주제를 중심으로 개념과 실전 예시를 함께 소개합니다.


1. Spring WebFlux란 무엇인가?

Spring WebFlux는 Spring 5부터 도입된 비동기 논블로킹 웹 프레임워크입니다. 전통적인 Spring MVC는 서블릿 기반으로 블로킹 I/O를 사용하지만, WebFlux는 Reactor 기반의 논블로킹 처리 모델을 사용합니다.

주요 차이점

항목Spring MVCSpring WebFlux
실행 모델서블릿 (Servlet API)Netty (기본)
I/O 방식블로킹 (Blocking)논블로킹 (Non-blocking)
스레드 사용요청당 하나의 스레드이벤트 루프 기반
반환 타입String, ModelAndViewMono, Flux

언제 WebFlux를 사용할까?

  • 동시에 수천 개의 요청을 처리해야 하는 경우
  • 비동기 처리와 스트리밍이 필요한 경우 (예: SSE, WebSocket)
  • 리소스가 제한된 환경 (IoT 등)에서의 고성능 서버

2. Mono와 Flux 기초

Reactor에서는 비동기 데이터 흐름을 Mono (01개) 또는 Flux (0N개)로 표현합니다.

기본 개념

Mono<String> mono = Mono.just("Hello Mono");
Flux<Integer> flux = Flux.just(1, 2, 3, 4, 5);

주요 연산자

연산자설명
map()변환
flatMap()비동기 내부 흐름 병합
filter()조건 필터링
zip()여러 스트림 합치기
onErrorResume()예외 처리

실행

mono.subscribe(System.out::println);
flux.subscribe(i -> System.out.println("Value: " + i));

3. WebClient 기본 사용법

WebClient는 WebFlux에서 사용하는 논블로킹 HTTP 클라이언트입니다. RestTemplate보다 더 유연하며, Reactor 기반으로 동작합니다.

기본 예제

WebClient webClient = WebClient.create("https://jsonplaceholder.typicode.com");

Mono<String> response = webClient.get()
.uri("/todos/1")
.retrieve()
.bodyToMono(String.class);

response.subscribe(System.out::println);

주요 기능

  • retrieve(): 응답 추출
  • exchangeToMono(): 상태 코드별 분기 처리
  • timeout(), retry() 등 고급 연산자 지원

4. 간단한 비동기 API 만들기 (WebFlux 기반)

Spring WebFlux를 사용해 다음과 같은 REST API를 만들 수 있습니다.

예제

@RestController
@RequestMapping("/api")
public class HelloController {

@GetMapping("/hello")
public Mono<String> hello() {
return Mono.just("안녕하세요!");
}

@GetMapping("/numbers")
public Flux<Integer> numbers() {
return Flux.range(1, 5);
}
}

실행 결과

  • /api/hello"안녕하세요!" 반환
  • /api/numbers1 2 3 4 5 스트리밍

Reference

Reference