[Section 4] Project Reactor

현이·2023년 5월 23일
0

백엔드 부트캠프 TIL

목록 보기
35/37
post-thumbnail

사진은 첫 런던 여행 첫날 첫 여행지 내셔널 갤러리 시작은 순조로웠지만... 가면갈수록 Publisher와 Subscriber가 주객전도되는 것 마냥 헷갈렸다... operator 종류가 너무 많아서 힘들다ㅠㅠ

Project Reactor

  • 웹 애플리케이션 + 'Reactor` => Spring Reactive Web Application

Reactor

  • Reactive Streams 표준 사양 구현한 구현체
  • 리액티브 프로그래밍을 위한 라이브러리
  • 완전한 Non-Blocking 통신(요청 스레드가 차단되지❌) 지원
  • Publisher로 Mono[0|1] & Flux[N] 두 타입 제공 (0/1건 데이터 emit & 여러 건 데이터 emit)
  • MSA구조(Microservice Architecture)에 적합 (Non-Blocking통신 완벽지원해서)
  • Backpressure-ready network (Subscriber가 Publisher의 emit속도 못따라갈 때 적절하게 제어)

Reactor 구성 요소

Flux
	.("Hello", "Reactor")								//Publisher
	.map(message -> message.toUpperCase())					//Operator
	.publishOn(Schedulers.parallel())						//스레드 관리
	.subscribe(System.out::println,						//emit된 데이터 처리
			error -> System.out.println(error.getMessage()),	//error 처리
			() -> System.out.println("#onComplete");			//후처리(Reactor Sequence 종료 후)
Thread.sleep(100L);



마블 다이어그램(Marble Diagram)

  • 시간에 따라 변화하는 데이터의 흐름 표현



스케줄러(Scheduler)

  • Reactor Sequence 에서 처리되는 동작들을 하나 이상의 스레드에서 동작하도록 별도의 스레드 제공
  • 복잡한 멀티스레딩 프로세스 단순하게 해 줌

Scheduler Operator

  • 적절한 상황에 맞는 스레드 추가로 생성



Operator

  • Reactor에서 가장 중요한 구성요소

중요 Operator

-새로운 Sequence 생성 : fromStream(), fromIterable()(컬렉션 파라미터로 전달 가능)
-기존 Sequence에서 변환 작업 : map(), flatMap(), concat(), zip()
-Sequence 내부의 동작을 확인 : doOnNext(), log()
-Sequence에서 데이터 필터링 : filter(), take()
-에러 처리 : error(), timeout(), retry()

  • create() : 프로그래밍 방식으로 Signal이벤트를 발생시킴, 한번에 여러 데이터 비동기적으로 emit

0개의 댓글