• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Marble diagrams
        2023년 11월 05일
        • starryeye
        • 작성자
        • 2023.11.05.:32
        반응형

         

        Marble Diagram 이란..

         
        projectreactor 의 Reactor 를 사용하면 자주 보이는 다이어그램이다.
         
        Marble Diagram 은 Mono 와 Flux 의 연산자 동작을 시각적으로 보여주기 위함이며,
        javadoc 전체에서 쉽게 볼 수 있을 것이다.
         

        Marble Diagram 읽는 법

        위의 화살표는 시간의 흐름을 나타낸다.
        왼쪽에서 오른쪽 방향으로 시간 순서이다.
         

        위 다이어그램에서 도형은 파이프라인을 지나는 하나의 element 라 보면된다.
        세로 선은 onComplete 이벤트를 뜻한다.
         

        C 다이어그램에서는 타임라인에 "X" 표시가 있는데 이는 onError 이벤트가 발생되었음을 나타낸다.
         

        D 다이어그램에서는 타임라인에 element 만 존재하고, 이벤트는 발생하지 않아서 종료 되지 않았음을 뜻한다.
         

        위 다이어그램은 Marble Diagram 의 전체적인 틀을 보여준다.
        source Flux 의 element 들이 이벤트에 따라
        어떤 연산자(fluxOperator) 를 거쳐서
        output Flux 에 element 가 되는 동작을 보여준다.
         
        위 다이어그램을 코드로 본다면..
        Flux<T> output = source.fluxOperator(); 가 된다.
         
         
         
        이제 기본적인 틀을 알게 되었다.
        지금 부터는 실제 연산자를 통해 알아보겠다.
        (의도한 순서가 있는 것은 아니고 생각나는 연산자들을 하나씩 알아본다..)
         
        map

        map 연산자는 Java Stream 의 map 연산자와 유사하다.
        source publisher 의 element 타입은 T 이고 연산자를 거친 element 타입은 V 가 된다.
        따라서, 연산자의 파라미터로는 Function 함수형 인터페이스 구현체(mapper)를 전달해줘야한다.
        source publisher 에서 onNext, onComplete 이벤트가 연산자를 거쳐서
        그대로 downstream 으로 전달되는 것을 알 수 있다.
         
         
        just

        just 연산자는 sequence 생성 연산자이다.
        따라서 source publisher 의 timeline 이 없음을 확인할 수 있다.
         
         
        interval

        interval 연산자도 just 와 동일하게 sequence 생성 연산자이다.
        따라서 자체가 source publisher 가 된다.
        subscribe 이벤트가 도착하는 순간
        Parallel Scheduler 에 의해 특정 Duration 만큼 씩 기다렸다가 element 를 downstream 으로 전달하게 된다.
         
         
        collectList

        collectList 연산자는
        source publisher 가 element 를 쭉 전달하면
        내부적으로 element 를 모으고 있다가..
        source publisher 가 onComplete 이벤트를 전달하면,
        collectList 연산자의 downstream 방향으로..
        Mono 로 하나의 리스트를 element 로 전달하면서.. onComplete 이벤트를 전달한다.
         
         
        doOnNext

        doOnNext 연산자에는 처음보는 모양이 있다..
        저건 element 가 downstream 으로 전달되기 전에..
        부수 효과로서 한번 소비(Consume)되고 downstream 으로 전달된다는 뜻이다.
         
        아래는 위와 비슷한 모양의 의미를 정리한 표이다.

        어떤 함수형 인터페이스(Runnable, Consumer 등)인지..
        어떤 이벤트(onNext, onError 등)의 부수 효과인지..
        downstream 으로 전달 전에 실행하는지.. 후에 실행하는지...
        등을 모양으로 판별할 수 있다.
         
         
        subscribeOn

        subscribeOn 은
        upstream 방향으로 실행 스레드를 결정해주는 연산자로
        다이어그램을 보면 색상으로 실행 스레드를 잘 나타내준다.
         
         
        publishOn

        publishOn 연산자는
        subscribeOn 과 다르게
        downstream 방향으로 실행 스레드를 결정하는 것을 다이어그램에서 쉽게 표현한다.
         
         
        flatMap

        flatMap 연산자는
        source publisher 가 element 를 보내면 내부의 또다른 publisher 가 subscribe 되고
        해당 내부 publisher 의 이벤트가 downstream 으로 전달 됨을 다이어그램으로 쉽게 확인 할 수 있다.
        (Java Streams 의 flatMap 을 떠올려 보자)
         
         
        zip

        zip 연산자는
        여러개의 source 에서 전달하는 element 를 한개씩 취합하여
        tuple 로 묶어 downstream 으로 내려보내준다.
         
         
        cache

        cache 연산자는...
        이제 잘 알것이다. 참 쉽죠?
         
         
         
        https://medium.com/@jshvarts/read-marble-diagrams-like-a-pro-3d72934d3ef5
        https://projectreactor.io/docs/core/release/reference/#howtoReadMarbles

        반응형
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바