Mono와 Flux

2025. 1. 29. 19:34·개념 저장소/spring reactive

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
'개념 저장소/spring reactive' 카테고리의 다른 글
  • backpressure
  • Cold sequence/Hot sequence
  • 리액티브 스트림 구성요소
  • 리액티브 시스템이란
jamin
jamin
  • jamin
    jamin
    jamin
  • 전체
    오늘
    어제
    • 전체 (82)
      • 트러블슈팅 (31)
        • 회사 (25)
        • 개인 (6)
      • 개념 저장소 (19)
        • coroutine (10)
        • spring reactive (9)
        • network (0)
      • 코딩 테스트 (31)
  • 태그

    누적합
    Kotlin
    수학
    그리디
    백준 23758
    dfs
    경로압축
    다익스트라
    JPA
    reactive
    분리집합
    mirroring mode
    대용량 데이터
    batch
    백준
    instancio
    코테
    log
    spring boot
    cluster mode
    정렬
    그리디 알고리즘
    error alram
    코딩테스트
    spring reactive
    coroutine
    DP
    다이나믹 프로그래밍
    sinks
    BFS
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
jamin
Mono와 Flux
상단으로

티스토리툴바