[Reactive] 06. 마블 다이어그램

Jimin Lim·2024년 3월 9일
0

Spring

목록 보기
13/18
post-thumbnail
post-custom-banner

6.1 마블 다이어그램이란?

  1. 두 개의 타임라인이 존재, 위가 Operator 기준으로 Upstream의 Publisher
  2. 가장 왼쪽의 1이 시간상 먼저 emit
  3. 수직 바는 데이터의 emit이 정상으로 끝남, onComplete signal에 해당
  4. Operator 로 향하는 점선 화살표는 Publisher로부터 emit된 데이터가 Operator 함수의 입력으로 전달되는 것
  5. Operater 함수에서 나가는 점선 화살표는 Operator 함수에서 리턴하는 새로운 Publisher를 이용해 Downstream에 가공된 데이터를 전달하는 것을 의미함
  6. x 표시는 onError Signal

6.2 마블 다이어그램으로 Reactor의 Publisher 이해하기

Mono

public class Example6_1 {
    public static void main(String[] args) {
        Mono.just("Hello Reactor")
                .subscribe(System.out::println);
    }
}
  • just() 로 한 개 이상의 데이터를 emit
  • Mono.just() 에 두 개 이상의 파라미터로 전달한다면 내부적으로 fromArray() Operator 이용해 데이터를 emit 한다.
public class Example6_2 {
    public static void main(String[] args) {
        Mono
            .empty()
            .subscribe(
                    none -> System.out.println("# emitted onNext signal"), //onNext Signal 
                    error -> {}, //onError Signal
                    () -> System.out.println("# emitted onComplete signal") //onComplete
            );
    }
}
  • empty() 를 이용해 한 건도 emit 하지 않고 onComplete signal 전송 가능
    • 특정 작업을 통해 데이터를 전달받을 필요는 없지만 작업이 끝났음을 알리고 후처리를 할때 사용

Flux

Flux는 여러 건의 데이터를 emit할 수 있는 Publisher 타입, Mono의 데이터 emit 범위를 포함한다.

// Mono 두 개를 연결해서 Flux로 변환
public class Example6_6 {
    public static void main(String[] args) {
        Flux<String> flux =
                Mono.justOrEmpty("Steve")
                        .concatWith(Mono.justOrEmpty("Jobs"));
        flux.subscribe(System.out::println);
    }
}

  • concatWith을 이용해 두 개의 데이터 소스를 연결하는 것을 마블 다이어그램으로 표현하면 위와 같다.
    • concat operator로 여러 개의 데이터 소스를 연결 할 수 있다.
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️
post-custom-banner

0개의 댓글