How to read marble diagrams?

2024. 11. 20. 11:30Project Reactor

🚀 마블 다이어그램(Marble Diagrams) 읽는 방법

Flux와 Mono를 소개할 때 "마블 다이어그램(marble diagram)"이라는 시각적 표현 방법을 예시로 제시했습니다. 마블 다이어그램은 Reactor 문서 및 javadoc에서 연(operator)의 동작을 보다 직관적으로 설명하기 위해 널리 사용됩니다. 이번 섹션에서는 Reactor 문서에서 사용되는 마블 다이어그램의 규칙과 다양한 표현 방식에 대해 자세히 살펴보겠습니다.

 

📌 기본 마블 다이어그램 표현 방식

인스턴스 메서드 연산자 (Instance Operator)

일부 연산자는 소스 Flux 인스턴스에서 메서드를 호출하여 결과를 생성합니다.

Flux<T> output = source.fluxOperator();

 

위 다이어그램은 소스 Flux에서 각 요소가 연산자를 거쳐 출력 Flux로 전달되는 과정을 나타냅니다.

 

정적 메서드 연산자 (Static Operator)

다른 연산자는 정적 메서드 형태로, 입력 소스를 파라미터로 받아 결과 Flux를 생성합니다.

Flux<T> output = Flux.merge(sourceFlux1, sourcePublisher2);

 

 

여러 입력 또는 변형 사례 (Variants)

한 가지 연산자가 여러 가지 입력이나 동작 방식을 가질 때는 다음과 같이 표현됩니다.

 

 

🔥 고급 연산자 패턴

🚧 ParallelFlux: 다중 출력 Flux

ParallelFlux는 다수의 출력 Flux를 생성하며, 이들은 병렬적으로 나란히 표현됩니다.

 

 

🖼️ Windowing: Flux<Flux>

Window 연산자는 내부적으로 여러 개의 Flux를 포함한 Flux를 생성하며, 각각의 내부 Flux는 독립적인 윈도우로서 표현됩니다.

 

🎯 Companion Publisher 사용 연산자

일부 연산자는 추가적인 companion publisher(Flux, Mono 또는 Reactive Stream Publisher)를 입력받아 특정 행동을 트리거합니다.

 

 

📊 Flux와 Mono의 신호와 이벤트 표현

다음은 Flux 또는 Mono에서 발생할 수 있는 다양한 신호, 이벤트 및 요소들의 그래픽 표현입니다.

 

 

⚙️ Side effects의 표현

Reactive Stream 신호와 함께 발생하는 부가 효과(Side effects)의 그래픽 표현은 다음과 같습니다.

 

 

이렇게 마블 다이어그램을 활용하면 복잡한 리액티브 프로그래밍 로직을 직관적으로 이해하고 쉽게 디버깅할 수 있습니다. 앞으로 리액티브 연산자 사용 시 이 다이어그램을 적극 활용해 보세요! 🚀✨

'Project Reactor' 카테고리의 다른 글

Non-Reactive(비반응적) vs. Reactive(반응적): 우유 공장 예제  (0) 2024.11.21
Reactive Streams  (0) 2024.11.17