SEB_BE_43 / 23.03.27 회고

rse·2023년 3월 27일
0

코드스테이츠_BE_43

목록 보기
60/65

오늘

  • Project Reactor

Project Reactor

Reactor 는 Publisher 타입으로 두 가지를 지원한다.

  • Mono

  • Flux

Mono
= 0 건의 데이터나 1건의 데이터를 emit 할 수 있다.

Flux
= 여러건의 데이터를 emit 할 수 있다.

Backpressure

Subscriber의 처리 속도가 Publihser의 emit 속도를 따라가지 못할 때 적절하게 제어하는 전략을 말한다.

Backpressure 전략

DROP 전략 : 버퍼가 가득차면 그 이후에 들어오는 데이터는 모두 폐기
LATEST 전략 : 버퍼가 가득차면 가장 최근에 내보내진 데이터만 빼고 폐기
BUFFER 전략 : DROP LATEST 버퍼 안에 있는 데이터 중 가장 최근에 버퍼에 채워진 데이터를 drop(폐기) 하는 방식
BUFFER 전략 :DROP OLDEST 버퍼 안에 가장 오래된 데이터를 DROP(폐기) 하는 방식

Reactor 구성

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 는 에러가 발생했다는 의미이다.

profile
기록을 합시다

0개의 댓글