Ref - https://www.reactivemanifesto.org/
Reactive System
✔ MEANS - Reactive System에서 사용하는 커뮤니케이션 수단이다.
- Message Driven - 메시지 기반의 통신을 통해 여러 시스템 간에 느슨한 결합을 유지한다.
✔ FORM - 메시지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지 의미한다.
- Elastic - 시스템으로 들어오는 요청량에 상관없이 일정한 응답성을 유지하는 것을 의미한다.
- Resillient - 시스템의 일부분에 장애가 발생하더라도 응답성을 유지하는 것을 의미한다.
✔ VALUE - Reactive System의 핵심 가치가 무엇인지를 표현하는 영역이다.
- Responsive - 클라이언트의 요청에 즉각적으로 응답할 수 있어야 한다는 것을 의미한다.
- Maintainable - 클라이언트의 요청에 대한 즉각적인 응답이 지속 가능해야 한다는 것을 의미한다.
- Extensible - 클라이언트의 요청에 대한 처리량을 자동으로 확장 및 축소할 수 있어야 하는 것을 의미한다.
- https://www.reactivemanifesto.org/
Reactive Programming
Reactive Programming은 선언형 프로그래밍 방식을 사용하고, Reactive System에서 사용되는 대표적인 프로그래밍 모델을 의미한다. 메시지 기반의 통신은 Non-Blocking 통신과 유기적인 관계를 맺고 있고, Non-Blocking 통신을 위한 프로그래밍 모델이다.
Reactive Streams
리액티브 프로그래밍을 위한 표준 사양(또는 명세, Specification)이다.
(일반적으로 Java의 interface로 정의)
- https://github.com/reactive-streams/reactive-streams-jvm
Components of Reactive Streams
✔ Publisher
public interface Publisher<T> {
public void subscribe(Subscriber<? super T> s);
}
Publisher 인터페이스는 데이터 소스로 부터 데이터를 내보내는(emit) 역할을 한다.
✔ 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로부터 내보내진 데이터를 소비하는 역할을 한다.
✔ Subscription
public interface Subscription {
public void request(long n);
public void cancel();
}
Subscription 인터페이스는 Subscriber의 구독 자체를 표현한 인터페이스이다.
✔ Processor
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {
}
Publisher와 Subscriber의 역할을 동시에 할 수 있는 특징을 가지고 있다.
Implementation of Reactive Streams
- Project Reactor (=Reactor) - 대표적인 구현체로, Spring과 궁합이 가장 잘 맞는 Reactive Streams 구현체이다.
- RxJava - .NET 기반의 리액티브 라이브러리를 넷플릭스에서 Java 언어로 포팅한 JVM 기반의 리액티브 확장 라이브러리이다.
- Java Flow API - Reactive Streams 표준 사양을 Java 안에 포함시킨 구조이다.
- Reactive Extension - 리액티브 스트림즈를 구현한 리액티브 확장(Reactive Extension) 라이브러리이다.
(RxJave, RxJS, RxAndroid, RxKotlin, RxPython, RxScala 등)
- https://reactivex.io/
Terms of Reactive Programming
- Publisher - 데이터를 내보내는 주체를 의미한다.
- Emit - Publisher가 데이터를 내보내는 것을 Emit이라고 한다.
- Subscriber - Publisher가 emit한 데이터를 전달 받아서 소비하는 주체를 의미한다.
- Subscribe - 구독을 의미하고, subscribe() 메서드를 호출하면 구독을 하는 것이다.
- Signal - Publisher가 발생시키는 이벤트를 의미한다.
- Operator - Reactive Programming에서 어떤 동작을 수행하는 메서드를 의미한다.
- Sequence - Operator 체인으로 표현되는 데이터의 흐름을 의미한다.
- Upstream / Downstream - Sequence 상의 특정 Operator를 기준으로 위쪽의 Sequence 일부를 Upstream, 아래 쪽 Sequence 일부를 Downstream이라고 표현한다.
## Reactive Programming은 선언형 프로그래밍 방식이다. 이는 Java의 Stream API와 선언형 프로그래밍 방식으로 구성된다는 공통점이 있지만, Stream API와는 차이점이 더 많고, 용도 역시 확연히 다르다.
'Develop > Spring' 카테고리의 다른 글
Spring WebFlux (0) | 2022.12.01 |
---|---|
Spring WebFlux - Reactor (Project Reactor) (0) | 2022.11.30 |
OAuth 2 + JWT 샘플 애플리케이션 구현 (0) | 2022.11.29 |
OAuth 2 샘플 애플리케이션 구현 (0) | 2022.11.28 |
OAuth2 개요 (0) | 2022.11.25 |