오늘
Reactor 는 Publisher 타입으로 두 가지를 지원한다.
Mono
Flux
Mono
= 0 건의 데이터나 1건의 데이터를 emit 할 수 있다.
Flux
= 여러건의 데이터를 emit 할 수 있다.
Backpressure
Subscriber의 처리 속도가 Publihser의 emit 속도를 따라가지 못할 때 적절하게 제어하는 전략을 말한다.
DROP 전략 : 버퍼가 가득차면 그 이후에 들어오는 데이터는 모두 폐기
LATEST 전략 : 버퍼가 가득차면 가장 최근에 내보내진 데이터만 빼고 폐기
BUFFER 전략 : DROP LATEST 버퍼 안에 있는 데이터 중 가장 최근에 버퍼에 채워진 데이터를 drop(폐기) 하는 방식
BUFFER 전략 :DROP OLDEST 버퍼 안에 가장 오래된 데이터를 DROP(폐기) 하는 방식
Flux 를 이용해 여러건의 데이터를 처리 할 수 있다.
just
는 원본 데이터로 부터 데이터를 내보내는 (emit) Publisher 의 역할을 한다.
map
을 이용해 emit 한 데이터를 대문자로 변경.
publishOn
을 이용해 Downstream 의 스레드를 Schedulers 에서 지정한 스레드로 변경한다.
subscribe
에서는 세개의 람다식을 가진다.
첫번째는 emit 한 데이터를 출력하는 람다식,
두번째는 에러가 발생했을 때 에러를 처리하는 람다식,
세번째는 모든 작업이 정상적으로 끝났을 때 마지막으로 출력하는 람다식.
맨 마지막 Thread.sleep 의 역할은?
Reactor Sequence 에 Schedulers 를 지정하면 main 쓰레드 이외의 별도의 스레드가 하나 더 생긴다.
Reactor Schedulers 로 지정한 스레드는 모두 데몬 스레드이기 때문에 main 스레드가 종료되면
동시에 종료된다.
그래서 Thread.sleep 메서드를 통해 main 스레드를 지연시켜서 Reactor Scheduler 로 지정한
데몬 스레드가 동작하도록 한다.
데몬 스레드란?
주 스레드의 작업을 돕는 보조적인 역할을 수행하는 스레드를 말한다.
리액티브 프로그래밍에서는 데이터의 흐름이 다양하게 변화 할 수 있으며, 그것의 흐름을 마블 다이어그램으로 표현한다.
마블은 구슬이라는 의미로, 하나의 데이터를 구슬로 표현한다.
출처 : https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html
위 마블 다이어그램은 Mono 의 다이어그램이다.
Mono 는 0건에서 1건의 데이터를 emit 하기 때문에 구슬이 하나이다.
수직 막대바는 성공적으로 종료되었을 때를 의미하고, X 는 에러가 발생했다는 의미이다.