[Java] Project Reactor

succeeding·2025년 3월 17일

입문은 가이드 문서 를 보면 좋을 것 같다.

배경 지식


Reactive programming

Reactive programming 란?

  • 데이터 흐름에 스트림 개념을 사용하여 처리하는 선언적 프로그램 패러다임이다.
  • 스트림으로 데이터를 처리한다.
  • 비동기 및 논플로킹 I/O 처리를 지원한다.
  • backpressure 를 지원하여, subscriber 가 소비할 수 있는 속도에 맞춰 publisher 가 데이터를 전송하도록 조절한다. 이를 통해, 과부하나 메모리 문제를 방지한다.
  • 함수형 프로그래밍의 장점을 지닌다.
    • 순수 함수와 불변성: 데이터 변환, 필터링 결합 등의 연산을 함수형 스타일로 구현하여 코드의 가독성과 유지보수성을 높인다.
    • 연산자: 다양한 연산을 활용해 복잡한 데이터 처리 로직을 간결하게 표현할 수 있다.

Reactive Streams

Reactive Streams 란?

  • java 에서 reacdtive programming 에 대한 표준화를 위한 노력으로 표준 스펙으로서 interface 를 제공한다.
  • Publisher 에서 데이터 소스를 스트림화 하고 데이터를 가공(transformation)한 다음 Subscriber 가 구독하여 추가적인 처리를 하는 것이 큰 흐름이다.(push-based 이다. Iterable-Iterator 는 pull-based)
  • Subscriber 의 처리 속도가 Publisher 의 전달 속도보다 빠른 경우 backpressure 기능을 사용하여, 전달 속도를 조절할 수 있다.
  • 선언형으로 데이터 처리 로직을 정의하며, Publisher.subscribe(Subcscriber) 로 스트림 처리가 시작된다.
  • java 9 에서부턴 Reactive Streams 를 기반으로 java.util.concurrent.Flow 가 만들어졌다.

Project Reactor


Project Reator 란?

  • Reactive programming 를 구현한 라이브러리
  • Reactive Streams 를 구현하고 있음.
  • spring 팀에서 만들고 관리하고 있다.
  • 다양한 operator 를 제공한다.

Reactor Core Features

Producers

reactor 에서는 Reactive Streams 의 Publisher 를 구현한 Flux, Mono 를 제공한다.

how to subscribe

Publisher 가 발행하는 시그널 next, completion, error 에 대해 SubscriberonNext, onComplete, onError 로 시그널 처리 로직을 정의하여 사용할 수 있다.

BaseSubscriber 를 이용하면 커스텀 Subscriber 를 쉽게 구현할 수 있다.

backpressure

SubscriberrequestPublisher 에게 보냄으로써 backpressure 를 사용할 수 있다.

  • request(Long.MAX_VALUE) 는 backpressure 를 사용하지 않는 unbounded 모드로써 Publisehr 에게 최대한 빠르게 데이터를 발행하도록 요청한다.

0개의 댓글