반응형

RxJava란 무엇인가?


 

RxJava는 자바에서 리액티브 프로그래밍(Reactive Programming)을 구현하는 데 사용하는 라이브러리이다.

 

리액티브 프로그래밍(Reactive Programming) 이란?
데이터가 통지될 때마다 관련 프로그램이 반응(Reaction)해 데이터를 처리하는 프로그래밍 방식.이 때, 통지되는 데이터의 흐름을 데이터 스트림(Data Stream) 이라고 한다.

 

RxJava는 데이터를 통지하는 생산자를 생성하고, 통지한 데이터를 소비자가 받아 처리하는 방식을 취하고 있다. 이러한 방식은 디자인 패턴인 옵저버(Observer) 패턴을 확장한 구조라고 볼 수 있다. 아래와 같은 예시 코드를 참고하자.

 

public static void main(String[] args) {
	Flowable<String> flowable = Flowable.just("Byungwook", "Kim");	// "flowable" 이라는 이름의 생산자를 만들고, "Byungwook", "Kim" 이라는 String을 생산하도록 한다.
	flowable.subscribe(data -> System.out.println(data));			// "flowable" 생산자를 구독하여 소비할 소비자를 등록한다. 이 소비자는 전달받은 데이터를 출력하는 일을 한다.
}

 

이러한 RxJava의 시초는 닷넷 프레임워크의 라이브러리인 Reactive Extensions(RX) 를 마이크로소프트의 에릭 마이어란 프로그래머가 2009년에 공개한 이후에 이를 2013년에 넷플릭스(Netflix) 에서 자바로 이식한 것이다. 아래의 GitHub에서 RxJava의 자세한 사항을 확인할 수 있다.

 

https://github.com/ReactiveX/RxJava

 

RxJava는 자바를 활용해 개발하는 다양한 분야에서 비동기 처리를 위해서 사용하고 있다.

 

 

 

Reactive Streams란 무엇인가?


 

Reactive Streams란 라이브러리나 프레임워크에 상관없이 데이터 스트림을 비동기로 다룰 수 있는 공통 메커니즘으로,

이 메커니즘을 편리하게 사용할 수 있는 인터페이스를 제공하는 리액티브 프로그래밍 라이브러리의 표준 사양이다.

 

Reactive Streams는 데이터를 만들어 통지하는 Publisher(생산자)와, 통지된 데이터를 받아 처리하는 Subscriber(소비자)로 구성된다. 즉, Subscriber가 Publisher를 구독(subscribe)하면 Publisher까 통지한 데이터를 Subscriber가 받을 수 있는 방식이다. 이러한 데이터의 흐름을 순서대로 나타내면 아래와 같이 표현할 수 있다.

 

 

1) Publisher는 통지 준비가 끝나면 이를 Subscriber에 통지(onSubscribe)한다.

2) 해당 통지를 받은 Subscriber는 받고자 하는 데이터 개수를 요청한다.

  - 이 때, Subscriber가 자신이 통지받을 데이터 개수를 요청하지 않으면 Publisher는 통지해야 할 데이터 개수 요청을 기다리게 된다.

3) Publisher는 데이터를 만들어 Subscriber에 통지(onNext)한다.

4) Publisher는 Subscriber에 모든 데이터를 통지하고, 마지막으로 데이터 전송이 완료돼 정상 종료됐다고 통지(onComplete)한다.

  - 완료 통지를 하고 나면 Publisher는 이 구독 건에 대해 어떤 통지도 하지 않는다.

5) Publisher는 처리 도중에 에러가 발생하면 Subscriber에 발생한 에러 객체와 함께 에러를 통지(onError)한다.

 

위의 과정을 보면 데이터의 통지를 아래의 4개의 프로토콜을 통해서 진행하고 있는 것을 알 수 있다.

onSubscribe 데이터 통지가 준비됐음을 통지한다.
onNext 데이터 통지
onError 에러가 발생해서 이상 종료되었음을 통지
onComplete 데이터 통지가 완료되어 정상 종료되었음을 통지

 

또한, Reactive Streams가 제공하는 인터페이스를 정리하면 아래의 4개와 같다.

Publisher 데이터를 생성하고 통지하는 인터페이스
Subscriber 통지된 데이터를 전달받아 처리하는 인터페이스
Subscription 데이터 개수를 요청하고 구독을 해지하는 인터페이스
Processor Publisher와 Subscriber의 기능이 모두 있는 인터페이스

 

 

 

Reactive Streams의 규칙


 

Reactive Streams는 위에서 언급한 바와 같이 데이터를 통지하는 구조를 제공하는 인터페이스로,

이 구조가 정상적으로 작동하려면 Reactive Streams의 아래 규칙을 잘 따라야 한다.

 

1) 구독 시작 통지(onSubscribe)는 해당 구독에서 한 번만 발생한다.

2) 데이터의 통지는 반드시 순차적으로 이루어져야 한다.

3) null을 통지할 수 없다.

4) 완료(onComplete)나 에러(onError)를 통지하면 Publisher가 처리를 끝마친 것으로 판단한다.

 

 

 

참고(Reference)


 

RxJava 리액티브 프로그래밍, 스다 토모유키 지음, 이승룡 옮김

반응형
복사했습니다!