리액티브는 사전적인 의미대로 반응을 하는
의미를 가진다.
: 반응을 잘하는 시스템, 해당 시스템을 이용하는 클라이언트의 요청에 반응을 잘하는 시스템을 의미한다.
클라이언트의 요청에 대한 응답 대기 시간을 최소화 할 수 있도록 요청 스레드가 차단되지 않게(Non-Blocking) 함으로써 클라이언트에게 즉각적으로 반응하도록 구성된 시스템
🧐 Blocking 과 Non-Blocking
둘은 함수를 호출하고 결과를 기다리는 동안에 함수를 호출하는 프로그램 상태를 의미한다.
Blocking : 결과값을 얻기 전에 현재 스레드를 정지시킨다. 즉, 결과 값을 받을 때까지 아무것도 하지 않는 상태가 된다.
Non-Blocking : 함수를 호출하고 스레드가 정지되지 않아 결과 값을 받을 때까지 다른 작업을 수행할 수 있다.
[리액티브 시스템 설계 원칙]
: 리액티브 시스템에서 사용하는 커뮤니케이션 수단
: 메세지 기반 통신을 통해 리액티브 시스템이 어떤 특성을 가지는 구조로 형성되는지를 의미
: 리액티브 시스템의 핵심 가치를 표현하는 영역
리액티브 시스템에서 사용되는 선언형 프로그래밍 모델.
💡 리액티브 시스템에서의 메세지 기반 통신은 Non-Blocking통신과 유기적인 관계를 맺고 있으며, 리액티브 프로그래밍은 그 Non-Blocking 통신을 위해 존재한다.
리액티브 프로그래밍을 위한 표준 사양
데이터 소스로 부터 데이터를 내보내는(emit
) 역할을 담당한다.
해당 인터페이스에 포함된 subscribe()
추상 메서드는 파라미터로 Subscriber를 받는데 이것은 Publisher로 부터 내보내진 데이터를 소비하는 역할을 한다.
subscribe()
추상 메서드는 Publisher가 내보내는 데이터를 수신할 지에(구독)대한 여부를 결정하는 메서드로, 해당 메서드가 호출되지 않으면 Publisher가 데이터를 emit하는 프로세스는 시작되지 않는다.
🧐 구독.. 데이터를 생성하고 발행하는 것이라고 이해
Publisher로부터 내보내진 데이터를 소비하는 역할로 데이터를 전달받아 처리한다.
onSubscribe(Subscription s)
: 구독이 시작되는 시점(데이터를 최초 통지할 때)에 호출되는 메서드로 Subscription객체로 데이터의 구독 요청 및 해지 요청을 처리한다.onNext(T t)
: 데이터를 emit할 때 호출되며 emit된 데이터를 전달받아 소비하는 메서드onError(Throwable t)
: emit된 데이터가 Subscriber에 전달되는 과정에서 에러가 발생할 경우 호출되는 메서드onComplete()
: 데이터를 emit하는 과정이 종료될 경우 호출되는 메서드로 데이터의 emit이 정상적으로 완료된 후, 처리해야 될 작업을 해당 메서드 내에서 수행한다.Subscriber의 구독 자체를 표현한 인터페이스로 emit된 데이터의 개수를 요청하고 구독을 해지하는 역할을 한다.
request(long n)
: Publisher가 emit하는 데이터의 개수를 요청하는 메서드cancel()
: 구독을 해지하는 메서드🧐 구독 해지...
Publisher가 더이상 데이터를 emit하지 않는 것을 의미
Subscriber 인터페이스와 Publisher 인터페이스를 상속하고 있기 때문에 Publisher와 Subscriber의 역할을 동시에 할 수 있는 특징을 가진다.
중간 Subscription이 존재한다는 것을 잊지말좌!👊
Project Reactor
RxJava
Java Flow API
기타 리액티브 확장(Reactive Extension)