리액티브 프로그래밍 위한 모듈.
비동기 논블로킹 메시지 처리.
MVC는 기본적으로 블록킹, 동기 방식 사용.
기존 서블릿 기반 스프링은 Tomcat 사용.
MVC도 비동기 방식으로 처리할 수 있지만, 스펙에 의해 제한 있고 기본적으론 동기 방식으로 동작.
Servlet API와 Blocking I/O 모델 기반.
Spring Webflux는 Netty 서버를 디폴트로 사용.
Netty는 채널에서 발생하는 이벤트를 EventLoop가 처리.
비동기 논블록킹 방식으로 처리하기 때문에 리액티브 프로그래밍에 유용.
비동기 데이터베이스 드라이버, 비동기 HTTP Client, 비동기 메시징 서비스와 같은 외부 시스템과의 통합을 지원하여, 전체적인 비동기 시스템을 구축 용이.
Reactive Streams API와 Non-Blocking I/O 모델 기반.
MVC는 서블릿 기반 모델이고, Webflux는 Reactive Streams API 기반 모델.
요청-응답 기반 동기적 모델.
동기적 통신은 대규모 트래픽에서 성능 문제 발생 가능.
Thread Per Request 방식 사용하기 때문에 서버 자원 부족 문제 가능.
비동기적 웹 프로그래밍 모델
pub-sub 패턴 기반 -> 데이터 생성과 소비 시점 분리해 비동기적을 처리.
대규모 트래픽에도 효율적 리소스 관리, 적은 스레드로 높은 처리량 보장 가능.
Webflux는 서블릿과 Reactive Streams API 함께 사용해 비동기적 웹 프로그래밍 구현.
<참고>
https://mumomu.tistory.com/176
https://adjh54.tistory.com/232