ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [RxJava] Reactive
    ReactiveX 2021. 4. 27. 16:20

    ReactiveX, Reactive Programing

    • ReactiveX(Reactive Extensions)는 관찰 가능한 스트림을 사용하는 비동기 프로그래밍을 위한 API
    • Reactive Programing(반응형 프로그램)은 주변의 환경과 끊임없이 상호 작용을 하는, 비동기적 데이터 스트림을 처리하는 프로그래밍을 말한다.
    • 스트림(streams)이란?

    - 변수, 사용자 입력, 속성, 캐시, 데이터 구조 등의 데이터가 시간 순서에 의해 전달되는 이벤트입니다

    - 스트림은 다른 스트림에 대한 입력으로 사용할 수 있고 여러 스트림을 다른 스트림에 대한 입력으로 사용할 수 있다.

    - 두 개의 스트림을 병합(merge)할 수도 있고 관심있는 이벤트만 있는 다른 스트림을 가져오도록 스트림을 필터링(filtering) 할 수 있다. 한 스트림에서 다른 새 스트림으로 데이터 값을 매핑(mapping)할 수 있다.

    - 스트림을 listening해서 데이터의 결과값을 얻는 것을 subscribe이라고 한다.

     

    Reactive-Streams

    • Reactive-Stream

    - non-blocking backPressure을 이용하여 비동기적 스트림 처리를 제공하는 표준 및 스펙

    • Non-blocking

    - 자신이 호출되었을 때 제어권을 바로 자신을 호출한 쪽으로 넘기며, 자신을 호출한 쪽에서 다른 일을 할 수 있도록 하는 것

    • Back-pressure

    - 시스템을 구성하는 컴포넌트들 간에 자신의 상태를 주고받음으로써 부하에 대한 시스템의 복원력을 보장하고 
    시스템 자체가 부하를 분산할 다른 자원을 제공할 수 있는지 정보를 제공하는 시스템

     

    • Reactive Stream Bebavior

     

    Reactive Stream behavior 출처 https://grokonez.com/java/java-9/java-9-flow-api-reactive-streams

    1. Publisher는 subscribe() 메서드를 통해 subscriber를 등록한다.
    2. Subscriber는 onSubscribe() 메서드를 통해 Subscription을 등록하고 Publisher를 구독하기 시작한다.
     (Publisher와 Subscriber는 Subscription을 통해 연결된 상태가 된다)
    3. onSubscribe() 내부에 Subscription의 request()를 요청하면 그때부터 data 구독이 시작된다.

    4. Suscriber는 Subscription 메서드의 request() 또는 cancel()을 호출을 통해 data의 흐름을 제어할 수 있다.

    5. 정상적인 경우라면 Subscriber의 onNext() 메소드를 호출해서 아이템을 전달한다.

    Publisher 자신이 가지고 있는 아이템을 모두 전달했다면 onComplete() 를 호출해서 Subscriber에게 그 사실을 알려주고 에러가 발생했을 경우 onError() 를 통해서 문제가 발생했다는 사실을 알려준다.

    Reactive Streams API 표준에 맞춰 구현된 RxJava2

    RxJava 2.0은 RxJava 1.x를 Recative-Stream 스펙 기반으로 새롭게 개선한 것이다. 

    (현재 Release 버전은 RxJava 3.0.12)

     

    Reference

     

     

     

    'ReactiveX' 카테고리의 다른 글

    [RxJava] Scheduler  (0) 2021.05.01
    [RxJava] Single, Maybe  (0) 2021.05.01
    [RxJava] Operators(연산자)  (0) 2021.04.30
    [RxJava] Observable  (0) 2021.04.29
    마블 다이어그램(Marble diagrams)  (0) 2021.04.29
Designed by Tistory.