티스토리 뷰
스프링웹플럭스란?
- 웹플럭스를 이해하기 위해서는 아래 용어를 이해 해야 한다.
- Reactive Streams
- non-blocking, back pressure 을 이용하여 비동기 서비스를 할때 기본이 되는 스펙이라고 함.
- Spring5 Webflux 는 Core ProjectReator 에서는 Reactive Streams 를 따르고 있음
- 비동기의 경계를 명확하게 하여 스트림 데이터의 교환을 효율적으로 하는 것이 목표이다.
- 아래의 Stream 을 지향한다.
- 잠재적으로 무한한 숫자의 데이터처리
- 순서대로처리
- 컴포넌트간 데이터를 비동기 적으로 전달
- backpressure 을 이용한 데이터 흐름 제어
- 관련 API 는 아래와 같다.
- Publisher
- Subscriber
- Subscription
- Processor
- Publisher
- 무한한 데이터를 생성하는 주최
- Subscription
- Publisher 가 제공한 데이터를 구독하는 주최
- Publisher.subscribe(Subscriber) 와 같은 형식으로 Publisher 와 subscribe 간 data 를 전달
- 관련 메서드
- => Publisher 는 구독한 subscribe 를 메서드로 가짐
public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); }
-
=> Subsciber 는 Subscription를 등록하고 Subscription 오는 신호에 따라 동작한다.public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); }
- onSubscribe : 구독상태 Publisher 가 생성한 데이터를 받을 준비가 된 상태
- onNext : 데이터 수신
- onError : 에러시
- onComplete : 신호가 없을 경우
-
public interface Subscription { public void request(long n); public void cancel(); }
- request : Subscriber 가 Publisher 에게 데이터를 요청하는 갯수
- cancel : 구독 취소
- Non-blocking
- 연속적 작업에서 하나의 작업이 실행 중이여도, 다른 작업이 대기 하지 하지 않고 실행하는 방식
- 방식에 따라서 효율성이 좋지만 잘못쓰면 오히려 시스템 성능이 저하 된다.
- back pressure (배압)
- 한 컨포넌트가 부하를 받으면 시스템 전체가 적절하게 대응해야하며, 이때에 과부하 컨포넌트가 치명적인 장애가 발생하면 안되고, 데이터 유실이 되면 안된다.
- 이를 예방하기 위해서 상위컴포넌트에게 자신의 과부하 상태를 알려 컴포넌트에 부하가 가지 않도록 제어 하는 것이 back pressure 이다.
- 전체 flow
- Reactive Streams
=> Publisher 가 데이터를 생하면, Subscriber 가 subscribe 하여 데이터를 구독하여 받아 온다, 구독시 Subscriber 와 Publisher 사이에는 Subscription 이 이루어 지게 되고, Subscriber 는 request 를 통해 데이터를 요청하고, onNext 를 통해 데이터를 계속 적으로 받아 오며, 구독 취소시 cancel하고 데이터를 받아 올때 에러가발생하면 onError, onComplete 를 발생한다.
마무리
결론적으로는 Spring WebFlux 는 위의 조건을 만족하여 무한한 데이터를 비동기 적으로 처리 할수 있도록 Spring 에서 제공하는 기능인 것이다.
참고
https://sabarada.tistory.com/98
https://kouzie.github.io/java/java-RxJava,-Reactive-Stream/#
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- fastapi
- 테스트
- SpringBoot
- 테스트 주도 개발
- MQ
- EC2
- mongodb
- TDD
- Python #FastAPI
- GateWayApi
- 퀜트백
- Python
- 테스트주도개발
- data mining
- 분산처리
- 켄트 백
- kafka
- AWS
- nodejs
- 웹서비스
- data crawling
- 웹개발
- MSA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함