본문 바로가기
#컴퓨터 과학 [Computer Science]/운영체제 (Operating System)

[OS - 🍎 macOS] RxSwift

by cy_mos 2022. 3. 9.
반응형
카테고리 게시글 작성 날짜 게시글 최근 수정 날짜 작성자
Operating System 2022.03.09. 14:21 2022.03.09. 14:21 Dev.Yang

 

🛠 리액티브 프로그래밍 (Reactive Programming)이란?

데이터가 통지될 때마다 관련 프로그램이 반응 (Reaction)하여 데이터를 처리하는 프로그래밍 방식입니다. 즉, 데이터 흐름을 통하여 데이터를 받은 시점에 반응하여 이를 처리하는 프로그래밍입니다.


🛠 Reactive Streams이란?

라이브러리 (Library)나 프레임워크 (Framework)에 상관없이 데이터 스트림 (Data Stream)을 비동기로 다룰 수 있는 공통적인 메커니즘입니다. Reactive Streams 구성으로는 생산자 (Publiser)소비자 (Subscriber)로 구성됩니다. 생산자와 소비자의 관계는 구독 (Subscribe)를 통하여 데이터를 주고받습니다.

 

  • 생산자 (Publisher) → 데이터를 통지하는 대상입니다.
  • 소비자 (Subscriber) → 데이터를 받아 처리하는 대상입니다.

🛠 Reactive Streams 기본 규칙, 프로토콜, 인터페이스

Reactive Streams 기본적인 규칙은 아래와 같습니다.

  • 구독 시작 통지 (onSubscribe)는 해당 구독에서 단 한 번만 발생합니다.
  • 통지는 순차적으로 이루어집니다.
  • NULL을 통지하지 않습니다.
  • 생산자 (Publisher)의 처리는 완료 (onComplete) 또는 에러 (onError)를 통지하여 종료합니다.

 

리액티브 스트림 (Reactive Streams) 제공하고 있는 기본적인 프로토콜은 아래의 도표와 같습니다.

 

프로토콜 (Protocol) 설명
onSubscribe 데이터 통지가 준비됐음을 통지하는 프로토콜입니다.
onNext 데이터 통지하는 프로토콜입니다.
onError 에러(이상 종료)를 통지하는 프로토콜입니다.
onComplete 완료(정상 종료)를 통지하는 프로토콜입니다.

 

리액티브 스트림 (Reactive Streams) 제공하고 있는 기본적인 인터페이스는 아래의 도표와 같습니다.

 

인터페이스 (Interface) 설명
Publisher 데이터를 생성하고 통지하는 인터페이스입니다.
Subscriber 통지 된 데이터를 전달받아 처리작업을 수행하는 인터페이스입니다.
Subscription 데이터 개수를 요청하고 구독을 해지하는 인터페이스입니다.
Processor Publisher 그리고 Subscriber의 기능을 모두 가지고 있는 인터페이스입니다.

🛠 Cold 생산자와 Hot 생산자란?

https://jade314.tistory.com/entry/리엑티브-생산자Publisher-Cold-Publisher-Hot-Publisher

 

❄️ Cold 생산자

  • 1개의 소비자와 구독관계를 가집니다.
  • 기본적으로 생성이 되는 메서드로 생성되는 생성자는 Cold 생산자입니다.
  • 구독시 구독되는 시간에 상관없이 데이터는 처음부터 현재까지의 데이터를 전부 전달받습니다.

 

https://jade314.tistory.com/entry/리엑티브-생산자Publisher-Cold-Publisher-Hot-Publisher

 

🔥 Hot 생산자

  • 여러 소비자와의 구독 관계를 가집니다.
  • 구독시 구독되는 시간 이후부터 데이터를 전달받습니다.

🛠 배압 (Backpressure)

데이터 통지량을 제어하는 기능을 뜻하며, Reactive Stream을 따르는 Flowable에서만 제공하고 Obserable에서는 제공하지 않습니다.

 

아래의 도표는 배압 (Backpressure) 종류를 설명하는 도표와 관련 이미지입니다.

 

012
https://reactivex.io/documentation/ko/operators/backpressure.html

 

종류 설명
BUFFER 데이터를 통지할 수 있는 상태가 될 때까지 모든 데이터를 버퍼에 저장하고 있습니다.
DROP 데이터를 통지할 수 있는 상태가 될 때까지 새로 생성되는 모든 데이터를 파기합니다.
LATEST 생성한 최신 데이터만을 버퍼에 저장하고, 새로운 데이터가 생성하면 버퍼에 담긴 데이터를 최신의 데이터로 교체합니다.
ERROR 통지를 기다리는 데이터가 지정 된 사이즈의 버퍼를 초과하면 MissingBackPressureException 에러를 통지합니다.
NONE 특정 처리 작업을 수행하지 않습니다.

🛠 Difference between Flowable to Observable

  • Flowable
    • 대량 데이터 (예를 들어서 10,000건 이상)을 처리하고자 하는 경우
    • 네트워크 통신이나 데이터베이스 등의 I/O 처리하고자 하는 경우
  • Observable
    • GUI 이벤트
    • 소량 데이터 (예를 들어 1,000건 이하)를 처리하고자 하는 경우
    • 데이터 처리가 기본으로 동기 방식이며, Java 표준의 Stream 대신 사용하고자 하는 경우

🛠 결합 연산자 (Combine Operator)

https://reactivex.io/documentation/operators/zip.html

zpi 연산자 메서드는 인자로 전달이 된 여러 개의 Flowable/Obserable에서 데이터를 받아 데이터들이 모인 시점에 이 데이터들을 함수형 인터페이스에 전달하고 이 함수형 인터페이스에서 새로 생성 된 데이터를 결과로 통지하는 연산자입니다.

 

https://reactivex.io/documentation/operators/merge.html

merge 연산자 메서드는 여러 개의 Flowable/Observable에서 받은 데이터를 하나의 Flowable/Obserable로 통지하는 연산자입니다. 또한, 여러 개의 Flowable/Observable에서 받은 데이터를 순차적으로 통지합니다.


🛠 리엑티브 프로그래밍 (Reactive Programming) 용어 정리

  • 데이터 스트림 (Data Stream) → 각각의 데이터가 생성될 때마다 순서대로 보내는 흐름입니다.
  • 리액티브 시스템 (Reactive System) → 메세지를 보내 데이터를 처리하고 상황에 따라 스케일 아웃 (Scale Out)과 스케일 인 (Scale In)을 자동으로 수행하여 장애 내성을 높임으로써 항상 빠르게 응답할 수 있는 시스템입니다.
  • 연산자 (Operator) → 통지하는 데이터를 생성하거나 필터링 또는 변환하는 메서드입니다.
  • 스로틀링 (Throttling) 대량으로 받은 데이터를 모두 흘려보내는 것이 아니라 제한을 두어서 지정 된 기간 조건에 맞는 테이터만을 통지하는 메서드입니다.
  • 스케줄러 (Schduler) → 개발자가 직접 스레드 (Thread)를 관리하지 않게 각 처리 목적에 맞춰 스레드 (Thread)를 관리합니다. 또한, 스케줄러 (Schdler)는 데이터를 생성하여 통지하는 부분데이터를 받아서 처리하는 부분으로 지정합니다.

🚀 REFERENCE

더보기
반응형

댓글