Spring WebFlux & Reactor 초급 가이드
· 4 min read
Spring WebFlux와 Reactor는 비동기 논블로킹 프로그래밍을 가능하게 해주는 강력한 도구입니다.
이 글에서는 초급자들이 입문하기 좋은 4가지 주제를 중심으로 개념과 실전 예시를 함께 소개합니다.
1. Spring WebFlux란 무엇인가?
Spring WebFlux는 Spring 5부터 도입된 비동기 논블로킹 웹 프레임워크입니다. 전통적인 Spring MVC는 서블릿 기반으로 블로킹 I/O를 사용하지만, WebFlux는 Reactor 기반의 논블로킹 처리 모델을 사용합니다.
주요 차이점
| 항목 | Spring MVC | Spring WebFlux |
|---|---|---|
| 실행 모델 | 서블릿 (Servlet API) | Netty (기본) |
| I/O 방식 | 블로킹 (Blocking) | 논블로킹 (Non-blocking) |
| 스레드 사용 | 요청당 하나의 스레드 | 이벤트 루프 기반 |
| 반환 타입 | String, ModelAndView 등 | Mono, Flux |
언제 WebFlux를 사용할까?
- 동시에 수천 개의 요청을 처리해야 하는 경우
- 비동기 처리와 스트리밍이 필요한 경우 (예: SSE, WebSocket)
- 리소스가 제한된 환경 (IoT 등)에서의 고성능 서버
2. Mono와 Flux 기초
Reactor에서는 비동기 데이터 흐름을 Mono (01개) 또는 N개)로 표현합니다.Flux (0
기본 개념
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/numbers→1 2 3 4 5스트리밍