Reactor Mono, Flux 함수 알아보기

Panda·2024년 2월 15일
0

Spring

목록 보기
41/44
post-custom-banner

이번에 WebFlux를 활용해서 개발을 하는 게 있어서

다 까먹어서 다시 공부하려고 합니다.

EventLoop

EventloopGroup

Reactor인 Netty는 사용 가능한 CPU 코어 수에 따라 이벤트 루프 그룹을 생성합니다.

기본 이벤트 루프 그룹은 NIO(Non-blocking I/O) 기반 전송을 위한 그룹입니다.
이벤트 루프는 이벤트 큐의 이벤트를 순차적으로 처리하고 플랫폼에 콜백을 등록한 후 즉시 반환합니다.
플랫폼은 데이터베이스 호출이나 외부 서비스 호출과 같은 작업의 완료를 Trigger할 수 있습니다.

이벤트 루프는 작업 완료 알림에 따라 콜백을 Trigger하여 결과를 호출자에게 전달이 가능합니다.

Event Loop 내에서 Mono, Flux가 다양한 연산뿐만 아니라 완료 신호, 데이터 전달 등등 다양한 역할을 합니다.

EventQueue

각 이벤트 루프에는 실행을 위해 보류 중인 작업을 저장하는 연결된 EventQueue가 있습니다.
새로운 이벤트가 만들어지면 해당 EventQueue에 대기합니다.

Scheduling Policy

Netty는 스케줄링 정책을 사용하여 해당 이벤트 작업들을 관리하게 되는데
기본적으로 스케줄링 정책은 사용 가능한 이벤트 루프 중에서 라운드 로빈 방식으로 실행됩니다.

EventLoop Thread Allow

Reactor Netty의 이벤트 루프 모델은 단일 스레드이므로 각 이벤트 루프가 단일 스레드에서 작업 처리를 담당합니다.

생기걸 보면 거의 JavaScript 싱글 스레드 작동 방식과 유사하네요.

Mono와 Flux Method

Mono, Flux 공통 Method

just(T data)

  • 받은 element를 emit 하는 Mono를 생성한 뒤 종료.
  • 진짜 많이 쓰는 메소드 중 하나입니다.

empty()

  • item을 emit 하지 않고 즉시 complete 되는 Mono를 생성합니다.

error(Throwable error)

  • error signal을 즉시 emit 하는 Mono를 만듭니다

defer(Supplier<? extends Mono<? extends T>> supplier)

  • subscription이 발생할 때마다 제공된 Supplier 함수를 호출하여 새로운 Mono 인스턴스를 생성합니다.
  • 진짜 많이 쓰는 메소드 중 하나입니다2

Mono 전용 Method

fromCallable(Callable<? extends T> supplier) (Mono only)

  • 제공된 Callable을 사용하여 해당 값을 생성하는 Mono를 생성합니다.

fromCompletionStage(CompletionStage<? extends T> completionStage) (Mono only)

  • 주어진 CompletionStage의 결과를 내보내는 Mono를 생성합니다.
    쉽게 발해 타 비동기 작업을 Mono로 변환한다고 보면 됩니다.

Flux 전용 Method

fromIterable(Iterable<? extends T> it) (flux only)

  • iterable에 포함된 item을 emit 하는 flux를 생성합니다.

range(int start, int count) (flux only)

  • 받은 start 값에서 시작하여 총 카운트 값을 갖는 정수 시퀀스를 방출하는 flux를 생성.

느낀 점

Mono, Flux 단순 Publisher인 것 만 알았지
Event Loop 라는 내부에서 동작하는 건지는 처음 알았습니다...
세상에나

전용 메소드는 쓰는 것만 써서 활용하는 법들을 잘 몰랐는데
좀더 다양한 케이스에 활용할 수 있을 것 같네요.

앞으로는 Operator 사용해서 파이프라인 등록할 떄면
공식 문서 마블 다이어그램좀 자주 봐야겠어요

profile
실력있는 개발자가 되보자!
post-custom-banner

0개의 댓글