99클럽 17일차 TIL: Spring Webflux: Mono, Flux

2024. 4. 20. 12:0599클럽/TIL

728x90
반응형

#1. 오늘의 학습 키워드

Reactive Streams의 4가지 Interface 및 Spring Webflux 의 반응형 타입 Mono 와 Flux 에 대해서

  • 저번 post 에서 Spring WebFlux 의 개념적인 부분을 다뤘다.
    • 다시 정리를 해보면, Spring Webflux 는 Non-Blocking, 비동기적 i/o 방식을 지원하여 높은 확장성과 성능을 자랑하는 반응형 웹 프레임워크이다.
    • 반응형 프로그래밍, Reactive Streams 과 Reactor에 대한 개념도 다뤘었는데, 그 중 Reactive Streams의 interface 4가지와, 또 그 중 Publisher 에 해당하는 Mono와 Flux에 대해서, 좀 더 디테일하게 알아보자.

#2. 공부한 내용

  • Reactive Streams의 Interface 4가지
    1. Publisher
      • 데이터를 생성하고 내보낸다.
      • 인터페이스 내 추상 메서드:
        • subscribe(Subscriber<? super T> s)
          • 데이터를 생성 및 발행하는 함수
    2. Subscriber
      • 데이터를 전달받아서, 어떻게 쓸 지 결정한다.
      • 인터페이스 내 추상 메서드:
        • onSubscribe(Subscription s)
          • 데이터를 최초로 통지할 때 호출 되는 함수
        • onNext(T t)
          • 데이터를 통지할 때마다 호출되는 함수
        • onError(Throwable t)
          • 데이터를 통지할 때, 에러가 발생하면 호출되는 함수
        • onComplete()
          • 데이터 통지가 끝났을 때 호출되는 함수
    3. Subscription
      • 데이터에 대한 구독을 요청 및 해지를 한다.
      • 인터페이스 내 추상 메서드:
        • request(long n)
          • 전달 받을 데이터 갯수를 전달하여, 데이터에 대한 구독 요청
        • cancel()
          • 데이터 구독 취소
    4. Processor
      • Publisher 와 Subscriber 의 기능을 모두 갖는다
      • 따로 추상 메서드를 가지고 있지 않다
  • Mono
    • Reactive Stream의 Publisher 인터페이스를 상속
    • 즉 데이터를 생성 하고 Subscriber 가 subscribe 시 데이터 방출.
      • Subscriber 에서 각 메서드들이 실행 될때까지 반응이 없다가, 실행이 되면, 각 메서드에 맞게 데이터 방출, 완료 및 에러 발생.
      • onComplete() 나 onError() 이벤트가 발생하면 터미널 이벤트를 발생시키고 Flux 를 종료 시킨다.
    • 다양한 Operator 가 있는데, 모든 메서드를 숙지하지 않아도 되고, 필요한 메서드를 적재적소에 쓰는 것이 낫다
    • Static Method
      • 정적 팩토리 메서드로 종류가 다양함
      • 이를 사용해 Flux 리소스를 생성
    • Instance Methods
      • Operator 로 종류가 다양함.
      • 비동기 프로세싱 파이프라인을 빌드할 수 있고, 비동기 시퀀스를 만들어 내게 된다.
  • Flux
    • Reactive Stream의 Publisher 인터페이스를 상속
    • Mono와 똑같이 데이터를 생성 하고 Subscriber 가 subscribe 시 데이터 방출.
      • Mono 와 차이는:
        • Flux 는 0~ N 개의 아이템을 방출
        • Mono 는 0~1 개의 아이템을 방출
    • Back-pressure 지원
      • 데이터를 구독하는 subscriber의 속도에 따라 데이터의 생산 속도를 조절할 수 있다.
      • 메모리 효율성 향상


#3. 오늘의 회고

  • 정리를 하면, Mono와 Flux 모두 Publisher 를 상속하며, 비동기 non-blocking 방식으로 데이터를 처리한다.
    • 즉 반응형 웹 앱을 구현하는 데에 도움이 되며, 확장성과 성능을 높일 수 있다.
  • 메서드들이 굉장히 다양한데, 이 메서드들 중에 자주 사용될 수 있는 몇 가지에 대해서 추후 정리를 해보면 좋을 것 같다.
  • 또한 Reactive Streams의 Interface를 알아보다, Publisher 및 Subscriber 관련해서 AMQP (메시지 지향 미들웨어 통신 프로토콜) 과 흡사한 점이 있다고 느꼈다. 주요 차이점은 아래와 같은 걸 찾아봤다.
    1. 사용 목적
      • Spring Webflux: 웹 어플리케이션의 비동기 처리
      • AMQP: 어플리케이션 간 비동기 메시지 전송 및 처리
    2. 통신 방식
      • Spring Webflux: HTTP 기반
      • AMQP: 메시지 큐를 통한 메시지 전송 방식
    3. 확장성 및 유연성 측면
      • Spring Webflux: Reactive Streams를 통한 높은 확장성 및 성능
      • AMQP: Message Broker를 통한 Loose Coupling 으로 확장성 및 유연성 향상
728x90
반응형

'99클럽 > TIL' 카테고리의 다른 글

99클럽 16일차 TIL: Spring Webflux  (0) 2024.04.19
99클럽 15일차 TIL: N+1문제  (0) 2024.04.18
99클럽 14일차 TIL: Transaction  (0) 2024.04.17
99클럽 13일차 TIL: Hikari CP  (0) 2024.04.16
99클럽 12일차 TIL: MVC  (0) 2024.04.15