관리 메뉴

JIE0025

Reactive란? 리액티브 스트림의 구성요소 본문

백엔드/스프링, 스프링부트, JPA, Spring Webflux

Reactive란? 리액티브 스트림의 구성요소

Kangjieun11 2023. 6. 10. 18:44
728x90

 


황정식 - 스프링으로 시작하는 리액티브 프로그래밍

Spring WebFlux를 이용한 Non-Blocking 애플리케이션 구현

 

 

책을 통해 공부하면서 개인적으로 정리한 내용입니다.

 

 


 

✅ 개요

 

웹플럭스(WebFlux)는 리액티브 프로그래밍을 기반으로 비동기/논블로킹을 구현할 수 있게 함으로써 

대규모 트래픽이 발생할 수 있는 애플리케이션에서 성능 향상을 돕는다.

 

우리는 WebFlux를 공부하기 위해 가장 기초적인 개념을 공부해야한다.

 

리액티브란 무엇인지, 리액티브 스트림의 구성요소들에 대해 알아보자!

 

 

✅  Reactive

영어 자체를 해석하면  반응을 하는, 반응을 보이는 이란 의미이다.

 

✍️ Reactive System

리액티브 시스템  클라이언트의 요청에 반응을 잘 하는 시스템을 의미하게 된다.

 

Non-Blocking (제어권을 그대로 본인이 갖고 있는것)의 개념과 아주 밀접하다.

요청한 스레드가 차단되지 않게 하여, 클라이언트에게 즉각적으로 반응할수 있게 구성된 시스템이다. 

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 

 

황정식 - 스프링으로 시작하는 리액티브 프로그래밍

 

스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고

스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는

product.kyobobook.co.kr

 

https://bgpark.tistory.com/160