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

이동엽·2025년 10월 1일

Spring Webflux를 학습하기 전에 리액티브 프로그래밍(Reactive Programming)에 대해서 먼저 알아볼려고 합니다.

리액티브 프로그래밍은 데이터의 흐름과 변화(이벤트)를 비동기적으로 처리하는 프로그래밍 패러다임
즉, 데이터 스트림과 변화에 반응 하는 시스템에 적절한 패러다임이고
데이터를 비동기적으로 처리하고, 이벤트 기반에 실시간으로 데이터 변화에 반응할수 있는 개념이다.

핵심 키워드

  1. 비동기성
    MVC 같이 한 요청에 한 스레드를 사용한다면 이건 I/O작업이나 외부 서비스 호출이 완료 되기를 기다리면서 다른 작업을 처리한다. 그래서 리소스 활용도도 향상되고 전반적인 시스템 성능이 향상된다.
  2. 반응성
    리액티브 시스템은 실시간으로 데이터의 변화에 반응합니다. 그래서 사용자 요청이나 외부 이벤트에 빠르게 응답할 수 있습니다
  3. 탄력성
    부하나 실패 같은 이벤트가 발생하면 해당 이벤트를 처리하느 콜백 함수를 등록하거나 리소스 사용할 준비가 되면 알림을 받는 형식으로 잘버티는 시스템입니다. 그래서 시스템 전체가 다운을 방지합니다.

핵심 인터페이스

  1. Publisher : subscribers에게 이벤트를 전송하는 데이터 소스
    데이터 스트림을 관리하고 필요한 경우 백프레셔를 적용하는 역할을 합니다.
public interface Publisher<T> {
    void subscribe(Subscriber<? super T> subscriber); //구독자 등록
}
  1. Subscriber : publisher가 내보내는 이벤트를 수신하고 소비하는 컴포넌트
    데이터를 처리하고, 변환하고 다른 Subscriber에 새로운 이벤트를 보낼수도 있습니다.
public interface Subscriber<T> {
    void onSubscribe(Subscription s);
    void onNext(T t);
    void onError(Throwable t);
    void onComplete();
}
  • onSubscribe : 구독이 시작될 때 호출. 여기서 얼마나 받을지 요청한다.
  • onNext : Publisher가 발행한 데이터를 받을 때 호출
  • onError : 데이터 처리 중 에러 발생 시 호출
  • onComplete : 모든 데이터 발행 완료 시 호출
  1. Subscription : Publisher ↔ Subscriber 간 연결을 관리 (요청/취소 등)
public interface Subscription {
    void request(long n);
    void cancel();
}
  • request(n) : 데이터 n 개 요청
  • cancel() : 구독 해제
  1. Processor :subscriber 역할과 publisher 역할을 모두 수행하는 구성 요소
    하나 이상의 Publisher로부터 데이터를 소비하고 처리한 후, 그 결과를 여러개의 subscribers에게 내보냅니다.
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

참고

https://colevelup.tistory.com/37
https://gngsn.tistory.com/223
https://devocean.sk.com/blog/techBoardDetail.do?ID=165099&boardType=techBlog

profile
씨앗

0개의 댓글