Reactive란? 리액티브 스트림의 구성요소
황정식 - 스프링으로 시작하는 리액티브 프로그래밍
Spring WebFlux를 이용한 Non-Blocking 애플리케이션 구현
책을 통해 공부하면서 개인적으로 정리한 내용입니다.
✅ 개요
웹플럭스(WebFlux)는 리액티브 프로그래밍을 기반으로 비동기/논블로킹을 구현할 수 있게 함으로써
대규모 트래픽이 발생할 수 있는 애플리케이션에서 성능 향상을 돕는다.
우리는 WebFlux를 공부하기 위해 가장 기초적인 개념을 공부해야한다.
리액티브란 무엇인지, 리액티브 스트림의 구성요소들에 대해 알아보자!
✅ Reactive
영어 자체를 해석하면 반응을 하는, 반응을 보이는 이란 의미이다.
✍️ Reactive System
리액티브 시스템 클라이언트의 요청에 반응을 잘 하는 시스템을 의미하게 된다.
Non-Blocking (제어권을 그대로 본인이 갖고 있는것)의 개념과 아주 밀접하다.
요청한 스레드가 차단되지 않게 하여, 클라이언트에게 즉각적으로 반응할수 있게 구성된 시스템이다.
리액티브의 특징
1. Responisve : 클라이언트의 요청에 즉각적으로 응답할 수 있어야한다.
2. Maintainable : 요청에 대한 즉각적인 응답이 지속 가능해야 한다.
3. Extensible : 요청에 대한 처리량을 자동으로 확장하고 축소할 수 있어야한다.
✅ 리액티브 스트림즈
리액티브 프로그래밍을 위한 표준 사양(명세)이다.
⏺ 컴포넌트 (구성요소)
리액티브 스트림즈는 4가지 구성요소가 존재한다.
글자색을 일부러 구성요소마다 다른 색깔을 주었으니, 그림과 대조해서 봐보자.
✍️ Publisher (생산자)
데이터 소스로부터 데이터를 내보내는 역할
* Emit : 퍼블리셔가 데이터를 내보내는것
subscribe
- 데이터를 수신할지 여부를 결정하는 구독의 의미를 가짐
- 이것이 호출되지 않으면, Publsher는 데이터를 내보내는 프로세스가 시작되지 않는다.
✍️ Subscriber (소비자)
Publisher로부터 내보내진 데이터를 소비하는 역할
onSubscibe
- 구독이 시작되는 시점에 호출
- onSubscribe 내부에서 Publisher에게 요청할 데이터의 개수를 지정
- 구독 해지 처리 등
onNext
- 퍼블리셔가 데이터를 emit할때 호출됨 > emit된 데이터를 전달받아 소비할 수 있다.
onError
- emit된 데이터가 subscriber에게 전달되는 과정에서 에러 발생하면 호출 됨
onComplete
- emit과정이 종료될 경우 호출
- emit이 정상적으로 완료된 후 , 처리해야하는 작업이 있으면 여기에서 수행
✍️ Subscription (전달자)
subscriber의 구독 자체를 표현한 인터페이스
request
- Publisher가 emit하는 데이터의 개수를 요청
cancel
- 구독 해지하는 역할 (이 메서드 호출시 Publisher는 더이상 데이터를 emit하지 않는다)
✍️ Processor (생산자 겸 소비자 역할 가능)
Subscriber와 Publisher를 상속하고 있어서 둘의 역할을 동시에 할 수 있다.
++ Publisher는 여러개의 Subscriber를 subscribe(소비자 등록) 할 수 있다.
⏺ 리액티브 스트림즈의 구현체
Project Reactor
RxJava
Java Flow API 등이 존재한다.
여기에서 Project Reactor 는 Reactor라고 간단하게 부르며
리액티브 스트림즈를 구현한 대표적인 구현체이다.
> 스프링과 궁합이 가장 잘 맞는 구현체라고 한다!
오늘은 간단하게 리액티브가 무엇인지, 리액티브 스트림즈의 구성요소는 어떤것들이있고 어떻게 흘러가는지 알아보았다.
다음에는 Reactor의 코드를 보며
스프링 리액티브 프로그래밍에 대해 조금 더 세세하게 알아보자.
references
https://bgpark.tistory.com/160