Spring Flux/Mono란
Spring WebFlux의 리액티브 라이브러리 중 하나가 Reactor이다. Reactor는 Flux/Mono api를 제공한다.
Flux/Mono는 Reactive Streams 인터페이스 중에서 데이터(시퀀스)를 제공하는 발행자 역할을 하는 Publisher의 구현체이다.
- Flux
-0~N개의 데이터를 전달하기 위한 Reactor 객체이다.
-하나의 데이터를 전달할 때 마다 onNext 이벤트를 발생시키며, Flux내의 모든 데이터의 전달 처리가 완료되면 onComplete가 발생되며, 데이터 전달 과정에서 오류가 발생되면 onError 이벤트가 발생된다.
- Mono: 0~1개의 데이터를 전달하기 위한 Reactor 객체이다.
Flux/Mono를 생성하는 방법
1) Flux: Flux 클래스에서 제공하는 팩토리 메서드를 사용한다.
- just: 시퀀스 생성하고 시퀀스가 있으면 데이터를 발생시킨다. 데이터를 주지 않으면 complete 신호만 발생시킨다.
-> subscribe가 실행되기 전까지는 어떤 일도 발생되지 않는다. publisher(발행자)는 구독이 되었을 때만 데이터를 subscriber(구독자)에게 전달한다. 구독을 하는 과정은 publisher에게 정의된 subscribe() 메서드를 사용한다. 이때 매개변수로 consumer 함수를 전달할 수 있다. consumer 함수는 데이터를 전달해서 subscriber의 onNext 이벤트가 발생할 때 실행되는 함수이다.
- range: int 범위를 지정하여 순차적인 데이터를 생성해준다.
- fromArray / fromIterable / fromStream: Array / Iterable / Stream을 사용해서 Flux를 생성할 수 있다.
- empty: 아무 값도 전달하지 않는 empty Flux를 만들 수 있다.
- defer(supplier): 구독되는 순간에 supplier를 실행하여 시퀀스를 생성
2) Mono
*참고 자료
https://dreamchaser3.tistory.com/17
https://brunch.co.kr/@springboot/154
https://javacan.tistory.com/entry/Reactor-Start-1-RS-Flux-Mono-Subscriber