경아ㅏ 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