카테고리 없음
[CS] Reactive Programing
커밍이즈스프링
2022. 4. 16. 22:36
반응형
리액티브 선언문
- 응답성(Responsvie)
- 탄력성(Resilient)
- 유연성(Elastic)
- 메시지 기반(Message Driven)
리액티브 프로그래밍 특징
- 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍 패러다임
- 프로그램 안에서 정적이거나 동적인 데이터 흐름이 표현되어야 함
- 데이터 흐름에 따라 하위 로직에 자동으로 변화를 전파할 수 있어야 함
Reactive Stream
- Reactive Programing을 위한 interface
- Non-blocking backpressure를 이용한 비동기 스트림 처리의 표준
Reactor
- Reactive Stream(👆)의 구현체 중 하나
- Spring5에서 사용
Reactor Core Feature
- Reactor Project의 주요 구현체 포함
- Mono
- Flux
- Schedulers
- Errors
- Processors
Sequence (Java Stream과 비슷한 느낌)
- 변화 가능한 데이터의 흐름
- Publisher에 의해 publish 되고 subscriber에 의해 subscription 됨
- Publisher.subscribe(subscriber)
-) onSubscribe onNext** (onError | onComplete) , ** 표시는 해당 예제에선 onNext가 접두사로 쓰였다.
Flux
- Publihser의 구현체
- 비동기 sequence
- 0 ~ N개의 아이템을 가짐
Mono
- Publisher의 구현체
- 비동기 item
- 0또는 1개의 결과를 가짐
Sequence 생성
Schedulers
- Reactor는 비동기 실행을 강제 하지 않음
- publishOn
- 신호 처리 스케쥴링 - subscribeOn
- 구독 처리 스케쥴링 - Scheduler의 종류
- Immediate
- Single
- Elastic
- Parallel
- BoundedElastic - PublishOn
- next, complete, error 신호 처리 쓰레드 설정
- 다음 publishOn을 만날 때까지 같은 쓰레드에서 동작
List<Integer> arr = Arrays.asList(1,2,3);
Flux.fromIterable(arr).map(i->i*10).publishOn(Schedulers.boundedElastic());
- SubscribeOn
- 시퀀스를 실행할 쓰레드를 결정
- publishOn을 만날 때까지 같은 쓰레드에서 동작
- publishOn 이 신호를 처리할 쓰레드를 지정하므로, publishOn 뒤에 오는 subscribeOn은 무시 됨
List<Integer> arr = Arrays.asList(1,2,3);
Flux.fromIterable(arr).map(i->i*10).subscribeOn(Schedulers.boundedElastic());
Schedulers 의 종류
- Immediate
- 지금 실행 중인 쓰레드에서 실행 - Single
- Runnable Executor 실행 - Parallel
- Core 갯수만큼의 쓰레드 생성 - BoundedElastic
- core * 10 만큼의 쓰레드 생성
출처: 빗썸 테크아카데미 (코드스테이츠 백엔드 심화과정)
반응형