99클럽 17일차 TIL: Spring Webflux: Mono, Flux
2024. 4. 20. 12:05ㆍ개발 공부
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가지
- Publisher
- 데이터를 생성하고 내보낸다.
- 인터페이스 내 추상 메서드:
- subscribe(Subscriber<? super T> s)
- 데이터를 생성 및 발행하는 함수
- subscribe(Subscriber<? super T> s)
- Subscriber
- 데이터를 전달받아서, 어떻게 쓸 지 결정한다.
- 인터페이스 내 추상 메서드:
- onSubscribe(Subscription s)
- 데이터를 최초로 통지할 때 호출 되는 함수
- onNext(T t)
- 데이터를 통지할 때마다 호출되는 함수
- onError(Throwable t)
- 데이터를 통지할 때, 에러가 발생하면 호출되는 함수
- onComplete()
- 데이터 통지가 끝났을 때 호출되는 함수
- onSubscribe(Subscription s)
- Subscription
- 데이터에 대한 구독을 요청 및 해지를 한다.
- 인터페이스 내 추상 메서드:
- request(long n)
- 전달 받을 데이터 갯수를 전달하여, 데이터에 대한 구독 요청
- cancel()
- 데이터 구독 취소
- request(long n)
- Processor
- Publisher 와 Subscriber 의 기능을 모두 갖는다
- 따로 추상 메서드를 가지고 있지 않다
- Publisher
- 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 개의 아이템을 방출
- Mono 와 차이는:
- Back-pressure 지원
- 데이터를 구독하는 subscriber의 속도에 따라 데이터의 생산 속도를 조절할 수 있다.
- 메모리 효율성 향상
- 참조:
#3. 오늘의 회고
- 정리를 하면, Mono와 Flux 모두 Publisher 를 상속하며, 비동기 non-blocking 방식으로 데이터를 처리한다.
- 즉 반응형 웹 앱을 구현하는 데에 도움이 되며, 확장성과 성능을 높일 수 있다.
- 메서드들이 굉장히 다양한데, 이 메서드들 중에 자주 사용될 수 있는 몇 가지에 대해서 추후 정리를 해보면 좋을 것 같다.
- 또한 Reactive Streams의 Interface를 알아보다, Publisher 및 Subscriber 관련해서 AMQP (메시지 지향 미들웨어 통신 프로토콜) 과 흡사한 점이 있다고 느꼈다. 주요 차이점은 아래와 같다.
- 사용 목적
- Spring Webflux: 웹 어플리케이션의 비동기 처리
- AMQP: 어플리케이션 간 비동기 메시지 전송 및 처리
- 통신 방식
- Spring Webflux: HTTP 기반
- AMQP: 메시지 큐를 통한 메시지 전송 방식
- 확장성 및 유연성 측면
- Spring Webflux: Reactive Streams를 통한 높은 확장성 및 성능
- AMQP: Message Broker를 통한 Loose Coupling 으로 확장성 및 유연성 향상
- 사용 목적
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 19일차 TIL: WebSocket (0) | 2024.04.22 |
---|---|
99클럽 18일차 TIL: gRPC (0) | 2024.04.21 |
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 |