TIL(사전캠프)

리액티브. (2024-07-02)

note994 2024. 7. 2. 22:45

1. 리액티브 스트림즈 구현체

리액티브 스트림즈 사양을 구현한 구현체에는 어떤 것이 있는지 앞으로 배우게 될 Reactor를 포함해서 알아보자

 

1. RxJava

RxJava에서 Rx는 Reactive Extensions(리액티브 확장)라는 의미이다. RxJava는 .NET 환경의 리액티브 확장 라이브러리를 넷플릭스에서 Java 언어로 포팅하여 만든 JVM 기반의 대표적인 리액티브 확장 라이브러리이다. RxJava는 2.0부터 리액티브 스트림즈 사양을 지원하기 시작했다. 이 때문에 리액티브 스트림즈 사양을 지원하지 않았던 RxJava 1.x와 2.0의 기능들이 함께 사용되고 있다. 1.x버전과 2.0 이후 버전의 동작 구조는 크게 차이나지 않지만 Backpressure를 지원하느냐 아니냐의 차이점이 있다.


2. Project Reactor

줄여서 Reactor라고 한다. Spring Framework 팀에 의해 주도적으로 개발된 리액티브 스트림즈의 구현체이다.  Reactor 3.x가 Spring Framework 5 버전부터 리액티브 스택에 포함되어 리액티브 프로그래밍의 핵심 역할을 담당한다.

 

Spring WebFlux 기반의 리액티브 애플리케이션 도입을 위해서 Reactor를 충분히 이해하는 과정을 거치지 않은 채 리액티브 애플리케이션을 개발하려 한다면, 개발 과정에서 분명 한계에 부딪히게 될 것이다.

 

WebFlux 용어처럼 Flux라는 Reactor의 핵심 구성요소를 뜻하는 단어가 포함된 것을 보면, Reactor가 Spring Framework 기반의 리액티브 애플리케이션에서 얼마나 중요한 역할을 하는지 알 수 있다.


3. Akka Streams

Akka는 JVM상에서의 동시성과 분산 애플리케이션을 단순화해 주는 오픈소스 툴킷이다. Akka는 Actor로 시작해서 Actor로 끝난다고 해도 과언이 아닐 정도로 Actor Model을 적극적으로 사용하는 대표적인 기술이다. 이러한 Actor들 간의 통신은 메시지를 통해서만 이루어지고 Actor들은 서로 독립적이기 때문에 느슨한 결합과 높은 응집력이 보장된다. 

 

이 Akka라는 Actor 기반의 동시성 모델을 사용하는 툴킷 위에 리액티브 스트림즈를 구현한 것이 바로 Akka Streams이다. 

 

그런데 Akka Streams API라고 하면 리액티브 스트림즈를 구현한 구현체라고 오해할 수 있는데, Akka Streams API는 Akka를 사용하는 최종 사용자에게 제공되는 API이기 때문에 리액티브 스트림즈 인터페이스와 관련이 없다.


4. Java Flow API

Java 9부터 Flow API를 사용하여 리액티브 스트림즈를 지원하게 되었다. 그런데 Flow API는 리액티브 스트림즈를 구현한 다른 구현체들과 차이점이 한 가지 있다.

 

Flow API는 Reactor, RxJava, Akka Streams처럼 리액티브 스트림즈를 구현한 구현체가 아니라 리액티브 스트림즈의 표준 사양이 SPI(Service Provider Interface)로써 Java API에 정의되어 있다.

 

Java에서 이 Flow API를 정의해 놓은 이유를 유추해 보자면, JDBC처럼 사용자들이 리액티브 스트림즈와 관련된 API를 사용하기 위해서 하나의 인터페이스만 바라볼 수 있는 단일 창구로서의 역할을 기대하기 때문이라는 생각이 든다.

 

'TIL(사전캠프)' 카테고리의 다른 글

리액티브.(2024-07-04)  (0) 2024.07.04
리액티브. (2024-07-03)  (0) 2024.07.03
리액티브. (2024-06-28)  (0) 2024.06.28
리액티브. (2024-06-27)  (0) 2024.06.27
리버싱. (2024-06-27)  (0) 2024.06.27