Spring - Reactive Streams

2023. 4. 4. 13:15·📘 Backend/Spring

📘 Reactive System & Reactive Programming

  • 선언형 프로그래밍(Lambda 표현식, Stream API), 순차 실행 X
  • Reactive System은 Requst Thread의 응답 대기시간을 최소화 할 수 있게 Non-Bloking 통신 지원함
  • Reactive Programming 에서의 반응은 Thread의 Non-Blocking과 관련이 있다.

Reactive System 설계 원칙

img

Means - 리액티브 시스템의 커뮤니케이션을 담당

  • Message Driven
    • 리액티브 시스템은 메세지 기반 통신을 통한 시스템 간 느슨한 결합 유지

Form - 메세지 기반 통신을 통한 구조 형성

  • Elastic
    • 트래픽량에 관계없이 일정한 응답성 유지
  • Resiilient
    • 시스템 장애 발생 시, 응답성 유지

Value - 리액티브 시스템의 핵심 가치 표현

  • Responsive
    • 즉각 응답
  • Maintainable
    • 즉각 응답의 지속
  • Extensible
    • 요청 처리의 오토스케일링

Reactive Programing 특징

Declarative Programming Paradigm

  • 선언형 프로그래밍 방식 사용

Data Streams and The Propagation of Change

  • 지속적인 데이터의 요청이 있음을 의미하며, 요청 = 변경이벤트로 간주해 이벤트 발생시 마다 데이터 전달
  • Automatic Propagation of the Changed Data Flow
    • 위와 동일
  • Reactive Streams
    • Reactive Programming을 사용하기 위한 Specification

📘 Components of Reactive Streams

**Publisher<T>** - 소스로부터 데이터 emit

  • subscribe(Subscriber<? super T>)
  • Subscriber가 Publisher가 내보낸 데이터 소비

**Subscriber<T>** - Publisher가 내보낸 데이터 소비

  • onSubscribe(Subscription)
    • 구독 시작 시 호출, Publisher에게 요청할 데이터의 개수 지정 & 구독 해지 처리
  • onNext(T)
    • 데이터 emit 시 호출, emit된 데이터 소비
  • onError(Throwable)
    • emit 데이터 -> Subscriber 전달 시 오류 발생되면 호출
  • onComplete()
    • 데이터 emit 종료 시 호출, emit후 처리할 작업이 있으면 여기서 수행

**Subscription** - 구독상태를 표현한 인터페이스

  • request(long)
    • emit 개수 요청
  • cancle()
    • 구독 해지, 해지시 더 이상 데이터 emit X

`Processor<T, R>`` extends Subscriber, Publisher

  • Publisher, Subscriber 의 역할을 동시에 처리

📘 Implementation Reactive Streams

Project Reactor

  • Spring Reactive Application 구현의 대표적인 구현체, Spring 5의 Reactive Stack에 포함

RxJava

  • .NET 기반 Reactive Library를 Netflex에서 Java 언어로 포팅한 JVM 기반 Reactive 확장 라이브러리

Java Flow API

  • Java9 부터 지원
  • Reactive Streams의 구현체들의 SPI역할
  • Reactive Streams의 Specification을 Java안에 포함 시킨 구조

Signal

  • Publisher가 발생시키는 이벤트

Operator

  • 동작 수행 메소드

Sequence

  • 메소드 체인을 하나의 시퀀스로 간주

UpStream & DownStream

  • Sequence 기준 위 아래를 의미 (ex. filter() 기준)

Reactive Extension

  • RxJS, RxAndroid, RxKotlin, RxPython, RxScala
저작자표시 (새창열림)

'📘 Backend > Spring' 카테고리의 다른 글

Relation Mapping & Mapped Super Class  (0) 2023.04.04
Project Reactor  (0) 2023.04.04
OAuth2 (Google API)  (0) 2023.04.04
Implements JWT Login  (0) 2023.04.04
JWT & Sticky Session  (0) 2023.04.04
'📘 Backend/Spring' 카테고리의 다른 글
  • Relation Mapping & Mapped Super Class
  • Project Reactor
  • OAuth2 (Google API)
  • Implements JWT Login
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      Lock #Thread #Concurrency
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Spring - Reactive Streams
    상단으로

    티스토리툴바