Dev/Reactive Programming

[Reactor] Reactor 개요

김세진 2024. 7. 3. 15:25
반응형

 

 

 

 

Reactor란?

 

Reactor는 리액티브 스트림즈의 구현체로 리액티브 프로그래밍을 위한 라이브러리이다. Reactor의 Core 라이브러리는 Spring WebFlux 프레임워크에 라이브러리로 포함되어, WebFlux 기반의 리액티브 애플리케이션을 제작하기 위한 핵심 역할을 담당한다.

 

 


Reactor의 특징

 

1. Reactive Streams

위에서 언급했지만, Reactor는 리액티브 스트림즈의 표준 사양을 구현한 구현체이다.

 

2. Non-Blocking

Reactor는 Non-Blocking 기반 애플리케이션을 제작하기 위한 핵심 기술이다.

 

해당 내용은 아래 게시글에 보다 자세히 언급되어 있다.

 

[Reactive Programming] Blocking I/O와 Non-Blocking I/O

Blocking I/O   Blocking I/O의 설명을 위한 예시 그림이다. 본사 서버의 스레드가 지점 서버에 데이터를 요청하면 해당 데이터를 반환받을 때까지 스레드는 대기 상태가 되며 다른 작업을 처리하지

my-coding-notes.tistory.com

 

 

3. Java's functional API

Reactor에서 Publisher와 Subscriber 간의 상호 작용은 Java의 함수형 프로그래밍 API를 통해서 이루어진다.

 

4. Flux[N]

Reactor의 Publisher 타입 중 하나로, 0부터 N개(무제한)의 데이터를 emit(통지)한다.

 

5. Mono[0|1]

마찬가지로 Reactor의 Publihser 타입 중 하나로, 0 혹은 1개의 단발성 데이터를 emit한다.

 

6. Well-Suited for microservices

Reactor의 Non-Blocking한 특징은 마이크로 서비스 시스템의 수많은 서비스들 간 끊임없이 발생하는 I/O를 처리하기에 적합하다.

 

7. Backpressure-ready network

Reactor는 Publisher로부터 전달 받은 데이터를 처리하는 데 있어 과부하가 걸리지 않도록 제어하는 Backpressure(배압)를 지원한다.

 

 


Reactor 구성 요소

 

public static void main(String[] args) {
    Flux<String> sequence = Flux.just("Hello", "Reactor");
    sequence.map(data -> data.toLowerCase())
        .subscribe(data -> System.out.println(data));
}

 

짧은 코드이지만 데이터를 생성 및 제공(1단계), 데이터를 가공(2단계), 전달받은 데이터 처리(3단계) 총 세 가지의 필수 단계로 Reactor의 데이터 흐름을 표현하고 있다.

 

또한 리액티브 프로그래밍의 구성 요소인 Publisher, Subscriber, Data Source, Operator를 모두 확인할 수 있다.

 

  • Publisher: Flux.just("Hello", "Reactor")는 데이터를 생성하고 통지하는 Publisher이다.
  • Subscriber: subscribe(data -> System.out.println(data)) 부분이 데이터를 전달받아 처리하는 Subscriber이다.
  • Data Source: Flux.just("Hello", "Reactor") 내부의 "Hello", "Reactor"가 Publisher가 제공하는 최초의 데이터 소스이다.
  • Operator: .map(data -> data.toLowerCase())는 데이터를 변환하는 Operator이다.

 

 

 

 

반응형