
Reactor는 Reactive Streams 사양을 구현한 비동기 논블로킹 스트림 처리 라이브러리로, 리액티브 프로그래밍을 자바에서 구현할 수 있도록 지원하는 핵심 도구이다. Spring 진영에서 개발한 이 라이브러리는 특히 Spring WebFlux와 함께 자주 사용된다.
Reactor는 두 가지 주요 타입인 Mono와 Flux를 제공하며, 리액티브 스트림즈의 표준 인터페이스(Publisher, Subscriber, Subscription, Processor)를 따르는 구조를 가지고 있다.
Reactor는 org.reactivestreams.Publisher 인터페이스를 구현한다. 즉, Reactor의 핵심 타입인 Mono와 Flux는 모두 Publisher이다.
Subscriber)가 subscribe()를 호출해야 데이터가 흘러가기 시작한다.Publisher. 0 또는 1개의 아이템을 처리할 때 사용한다.Publisher. 스트림 형태로 연속된 데이터를 처리할 수 있다.이러한 구조를 통해, Reactor는 데이터 생성 → 가공 → 소비의 흐름을 선언적으로 구성할 수 있다.
리액티브 스트림즈의 중요한 특징 중 하나는 Backpressure(역압) 지원이다. 이는 소비자가 감당할 수 있는 만큼만 데이터를 요청하고, 생산자는 이에 맞춰 데이터를 발행함으로써 과부하를 방지하는 메커니즘이다.
Reactor는 이 역압을 지원하기 위해 request(n) 호출 기반의 흐름 제어를 내부적으로 구현하고 있으며, Flux나 Mono는 이러한 역압을 자동으로 다룬다.
Flux<String> sequence = Flux.just("Hello", "Reactor");
sequence
.map(data -> data.toLowerCase())
.subscribe(data -> System.out.println(data));
Flux.just(...): 데이터를 생성하여 발행하는 Publisher이다.map(...): 발행된 데이터를 가공하는 연산자이다.subscribe(...): 구독자가 데이터를 전달받아 처리하는 구문이다.이 코드는 전체 리액티브 흐름의 구조를 보여준다:
just)map)subscribe)