2023~/스프링으로 시작하는 리액티브 프로그래밍
Ch05 Reactor 개요
경아ㅏ
2024. 9. 18. 16:23
5.1 Reactor 란?
리액티브 스트림즈 사양의 구현체 중 하나
(리액티브 프로그래밍을 위한 라이브러리로 Gradle dependency 에 spring-boot-starter-webflux 를 추가하면 Reactor도 추가된다)
Reactor 특징
1) Reactive Streams 의 구현체
2) Non-Blocking 어플리케이션
3) 함수형 프로그래밍 API
4) Flux[N], Mono[0|1]
: Reactor 의 Publisher 에는 Flux, Mono 두 가지 타입이 있는데,
: Flux[N] 은 0 ~ N 개의 데이터를 emit 할 수 있는 Publisher
: Mono[0|1] 은 데이터를 emit 하거나/1개 하거나 이분법 적으로 emit 하는 Publisher
5) MSA + 컴포넌트끼리 I/O 가 많은 시스템에 적합
6) Backpressure-ready network
: Publisher 에서 대량의 데이터가 Subscriber 로 전달될 때 흐름을 제어하기 위해 역으로 압력을 주는 것??
(무슨말인지 자세히 모르겠지만 Chapter 08 에서 다룬다고 한다)
5.2 Hello Reactor 코드로 보는 Reactor의 구성요소
@Slf4j
public class Example {
public static void main(String[] args) {
Flux<String> sequence = Flux.just("Hello", "Reactor", "Reactive", "Programming");
sequence.map(data -> data.toLowerCase())
.subscribe(data -> System.out.println(data));
}
}
// 실행결과
15:56:54.995 [main] DEBUG- Using Slf4j logging framework
hello
reactor
reactive
programming
- Flux: N 개 데이터를 생성하는 Publisher
- just, map, subscriber: 각각 데이터를 생성, 가공, 처리하는 Operator
- Flux::subscribe 에 Consumer 인터페이스 람다식 data -> System.out.println(data); 전달: 해당 람다식이 곧 Subscriber