부트캠프 기록/Section4

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

bbangduck 2022. 11. 29. 16:42

리액티브 프로그래밍이란

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

 

리액티브

  • '반응을 하는', '반응을 보이는'

 

리액티브 시스템

  • 클라이언트의 요청에 반응을 잘하는 시스템 

 

- 리액티브 시스템 특징

MEANS

리액티브 시스템에서 사용하는 커뮤니케이션 수단

  • Message Driven
    • 메시지 기반 통신을 통해 여러 시스템 간에 느슨한 결합 유지

 

FORM

메시지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지를 의미

  • Elastic
    • 시스템으로 들어오는 요청량이 적거나 많거나에 상관없이 일정한 응답성 유지
  • Resillient
    • 시스템의 일부분에 장애가 발생하더라도 응답성을 유지

VALUE

리액티브 시스템의 핵심 가치

  • Responsive
    • 클라이언트의 요청에 즉각적으로 응답할 수 있어야 함
  • Maintainable
    • 클라이언트의 요청에 대한 즉각적인 응답이 지속가능해야 함
  • Extensible
    • 클라이언트의 요청에 대한 처리량을 자동으로 확장하고 축소할 수 있어야 함

 

- 리액티브 스트림즈

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

 

- 리액티브 스트림즈 컴포넌트

1. Publisher

public interface Publisher<T> {
    public void subscribe(Subscriber<? super T> s);
}

 

2. Subscriber

public interface Subscriber<T> {
    public void onSubscribe(Subscription s);
    public void onNext(T t);
    public void onError(Throwable t);
    public void onComplete();
}

 

3. Subscription

public interface Subscription {
    public void request(long n);
    public void cancel();
}

 

4. Processor

public interface Subscription {
    public void request(long n);
    public void cancel();
}

 

 - 리액티브 스트림즈 구현체

  • Project Reactor
  • RxJava
  • Java Flow API
  • 기타 리액티브 확장(Reactive Extension)

 

리액티브 프로그래밍 구조

 

  • 선언형 프로그래밍 방식은 실행할 코드를 선언만 하며, 순차적으로 실행되지 않음
  • 실행 로직을 작성한 코드대로 실행이 되는 명령형 프로그래밍 방식과 달리 선언형 프로그래밍 방식은 실행 로직의 일부만 람다 표현식으로 전달하며 전달 받은 람다 표현식을 기반으로 Operation 메서드 내부에서 전체 로직을 실행
  • 최종 연산을 수행하는 메서드를 호출하지 않으면 앞에서 작성한 메서드 체인들이 실행 되지 않음
  • 리액티브 프로그래밍에서 사용되는 용어 정의
더보기
  • Publisher
    • 데이터를 내보내는 주체
  • Emit
    • Publisher가 데이터를 내보내는 것
  • Subscriber
    • Publisher가 emit한 데이터를 전달 받아서 소비하는 주체
  • Subscribe
    • 구독
  • Signal
    •  Publisher가 발생시키는 이벤트
  • Operator
    • 리액티브 프로그래밍에서 어떤 동작을 수행하는 메서드
  • Sequence
    • Operator 체인으로 표현되는 데이터의 흐름
  • Upstream / Downstream
    • Sequence 상의 특정 Operator를 기준으로 위쪽의 Sequence 일부를 Upstream, 아래 쪽 Sequence 일부를 Downstream이라고 표현