[Project Reactor] 5. Reactor란 무엇인가: Mono와 Flux

y001·2025년 5월 1일

Reactive Programming

목록 보기
5/30
post-thumbnail

Reactor란 무엇인가

ReactorReactive Streams 사양을 구현한 비동기 논블로킹 스트림 처리 라이브러리로, 리액티브 프로그래밍을 자바에서 구현할 수 있도록 지원하는 핵심 도구이다. Spring 진영에서 개발한 이 라이브러리는 특히 Spring WebFlux와 함께 자주 사용된다.

Reactor는 두 가지 주요 타입인 MonoFlux를 제공하며, 리액티브 스트림즈의 표준 인터페이스(Publisher, Subscriber, Subscription, Processor)를 따르는 구조를 가지고 있다.

Publisher와 Mono/Flux

Reactor는 org.reactivestreams.Publisher 인터페이스를 구현한다. 즉, Reactor의 핵심 타입인 MonoFlux는 모두 Publisher이다.

  • Publisher: 데이터를 발행하는 주체로, 구독자(Subscriber)가 subscribe()를 호출해야 데이터가 흘러가기 시작한다.
  • Mono: 최대 1개의 데이터를 발행하는 Publisher. 0 또는 1개의 아이템을 처리할 때 사용한다.
  • Flux: 0개 이상의 데이터를 발행하는 Publisher. 스트림 형태로 연속된 데이터를 처리할 수 있다.

이러한 구조를 통해, Reactor는 데이터 생성 → 가공 → 소비의 흐름을 선언적으로 구성할 수 있다.

Backpressure(역압) 지원

리액티브 스트림즈의 중요한 특징 중 하나는 Backpressure(역압) 지원이다. 이는 소비자가 감당할 수 있는 만큼만 데이터를 요청하고, 생산자는 이에 맞춰 데이터를 발행함으로써 과부하를 방지하는 메커니즘이다.

Reactor는 이 역압을 지원하기 위해 request(n) 호출 기반의 흐름 제어를 내부적으로 구현하고 있으며, FluxMono는 이러한 역압을 자동으로 다룬다.


코드로 보는 Reactor

Flux<String> sequence = Flux.just("Hello", "Reactor");

sequence
    .map(data -> data.toLowerCase())
    .subscribe(data -> System.out.println(data));
  • Flux.just(...): 데이터를 생성하여 발행하는 Publisher이다.
  • map(...): 발행된 데이터를 가공하는 연산자이다.
  • subscribe(...): 구독자가 데이터를 전달받아 처리하는 구문이다.

이 코드는 전체 리액티브 흐름의 구조를 보여준다:

  1. 데이터를 생성(just)
  2. 데이터를 가공(map)
  3. 소비자에게 전달하고 처리(subscribe)

0개의 댓글