💡 Mono는 0~1개, Flux는 0~N개
비동기 통신은 Publisher와 Subscriber(Provider와 Consumer)이 중요합니다. 그렇기 때문에 이번에는 Publisher에 대해 알아보겠습니다.
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라는 단어는 라틴어의 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);
map : 동기적인 1:1 변환
A타입의 요소를 B타입으로 변환flatMap: 비동기적인 1:N 변환
Mono / Flux로 변환하고, 하나의 Stream으로 평탄화filter : 주어진 조건을 만족하는 요소만 통과
zip : 여러 Stream 요소를 하나씩 짝지어 새로운 Stream 생성
merge : 여러 Stream을 도착하는 순서대로 하나의 Stream으로 합침
Mono와 Flux는 Observable을 subscribe하지 않으면, 무언가 실행되는 것은 아니다. 단지 이벤트가 발생했을 때, 이벤트 처리 방법을 프로세스화한 것이다.