Learning
토픽 138 / 192·프로그래밍 패러다임

리액티브 프로그래밍 (Reactive Programming)

리액티브 프로그래밍 (Reactive Programming)

데이터 스트림과 변화의 전파에 중심을 둔 비동기 프로그래밍 패러다임으로, 이벤트 기반의 논블로킹 처리와 배압(Backpressure) 메커니즘을 통해 고성능 반응형 시스템을 구현

목적: 비동기 처리 단순화, 높은 확장성, 탄력적 시스템, 반응형 사용자 경험

리액티브 선언문(Reactive Manifesto): ① 응답성(Responsive) ② 탄력성(Resilient) ③ 유연성(Elastic) ④ 메시지 주도(Message-Driven)

핵심 개념

  • Observable/Publisher: 데이터 스트림 생산자, 이벤트 발행
  • Observer/Subscriber: 데이터 소비자, 구독·반응
  • Operator: 스트림 변환(map/filter/merge/zip/flatMap), 파이프라인 구성
  • Scheduler: 실행 스레드 제어, subscribeOn/observeOn
  • Backpressure: 소비자가 처리 가능한 속도로 생산 조절, 버퍼/드롭/최신값 전략

주요 프레임워크: RxJava(Java/Android), Project Reactor(Spring WebFlux), RxJS(JavaScript/Angular), Akka Streams(Scala), Kotlin Flow(코루틴 기반)

Reactive Streams 표준: Publisher, Subscriber, Subscription, Processor 인터페이스, Java 9 Flow API 포함

장점: 높은 처리량, 자원 효율(논블로킹), 배압 지원, 선언적 코드, 조합 용이

단점: 학습 곡선, 디버깅 어려움(스택트레이스 복잡), 콜백 지옥 대체지만 오퍼레이터 복잡, 테스트 어려움

적용사례: Spring WebFlux(웹서버), Android UI(RxJava), 실시간 데이터 처리, IoT 스트리밍

비교: 리액티브(스트림/배압/선언적) vs async/await(코루틴/간결/명령적) vs 콜백(기본/콜백지옥/단순)

연관: 이벤트 기반 아키텍처, 비동기 프로그래밍, 함수형 프로그래밍, 마이크로서비스