Reator

hk·2022년 8월 11일
0

CodeStatesLog

목록 보기
15/15

Reactor 는 리액티브 스트림즈 표준 사양을 구현한 구현체 중 하나이다.
Reactor 는 완전한 Non-Blocking 통신을 지원한다.
Reactor 는 기본적으로 Mono[0|1]와 Flux[N]이라는 두 가지 Publisher 타입을 제공한다.
Non-Blocking 통신을 완벽하게 지원하는 Reactor 는 MSA 구조에 적합한 라이브러리이다.
Backpressure 란 Subscriber 의 처리 속도가 Publisher 의 emit 속도를 따라가지 못할 때 적절하게 제어하는 전략을 의미한다.

Marble Diagram 상에서 구슬 모양의 알록달록한 동그라미는 하나의 데이터를 의미하며, 시간의 흐름에 따라 변화하는 데이터의 흐름을 표현.
마블 다이어그램은 Reactor 에서 제공하는 많은 Operator 의 내부 동작을 조금 더 쉽게 이해하고, 해당 Operator 사용에 도움을 준다.
Mono 는 0건 또는 1건의 데이터만 emit 하는 Reactor 타입이다.
Flux 는 여러 개(0 … N)의 데이터를 emit 하는 Reactor 타입이다.

Reactor 에서의 Scheduler 는 쓰레드를 관리하는 관리자 역할을 한다.
Scheduler 는 Reactor Sequence 상에서 처리되는 동작들을 하나 이상의 쓰레드에서 동작하도록 별도의 쓰레드를 제공해 준다.
Reactor 에서는 Scheduler 를 위한 별도의 Operator 를 제공한다.
subscribeOn()은 주로 데이터 소스에서 데이터를 emit 하는 원본 Publisher 의 실행 쓰레드를 지정하는 역할을 한다.
publishOn()은 전달 받은 데이터를 가공 처리하는 Operator 앞에 추가해서 실행 쓰레드를 별도로 추가하는 역할을 한다.
Reactor 의 Operator 는 그 종류가 너무 많기 때문에 한번에 모든 Operator 의 사용법을 익히는 것은 사실상 불가능하다. 상
황별로 자주 사용되는 Operator 의 사용법을 익히고, 그때 그때 필요한 상황에 해당 Operator 를 찾아서 사용하는 것이 좋다.

flatMap() 처럼 내부에서 정의하는 Sequence 를 Inner Sequence 라고 한다.
flatMap() Operator 에 추가 쓰레드를 할당할 경우, 작업의 처리 순서를 보장하지 않는다.
create() Operator 는 프로그래밍 방식으로 Signal 이벤트를 발생시키는 Operator 로 한 번에 여러 건의 데이터를 비동기적으로 emit
Reactor 의 concat() Operator 는 논리적으로 하나의 Sequence 로 이어 붙인 후,
이어 붙인 Sequence 에서 시간 순서대로 데이터를 차례대로 emit 한다.
zip() Operator 는 입력으로 주어진 Sequence 의 emit 시점이 매번 다르더라도
동일 index 상의 emit 시점이 늦은 데이터가 emit 될 때까지 대기했다가 데이터가 모두 emit 되면 해당 데이터를 모두 전달 받는다.

함수형 프로그래밍 세계에서 부수 효과(side-effect)는 어떤 동작을 실행하되 리턴 값이 없는 것을 의미한다.

timeout() Operator 는 입력으로 주어진 시간동안 emit 되는 데이터가 없으면 onError Signal 이벤트를 발생시킨다.
retry() Operator 는 Sequence 상에서 에러가 발생할 경우, 입력으로 주어진 숫자만큼 재구독해서 Sequence 를 다시 시작한다.

https://projectreactor.io/

profile
cloud master가 될 거야! (not 석사)

0개의 댓글