1. Mono와 Flux란 무엇인가?
Mono와 Flux는 리액티브 프로그래밍의 핵심 요소로, 데이터 스트림을 비동기적으로 처리할 수 있도록 해줍니다. 이는 논블로킹(Non-blocking) 방식으로 동작하며 데이터가 필요할 때만 요청하고 처리할 수 있도록 설계되었습니다.
- Mono<T>: 최대 1개의 데이터를 발행하는 Publisher
- Flux<T>: 0개 이상의 데이터를 발행하는 Publisher
2. Mono와 Flux의 차이점
Spring WebFlux에서는 두 가지 주요 Publisher 타입이 있습니다:
- Mono<T>: 0 또는 1개의 데이터를 발행하는 Publisher (최대 1개)
- Flux<T>: 0개 이상의 데이터를 발행하는 Publisher (무한 가능)
Mono<String> mono = Mono.just("Hello, Mono!");
Flux<String> flux = Flux.just("Hello", "Flux", "World");
3. Mono와 Flux의 동작 방식 및 내부 원리
Mono 동작 원리
Mono는 기본적으로 단일 데이터를 감싸는 래퍼 역할을 하며, 내부적으로 Deferred Execution(지연 실행) 방식으로 동작합니다. 즉, subscribe()가 호출될 때까지 실행되지 않습니다.
Mono<String> mono = Mono.just("Reactive Programming")
.map(String::toUpperCase)
.doOnNext(System.out::println);
mono.subscribe(); // 실행 시점
Flux 동작 원리
Flux는 여러 개의 데이터를 처리할 수 있으며, 내부적으로 onNext()를 여러 번 호출하여 데이터를 전송합니다.
Flux<Integer> flux = Flux.range(1, 5)
.map(i -> i * 2)
.doOnNext(System.out::println);
flux.subscribe();
5. Mono와 Flux의 주요 오퍼레이터
5.1 데이터 변환 오퍼레이터
오퍼레이터 | 설명 |
map | 각 요소에 변환 함수 적용 |
flatMap | Mono 또는 Flux로 변환 |
filter | 특정 조건을 만족하는 데이터만 전달 |
doOnNext | 값이 방출될 때 실행 |
5.2 데이터 결합 오퍼레이터
오퍼레이터 | 설명 |
zip | 여러 Mono 또는 Flux를 결합하여 동기화 |
merge | 여러 Flux의 데이터를 동시에 발행 |
concat | 순차적으로 Flux를 연결 |
'개념 저장소 > spring reactive' 카테고리의 다른 글
SINKS (0) | 2025.02.11 |
---|---|
backpressure (0) | 2025.02.01 |
Cold sequence/Hot sequence (0) | 2025.01.30 |
리액티브 스트림 구성요소 (0) | 2025.01.25 |
리액티브 시스템이란 (1) | 2025.01.21 |