Mono
1. Mono
- 기본적인 rx 연산자를 갖춘 Reactive Streams Publisher입니다.
- rx 연산자(Reactive Extensions 연산자)는 리액티브 프로그래밍에서 비동기 데이터 스트림을 생성, 변환, 결합, 필터링하는 데 사용되는 함수들을 말합니다.
- onNext 신호를 통해 최대 하나의 항목만 방출한 다음 onComplete 신호로 종료됩니다(값이 있거나 없는 성공적인 Mono)
- 또는 단일 onError 신호만 방출합니다(실패한 Mono).
- 대부분의 Mono 구현은 Subscriber#onNext(T)를 호출한 후 즉시 Subscriber.onComplete()를 호출할 것으로 예상됩니다.
- Mono.never()는 예외적인 경우로, 어떤 신호도 방출하지 않습니다.
- 이는 기술적으로 금지된 것은 아니지만 테스트 외에는 그다지 유용하지 않습니다.
- 반면, onNext와 onError의 조합은 명시적으로 금지되어 있습니다.
1.1 특징 요약
- 최대 하나의 항목: Mono는 최대 한 개의 항목만 방출할 수 있습니다.
- 종료 신호: 항목 방출 후에는 항상 onComplete 신호로 종료되거나, 오류 발생 시 onError 신호만 방출합니다.
- 동작 방식: 대부분의 Mono 구현은 onNext 호출 후 즉시 onComplete를 호출합니다.
- 예외 사례: Mono.never()는 어떤 신호도 방출하지 않는 특수 케이스입니다.
- 금지된 동작: onNext와 onError 신호의 조합은 명시적으로 금지되어 있습니다.
doOnError

public final <E extends java.lang.Throwable> Mono<T> doOnError(java.lang.Class<E> exceptionType,
java.util.function.Consumer<? super E> onError)
- 레퍼런스
- doOnError 메서드는 특정 타입의 예외가 발생했을 때 추가 동작을 수행할 수 있게 해주는 연산자입니다.
- 주어진 예외 타입과 일치하는 오류로 Mono가 완료될 때 트리거되는 동작을 추가합니다.
- Consumer가 먼저 실행된 다음, onError 신호가 다운스트림으로 전파됩니다.
- doOnError는 오류를 처리(복구)하지 않는다는 점에서 onErrorResume이나 onErrorReturn과 다릅니다.
- 특징
- 지정된 예외 타입(exceptionType)과 일치하는 오류만 처리합니다. 이를 통해 특정 예외 타입에 대해서만 반응할 수 있습니다.
- 데이터 흐름을 변경하지 않고 오류 발 생 시 부가적인 작업(로깅, 메트릭 기록 등)을 수행합니다.
- Consumer 실행 후에도 원래의 오류는 계속해서 다운스트림으로 전파됩니다. 이는 오류를 처리(해결)하는 것이 아니라 단순히 관찰하는 것입니다.
- 타입 매개변수
- E: 처리할 오류의 타입
- 매개변수
- exceptionType: 처리할 예외의 타입
- onError: 관련 오류에 대한 오류 핸들러
- 반환값
- Mono에 관찰자(observer) 패턴이 적용된 새로운 Mono 인스턴스
- 사용 예시
- 로깅, 메트릭 기록, 오류 처리 등 다양한 상황에서 유용하게 사용됩니다.
- 오류를 복구하지 않고 부가적인 작업만 수행하고 싶을 때
doOnNext

public final Mono<T> doOnNext(java.util.function.Consumer<? super T> onNext)
- 레퍼런스
- Mono가 데이터를 성공적으로 방출할 때 트리거되는 동작을 추가합니다.
- Consumer가 먼저 실행된 다음, onNext 신호가 다운스트림으로 전파됩니다.
- 매개변수
- onNext: 방출된 데이터에 대해 수행할 동작을 정의하는 Consumer입니다.
- 반환값
- 새로운 Mono 인스턴스입니다. 이 인스턴스는 원본 Mono와 동일합니다.
doOnSuccess

public final Mono<T> doOnSuccess(java.util.function.Consumer<? super T> onSuccess)