이오이오이오
코딩하는헬린이
이오이오이오
전체 방문자
오늘
어제
  • 분류 전체보기 (39)
    • 기타 (2)
      • 잡다한 (2)
      • 헬스 (0)
    • 개발 (21)
      • Sql (3)
      • Java (2)
      • Spring (8)
      • OAuth (4)
      • node.js (1)
      • AWS (1)
      • Linux (2)
    • 이론 (11)
    • Dev Tool (1)
      • IntelliJ IDEA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • java
  • bip
  • isolation level
  • kakaologin
  • oauth
  • Spring Boot
  • 블록체인
  • 블록체인지갑
  • blockchain
  • pos
  • webflux
  • 니모닉
  • reactive streams
  • 로이필링
  • RESTful
  • restfulapi
  • Ipfs
  • nft
  • db 성질
  • POW
  • Spring
  • springboot
  • 카카오로그인

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
이오이오이오

코딩하는헬린이

Spring Webflux - Reactive Streams 이 뭐길래 ?
카테고리 없음

Spring Webflux - Reactive Streams 이 뭐길래 ?

2022. 11. 10. 18:02
반응형

안녕하세요

코딩하는헬린이 입니다.

 

오늘은 Spring webflux에 대한 포스팅이 아니라 Reactive Streams 에 대하여 포스팅할려고 합니다.

갑자기 왜 webflux 도 아닌 reactive streams 인가 ? webflux는 non-blocking과 reactive streams 을 지원합니다. 고로 webflux  기반인 reactive streams 을 알아야한다. 라는 생각이 들어서 포스팅합니다.

 

Reactive Streams 이란 ?

reactive-streams.org

 

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

Reactive Streams Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols. JDK9 java

www.reactive-streams.org

 

Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.

뭐 백프레셔와 non-blocking 를 이용한 비동기 스트림 처리를 위한 표준 ?? 이라고 파파고에서 알려줬습니다.

또 리액티브 스트림은 관찰자(Observer) 패턴, 반복자(Iterator) 패턴, 함수형 패러다임의 조합이라고 합니다.

 

back pressure 란 ? 

  • 빠른 Publisher - 느린 Subscriber 문제를 해결하는 원리이다.
  • Publisher의 일방적 데이터 Push 가 아니라, Subscriber가 처리할 수 있을 만큼의 데이터만 Subscriber의 요청에 의해서 전달해주는 것이며 dynamic pull 이라 칭한다.

 

Reactive Streams API

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();
}
 
public interface Subscription {
   public void request(long n);
   public void cancel();
}

 

  •  Publisher에는 Subscriber의 구독을 받기 위한 subscribe API 하나만 있습니다.
  •  Subscriber에는 받은 데이터를 처리하기 위한 onNext, 에러를 처리하는 onError, 작업 완료 시 사용하는 onComplete, 그리고 매개 변수로 Subscription을 받는 onSubscribe API가 있습니다.
  •  Subscription은 n개의 데이터를 요청하기 위한 request와 구독을 취소하기 위한 cancel API가 있습니다

 

 

  1. Subscriber가 subscribe 함수를 사용해 Publisher에게 구독을 요청합니다.
  2. Publisher는 onSubscribe 함수를 사용해 Subscriber에게 Subscription을 전달합니다.
  3. 이제 Subscription은 Subscriber와 Publisher 간 통신의 매개체가 됩니다. Subscriber는 Publisher에게 직접 데이터 요청을 하지 않습니다. Subscription의 request 함수를 통해 Publisher에게 전달합니다.
  4. Publisher는 Subscription을 통해 Subscriber의 onNext에 데이터를 전달하고, 작업이 완료되면 onComplete, 에러가 발생하면 onError 시그널을 전달합니다.
  5. Subscriber와 Publisher, Subscription이 서로 유기적으로 연결되어 통신을 주고받으면서 subscribe부터 onComplete까지 연결되고, 이를 통해 백 프레셔가 완성됩니다

 

ref 

https://engineering.linecorp.com/ko/blog/reactive-streams-with-armeria-1/

 

Armeria로 Reactive Streams와 놀자! - 1

2022-LINE-engineering-site

engineering.linecorp.com

https://sjh836.tistory.com/182

 

Reactive Streams (관찰자 결합, 반복자 결합, Back Pressure, 흐름, Processor, 비동기 및 병렬화 구현방식)

참조문서 http://www.reactive-streams.org https://github.com/reactive-streams/reactive-streams-jvm/ https://engineering.linecorp.com/ko/blog/reactive-streams-with-armeria-1/ 1. Reactive Streams 란? 리액티브 스트림 스펙을 정의하고, 인터

sjh836.tistory.com

 

반응형
    이오이오이오
    이오이오이오

    티스토리툴바