개발/SPRING

[Spring Webflux] 웹플럭스에 대한 간단 정리

지잉지잉 2023. 2. 5. 22:31

Spring MVC와 Spring Webflux

  • Spring MVC는 Blocking / 동기방식으로 동작한다.
    • 요청이 발생할 경우, 스레드풀 내 스레드 하나를 점유해 요청을 처리한다.
  • Spring Webflux는 Non-Blocking / 비동기방식으로 동작한다.
    • 요청이 발생할 경우, 이벤트 루프가 돌아서 해당 이벤트를 처리하는 핸들러에게 처리를 위임하고, 처리가 완료되면 callback 메소드 등을 통해 응답을 반환한다.

Spring Webflux를 사용하는 이유

  • Spring MVC에 비해 적은 스레드를 이용하여 동시성을 핸들링한다.
  • 즉 서버 자원을 낭비하지 않고 효율적으로 동작하는 것을 목적으로 사용한다.
    • 보통 Spring MVC 의 Tomcat 서버에서는 스레드 수가 Default 200개이다. 서버에 요청이 많지 않을 경우, 노는 스레드가 생기고, 그만큼 자원이 낭비된다.

Reactive

Reactive Stream

  • Spring Webflux 에서 사용하는 Reactor는 Reactive Stream의 구현체이다.
    • 논블로킹과 백프레셔를 이용한 비동기 데이터 처리의 표준

https://engineering.linecorop.com/ko/blog/reactive-streams-with-armeria-1

  1. Subscriber -> Publisher: 구독 요청
  2. Publisher -> Subscriber: Subscription 정보 전달
  3. Subscriber -> Subscription -> Publisher: Subscription의 request 함수를 통해 Publisher에게 요청
  4. Publisher -> Subscription -> Subscriber: Subscription의 시그널(onNext, onComplete, onError 등)을 응답

Mono와 Flux

  • Flux와 Mono는 Reactive Stream의 구현체인 Reactor 객체이며, 차이점은 발행하는 데이터 갯수이다.
    • Flux: 0 ~ N 개의 데이터 전달
    • Mono: 0 ~ 1 개의 데이터 전달