| Spring WebFlux | Flux와 Mono

아야하면우유·2026년 6월 24일

WebFlux

목록 보기
3/3
post-thumbnail

💡 Mono는 0~1개, Flux는 0~N개

비동기 통신은 Publisher와 Subscriber(Provider와 Consumer)이 중요합니다. 그렇기 때문에 이번에는 Publisher에 대해 알아보겠습니다.


Mono

Mono라는 단어는 "하나"를 의미하는 그리스어의 접두사입니다. 0개에서 최대 1개의 결과를 emit하는 Publisher입니다.

  • onNext : 데이터 1개 전달(1회)
  • onComplete : 모든 작업이 성공했을 때 호출한다. 이후에 onNext는 호출하면 안 된다.
  • onError : 작업 중 예외를 던진다. 이후에 onNext, onComplete를 호출하면 안 된다.
// "Hello"라는 단일 데이터를 포함하는 Mono 생성
Mono<String> monoJust = Mono.just("Hello");

// 데이터 없이 작업 완료 신호를 전파하는 Mono 생성
Mono<Void> monoEmpty = Mono.empty();

// 데이터 없이 예외를 던지는 Mono 생성
Mono<String> monoError = Mono.error(new RuntimeException("Error occured");

Flux

Flux라는 단어는 라틴어의 Fluxus와 Fluere에서 유래되었으며, "흐르는", "흐름"이라는 의미를 갖고 있습니다. 0개에서 최대 n개의 데이터를 emit하는 Publisher입니다.

  • onNext : 데이터 1개 전달(n회)
  • onComplete : Mono와 동일
  • onError : Mono와 동일
// 1..5 5개의 데이터를 순차적으로 emit하는 Flux
Flux<Integer> fluxJust = Flux.just(1, 2, 3, 4, 5);

// List로 생성한 Flux
// List<String> names = List.of("Alice", "Bob", "Charlie");
Flux<String> fluxFromIterable = Flux.fromIterable(names);

Publisher의 메소드

  • map : 동기적인 1:1 변환

    • A타입의 요소를 B타입으로 변환
    • 각 요소에 대한 메소드를 람다식 실행
  • flatMap: 비동기적인 1:N 변환

    • 각 요소를 새로운 Mono / Flux로 변환하고, 하나의 Stream으로 평탄화
  • filter : 주어진 조건을 만족하는 요소만 통과

  • zip : 여러 Stream 요소를 하나씩 짝지어 새로운 Stream 생성

  • merge : 여러 Stream을 도착하는 순서대로 하나의 Stream으로 합침


Publisher의 생명주기

MonoFlux는 Observable을 subscribe하지 않으면, 무언가 실행되는 것은 아니다. 단지 이벤트가 발생했을 때, 이벤트 처리 방법을 프로세스화한 것이다.

profile
우유가 넘어지면 아야

0개의 댓글