[Spring WebFlux] 리액티브 프로그래밍

see1237·2022년 10월 12일
0

Section4

목록 보기
9/13

리액티브 시스템(Reactive System)

클라이언트의 요청에 반응을 잘하는 시스템을 의미

리액티브 시스템 특징

  • 리액티브 시스템에서 사용하는 커뮤니케이션 수단
    • Message Driven
      • 리액티브 시스템에서는 메시지 기반 통신을 통해 여러 시스템 간에 느슨한 결합을 유지
  • 리액티브 시스템 구조의 특성
    • Elastic
      • 시스템으로 들어오는 요청량이 적거나 많거나에 상관없이 일정한 응답성을 유지
    • Resillient
      • 시스템의 일부분에 장애가 발생하더라도 응답성을 유지
  • 리액티브 시스템의 핵심 가치
    • Responsive
      • 리액티브 시스템은 클라이언트의 요청에 즉각적으로 응답할 수 있어야 한다.
    • Maintainable
      • 클라이언트의 요청에 대한 즉각적인 응답이 지속가능해야 한다.
    • Extensible
      • 클라이언트의 요청에 대한 처리량을 자동으로 확장하고 축소할 수 있어야 한다.

리액티브 프로그래밍(Reactive Programming)

리액티브 시스템에서 사용되는 프로그래밍 모델

  • 선언형 프로그래밍 방식 사용 - 순차적으로 실행되지 않는다.
  • 지속적으로 발생하는 데이터를 하나의 데이터 플로우로 보고 데이터를 자동으로 전달

📍 리액티브 스트림즈(Reactive Streams)

리액티브 프로그래밍을 위한 표준 사양(또는 명세, Specification)

📍 리액티브 스트림즈 컴포넌트

  • Publisher
    • 데이터 소스로 부터 데이터를 내보내는(emit) 역할을 하는 인터페이스
  • Subscriber
    • Publisher로부터 내보내진 데이터를 소비하는 역할을 하는 인터페이스
  • Subscription
    • Subscriber의 구독 자체를 표현한 인터페이스
  • Processor
    • Subscriber 인터페이스와 Publisher 인터페이스를 상속하고 있기 때문에 Publisher와 Subscriber의 역할을 동시에 할 수 있는 특징을 가진다.

📍 리액티브 스트림즈의 구현체

  • Project Reactor(Reactor)

    • 리액티브 스트림즈를 구현한 대표적인 구현체로써 Spring과 궁합이 가장 잘 맞는 리액티브 스트림즈 구현체
  • Java Flow API

    • Java 9부터 리액티브 스트림즈를 지원하고 있다. Flow API는 리액티브 스트림즈를 구현한 구현체가 아니라 리액티브 스트림즈 표준 사양을 Java 안에 포함을 시킨 구조라고 볼 수 있다. 리액티브 스트림즈 사양을 구현한 여러 구현체들에 대한 SPI(Service Provider Interface) 역할을 한다.
  • 리액티브 확장(Reactive Extension)

    • ex. RxJava
      • RxJava는 .NET 기반의 리액티브 라이브러리를 넷플릭스에서 Java 언어로 포팅한 JVM 기반의 리액티브 확장 라이브러리
      • RxJava의 Rx는 Reactive Extension의 줄임말
    • 다양한 프로그래밍 언어에서 리액티브 스트림즈를 구현한 리액티브 확장(Reactive Extension) 라이브러리를 제공하고 있다. (RxJS, RxAndroid, RxKotlin, RxPython, RxScala 등)

0개의 댓글