Spring WebFlux [리액티브 프로그래밍]

손정훈·2023년 3월 28일

리액티브 프로그래밍

리액티브 시스템에서 사용되는 프로그래밍 모델

  • declarative programming paradigm : 리액티브 프로그래밍은 선언형 프로그래밍 방식을 사용하는 대표적인 프로그래밍 모델
  • data streams and the propagation of change : 지속적으로 데이터가 입력으로 들어올 수 있으며 데이터가 지속적으로 발생하는 것 자체를 데이터에 어떤 변경이 발생함을 의미
  • automatic propagation of the changed data flow : 지속적으로 발생하는 데이터를 하나의 데이터 플로우로 보고 데이터를 자동으로 전달

리액티브 스트림즈

리액티브 프로그래밍을 위한 표준 사양

Publisher
public interface Publisher<T> {
	public void subscribe(Subscriber<? super T> s);
}
  • Publisher : 인터페이스 데이터 소스로 부터 데이터를 내보내는(emit) 역할
Subscriber
public interface Subscriber<T> {
	public void onSubscribe(Subscription s);	// 구독이 시작되는 시점에 호출됨, publisher에게 요청할 데이터의 개수를 지정하거나 구독 해지 처리
    public void onNext(T t);	// publiser가 데이터를 emit할 때 호출, emit된 데이터를 전달받아서 소비
    public void onError(Throwable t);	// publisher로 부터 emit된 데이터가 subscriber에게 전달되는 과정에서 에러가 발생할 경우 호출
    public void onComplete();	// publisher가 데이터를 emit하는 과정이 종료될 경우 호출, emit이 정상적으로 완료된 후 처리해야할 작업을 처리
}
  • Subscriber : Publisher로 부터 내보내진 데이터를 소비하는 역할
Subscription
public interface Subscription {
	public void request(long n);	// publisher가 emit하는 데이터의 개수를 요청
    public void cancel();	// 구독을 해지
}
  • Subscription : 구독 자체를 표현하는 인터페이스
Processor
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}
  • Processor : Subscriber와 Publisher 동시에 사용 가능

리액티브 프로그래밍 용어

  • Publisher : 데이터를 내보내는 주체
  • Emit : Publisher가 데이터를 내보내는 것
  • Subscriber : publisher가 emit한 데이터를 전달 받아서 소비하는 주체
  • Subscribe : 구독
  • Sognal : publisher가 발생시키는 이벤트
  • Operator : 리액티브 프로그래밍에서 어떤 동작을 수행하는 메서드
  • Sequence : Operator 체인으로 표현되는 데이터의 흐름
  • Upstream / Downstream : Operator를 기준으로 위쪽의 Sequence 일부를 Upstream / 아래쪽 Sequence 일부를 Downstream 이라고 표현

0개의 댓글