Skip to content

01. What is Spring Webflux

이진혁 edited this page May 25, 2021 · 1 revision

Spring Webflux(이하 웹플럭스)는 스프링 환경에서 보다 쉽게 리액티브 프로그래밍을 할 수 있도록 도와주는 프레임워크이다.
웹플럭스가 무엇이고, 왜 만들어졌는지를 알기 위해서는 Reactive Streams, Backpressure 등에 대한 개념을 이해해야 한다.

Spring Webflux(이하 웹플럭스)는 스프링 환경에서 보다 쉽게
Reactive Prgramming을 할 수 있도록 도와주는 프레임워크입니다.
웹플럭스는 Reactive Streams의 구현체 중 Project Reactor라는 라이브러리를 내부적으로 사용하며,
다른 Reactive Streams의 구현체로는 대표적으로 RxJava가 있습니다.


그럼 Reactive Programming(이하 리액티브 프로그래밍)은 무엇일까요?
리액티브 프로그래밍은 반응에 따라 실시간으로 처리하도록 하는 프로그래밍 패러다임입니다.
이 과정에서 asynchronous하고 non-blocking한 프로그래밍 기법이 사용됩니다.

리액티브 프로그래밍을 하게 되면 모든 데이터를 데이터 스트림에 담고
데이터의 처리를 데이터 스트림의 흐름으로 표현하게 됩니다.
그 사이에 여러 변환과 호출, 추가, 삭제가 이루어지면서 최종적으로 complete 또는 error로 마무리하게 됩니다.
여기서 말하는 데이터 스트림이란 Reactive Streams에서 언급하는 Publisher에 해당하며
Project Reactor에서는 FluxMono로 구현되어 있습니다.


그러면 Reactive Streams는 무엇일까요?
Reactive StreamsBackpressure의 동작을 명세화한 인터페이스로 Backpressure의 동작 원리는 다음과 같습니다.

Backpressure 기본 동작 원리

  1. Publishersubscribe()하여 Subscriber에게 구독을 요청
  2. Subscriber는 처음 구독 요청을 받았을 때 onSubsscribe()를 호출하고 SubscriberSubscription을 저장
    그리고 Subscriptionrequest(N)을 요청해 Publisher에게 N개 데이터 요청
  3. Publisher는 N만큼 onNext()를 통해 데이터를 Subscriber에게 전달 (N 개수만큼 onNext()가 호출됨)
  4. Subscriber는 데이터를 처리하다 특정 조건시 Subscriptionrequest(N)을 통해 데이터 추가 요청
  5. 이를 반복하다 Publisher가 더 이상 응답할 데이터가 없으면 onNext() 대신 종료 시그널을 보내는데
    에러가 발생하지 않고 정상적으로 종료되었다면 onComplete(), 만약 에러가 발생하였다면 onError() 시그널을 보냄

이 작업을 통틀어서 Backpressure라고 하는데 한글로 직역하면 배압조절이라고 할 수 있습니다.
이런 Backpressure의 동작을 직접 구현하여 사용할 수도 있지만,
웹플럭스를 사용하면 자동으로 배압조절이 되는 환경에서 개발할 수 있게 됩니다.

리액티브 스트림의 자세한 명세는 다음 사이트에서 쉽게 찾아보실 수 있습니다.

Clone this wiki locally