WY J
학습 공간
WY J
  • 분류 전체보기 (95)
    • Java (38)
      • 알고리즘 (5)
      • 자료구조 (4)
      • 기초 (9)
      • OOP (10)
      • Collection (3)
      • Effective (5)
      • reator (2)
    • HTML&CSS (5)
    • macOS (3)
    • Git (5)
    • Network (5)
    • MySQL (2)
    • Spring Boot (31)
      • Core (5)
      • MVC (15)
      • Security (10)
    • 알고리즘 (1)
    • Cloud (3)
      • AWS (3)
    • Docker (1)
    • Project (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

hELLO · Designed By 정상우.
WY J

학습 공간

[Spring WebFlux] 리액티브 프로그래밍이란?
Java/reator

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

2022. 10. 12. 17:07

리액티브 시스템(Reactive System)이란?

리액티브 시스템은 클라이언트의 요청에 대한 응답 대기 시간을 최소화 할 수 있도록 요청 쓰레드가 차단되지 않게 함으로써(Non-Blocking) 클라이언트에게 즉각적으로 반응하도록 구성된 시스템이라고 볼 수 있다.

 

MEANS

  • 리액티브 시스템에서 사용하는 커뮤니케이션 수단을 의미한다.
  • Message Driven
    • 리액티브 시스템에서는 메세지 기반 통신을 통해 여러 시스템 간에 느슨한 결합을 유지한다.

FORM

  • 메세지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지를 의미한다.
  • Elastic
    • 시스템으로 들어오는 요청량에 상관없이 일정한 응답성을 유지하는 것을 의미한다.
  • Resillient
    • 시스템의 일부분에 장애가 발생하더라도 응답성을 유지하는 것을 의미한다.

VALUE

  • 리액티브 시스템의 핵심 가치가 무엇인지를 표현하는 영역이다.
  • Responsive
    • 리액티브 시스템은 클라이언트의 요청에 즉각적으로 응답할 수 있어야 함을 의미한다.
  • Maintainable
    • 클라이언트의 요청에 대한 즉각적인 응답이 지속가능해야 함을 의미한다.
  • Extensible
    • 클라이언트의 요청에 대한 처리량을 자동적으로 확장하고 축소할 수 있어야 함을 의미한다.

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

리액티브 프로그래밍은 리액티브 시스템에서 사용되는 프로그래밍 모델을 의미한다. 리액티브 시스템에서의 메시지 기반 통신(Message Driven)은 Non-Blocking 통신과 유기적인 관계를 맺고 있으며, 리액티브 프로그래밍은 Non-Blocking 통신을 위한 프로그래밍 모델이다.

 

리액티브 프로그래밍에선 순차적으로 연산하는 루프(if/then) 조건과 같은 명령형 프로그래밍 구성은 사용하지 않는다. Stream의 메서드 체인에 필요한 동작들을 선언하고, 구체적인 동작 수행은 Operation 메서드 체인에 위임한다.

 

  • declarative programing paradigm(선언형 프로그래밍 패러다임)
  • data stream and the propagation of change(데이터 스트림 및 변경 사항 전달)
  • automatic propagation of the changed the data flow(데이터 흐름의 자동 전달)

리액티브 스트림즈(Reactive Streams)란?

리액티브 프로그래밍을 위한 표준 사양(Spec)이다. 기술의 표준 사양을 인터페이스로 정의한 것이다.

 

Publisher

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

데이터 소스로 부터 데이터를 내보내는(emit) 역할을 한다.

subscribe() 추상 메서드의 파라미터로 전달되는 Subscriber가 Publisher로 부터 내보내진 데이터를 소비하는 역할을 한다.

 

Subscriber

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

Subscriber 인터페이스는 Publisher로부터 내보내진 데이터를 소비하는 역할을 한다.

 

onSubscribe(Subscription s)

  • 구독이 시작되는 시점에 호출되며, Publisher에게 요청할 데이터의 개수를 지정하거나 구독 해지 처리를 할 수 있다.

onNext(T t)

  • Publisher가 데이터를 emit할 때 호출되며, emit된 데이터를 전달 받아서 소비할 수 있다.

onError(Throwable t)

  • Publisher로부터 emit된 데이터가 Subscriber에게 전달되는 과정에서 에러가 발생할 경우에 호출된다.

onComplete()

  • Publisher가 데이터를 emit하는 과정이 종료될 경우 호출되며, 데이터의 emit이 정상적으로 완료 된 후, 처리해야 할 작업이 있는 경우 수행한다.

 

Subscription

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

Subscriber의 구독 자체를 표현하는 인터페이스이다.

 

request(long n)

  • Publisher가 emit하는 데이터의 개수를 요청한다.

cancel()

  • 구독을 해지하는 역할을 한다.(Publisher가 데이터를 emit하지 않는다)

 

Processor

public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}

Subscriber와 Publisher 인터페이스를 상속하여 역할을 동시에 할 수 있다.


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

Project Reactor

  • 리액티브 스트림즈를 구현한 대표적인 구현체이다. Spring Reactive Application 구현에 있어 핵심적인 역할을 하고 있다.

RxJava

  • .NET 기반의 리액티브 라이브러리를 넷플릭스에서 Java 언어로 포팅한 JVM 기반의 리액티브 확장 라이브러리이다.

Java Flow API

  • Flow API는 리액티브 스트림즈를 구현한 구현체가 아닌 표준 사양을 Java 안에 포함 시킨 구조라고 볼 수 있다.

용어 정리

 

Publisher

  • Publisher는 데이터를 내보내는 주체를 의미한다.

Emit

  • Publisher가 데이터를 내보내는 것을 Emit 이라고 한다.

Subscriber

  • Subscriber는 Publisher가 emit한 데이터를 전달 받아서 소비하는 주체를 의미한다.

Subscribe

  • Subscribe는 구독을 의미한다.

Signal

  • Signal은 Publisher가 발생시키는 이벤트를 의미한다. 

Operator

  • Operator는 리액티브 프로그래밍에서 어떤 동작을 수행하는 메서드를 의미한다.

Sequence

  • Sequence는 Operator 체인으로 표현되는 데이터의 흐름을 의미한다.

Upstream / Downstream

  • Sequence 상의 특정 Operator를 기준으로 위쪽의 Sequence 일부를 Upstream이라고 하며, 아래 쪽 Sequence 일부를 Downstream이라고 표현한다.

'Java > reator' 카테고리의 다른 글

[Spring WebFlux] Project Reactor  (0) 2022.10.13
    'Java/reator' 카테고리의 다른 글
    • [Spring WebFlux] Project Reactor
    WY J
    WY J

    티스토리툴바