Java_마블 다이어그램

Minki CHO·2023년 1월 29일
0

CodeStates

목록 보기
33/43

마블 다이어그램 Marble Diagram

? 마블Marble이란?
:(in dictionary) 구슬
:구슬 모양의 동그라미 = 하나의 데이터를 의미
:다이어그램 상에서 시간의 흐름에 따라 변화하는 데이터의 흐름을 표현함

마블 다이어그램으로 Mono와 Flux 이해하기

1 Mono의 마블 다이어그램

:마블 다이어그램에는 아래/위 두 개의 타임 라인 존재, 이는 모두 데이터가 흘러가는 시간의 흐름을 표현함
:시간은 왼쪽에서 오른쪽으로 흐르기 때문에 시간상으로는 왼쪽이 빠른 시간임

1) Mono의 타임라인
:원본 Mono Original Mono 에서 Sequence가 시작되는 것을 타임라인으로 표현

2) emit되는 데이터
:그림 상에서 구름 모양의 데이터 하나가 emit 됨
:단순히 구슬 모양의 데이터 하나가 아닌 Mono는 0건 또는 1건의 데이터만 emit하는 Reactor 타입이므로 마브 다이어그램에서 이를 표현함

3) Mono의 Sequence 정상 종료
:수직 막대바는 Mono의 Sequence가 정상 종료됨을 의미

4) Mono에서 emit된 데이터를 가공처리하는 Operator
:Mono에서 지원하는 어떤 Operator에서 입력으로 들어오는 구슬 모양의 데이터가 가공처리되는 것을 표현함

5) Operator를 거쳐 변환되는 Mono의 타임라인
:Operator에서 가공 처리된 데이터가 Downstream으로 전달될 때의 타임라인
:시간의 흐름은 위쪽과 동일하게 왼족이 빠른 시간임

6) 에러로 인한 Mono의 비정상 종료
:만약 Mono에서 emit된 데이터가 처리되는 과정에 에러 발생 시 'X'로 표시

| : 정상종료, X : 에러로 인한 비정상 종료

2 Flux의 마블 다이어그램

:Mono의 마블 다이어그램과 큰 차이가 없으나
여러개의 데이터를 emit하는 점에서 차이가 나타남

3 Operator의 마블 다이어그램 예

:map() Operator를 통해 동그라미 데이터를 네모로 변환하여 Downstream으로 전달

import reactor.core.publisher.Flux;

public class MarbleDiagramExample {
    public static void main(String[] args) {
        Flux
            .just("Green-Circle", "Orange-Circle", "Blue-Circle")   // 1)
            .map(figure -> figure.replace("Circle", "Rectangle"))   // 2)
            .subscribe(System.out::println);   // 3)
    }
}

1) .just("Green-Circle", "Orange-Circle", "Blue-Circle")
:세개의 문자열 데이터(색깔을 가진 동그라미)를 emit

2) .map(figure -> figure.replace("Circle", "Rectangle"))
:map() Operator를 통해 동그라미를 네모로 replace 변환함

3) .subscribe(System.out::println);
:변환된 분자열을 출력

profile
Developer

0개의 댓글