[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개의 아이템을 가짐

Flux 예시

 

Mono

  • Publisher의 구현체
  • 비동기 item
  • 0또는 1개의 결과를 가짐

Mono 예시

 

Sequence 생성

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 만큼의 쓰레드 생성

 

출처: 빗썸 테크아카데미 (코드스테이츠 백엔드 심화과정)

반응형