[스프링 웹플럭스] 1.1.1 왜 새로운 웹 프레임워크인가?

https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-new-framework

적은 수의 쓰레드로 동시성(concurrency)을 처리하고 더 적은 하드웨어 리소스로도 확장성(scale)을 꽤할 수 있는 논-블럭킹 웹 스택이 필요하다. 서블릿 3.1은 논-블럭킹 I/O API를 제공했다. 하지만 그것을 사용하면 동기적이거나 (Filter, Servlet) 블럭킹적인(getParameter, getPart) 서블릿 API와는 멀어진다. 이것이 다양한 논-블럭킹 런타임을 아우르는 새로운 공통 API를 만들게된 주요한 동기다. 이점은 네티 같은 서버는 매우 잘 만들어진 비동기, 논-블럭킹 영역이 있었기 때문에 중요했다.

반면 또 다른 답변으로는 펑셔널 프로그래밍을 들 수 있다. 이것은 마치 자바 5에서 애노테이션을 추가해 애노테이션을 붙인 REST 컨트롤러나 단위 테스트 같은 기회를 만들어낸 것처럼, 자바 8에서 람다 표현식으로 자바에 펑셔널 API라는 가능성을 만들어낸 것이다. 이는 논-블럭킹 애플리케이션과 컨티뉴에이션 스타일 API의 친구 격이다. CPS (Continuation-passing style)는 비동기 적인 로직을 선언적으로 조합할 수 있게 해주는 CompletableFuture와 ReactiveX로 인해 유명해졌다. 자바 8 프로그래밍 모델은 스프링 웹플러스가 펑셔널 웹 엔드포인트를 애노테이션 기반 컨트롤러와 함께 제공할 수 있게 해준다.

[스프링 웹플럭스] 1.1 소개

https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-introduction

1.1 소개

기존의 스프링 웹 MVC는 서블릿 API와 서블릿 컨테이너 기반으로 작성했지만 리액티브 스택의 웹 프레임워크에 해당하는 스프링 웹플럭스는 버전 5 후반에 추가했다. 완전히 논-블럭킹이며 리액티브 스트림의 백 프레셔를 지원하고 네티, 언더토우 그리고 서블릿 3.1+ 컨테이너에서 사용할 수 있다.

두 소스 모델은 spring-webmvc와 spring-webflux에 동시에 나란히 스프링 프레임워크안에 존재한다. 각 모듈은 필수가 아니다. 애플리케이션은 둘 중 하나를 사용하거나, 혹은 둘 다 사용할 수도 있다. 가령, 스프링 MVC 컨트롤러를 리액티브 WebClient랑 같이 사용할 수 있다.

웹 프레임워크에 더해 스프링 웹플러스는 HTTP 요청을 수행할  WebClient를 제공한다. 웹 엔드포인트 테스팅 용으로 WebTestClient도 제공하며 웹소켓용 리액티브 클라이언트와 서버도 제공한다.