티스토리 뷰

서버

스프링웹플럭스_1

Hilu 2021. 11. 10. 21:24

스프링웹플럭스란?

  • 웹플럭스를 이해하기 위해서는 아래 용어를 이해 해야 한다.
    • 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); }
        • public interface Subscriber<T> {
              public void onSubscribe(Subscription s);
              public void onNext(T t);
              public void onError(Throwable t);
              public void onComplete();
          }
          => Subsciber 는 Subscription를 등록하고 Subscription 오는 신호에 따라 동작한다.
          • 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

=> 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/#

https://www.reactive-streams.org/

'서버' 카테고리의 다른 글

스프링웹플럭스_3  (0) 2021.11.24
스프링웹플럭스_2  (0) 2021.11.11
Spring - Constructor Injection  (0) 2019.05.07
vert.x  (0) 2019.03.02
node.js  (0) 2019.03.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함