Reactive 스타일 어플리케이션 개발을 위한 모듈
Spring WebFlux는 Reactive 스타일 어플리케이션 개발을 위해 Spring 5에서 새롭게 추가된 모듈이다.
비동기&Non-blocking을 지원하는 웹 스텍의 필요성 때문에 개발되었다. Spring MVC도 3.1부터 비동기방식을 지원하는 기능이 추가되었지만 Blocking 방식의 API들이 있었고 또한 Backpresure를 지원하지 않기때문에 완전한 Reactive 프로그래밍 방식이라고 보기 힘들었다.
Spring WebFlux는 Spring MVC의 문제점을 보완하고 더 완벽한 Reactive 프로그래밍을 하기 위해서 개발되었다.
하지만 Spring WebFlux가 기존의 Spring MVC을 대체하는 개념은 아니며, 장단점이 있으므로 웹의 용도에 맞게 사용하면 된다. 아래에서 WebFlux를 사용하면 좋은 상황과 이유 특징들을 살펴보자.
1) Spring MVC의 스레드 문제 해결 :
2) 적은 양의 스레드로 동시성 처리가능
3) 비동기&Non-blocking 방식으로 한정된 자원을 효율적으로 사용 가능.
1) Non-Blocking IO : WebFlux는 Non-Blocking을 사용하여 최소한의 스레드로 효율적인 운영을 할수가 있다. (Non-Blocking하게 동작하기 때문에 다른 함수를 호출해놓고 내 작업을 진행하는것이 가능.)
2) Funtional Endpoint : 람다 기반의 새로운 Controller의 구현 방법인 Funtional Endpoint를 사용가능하다. request/response를 APP에서 전부 제어 가능.
3) Netty 같은 비동기&Non-blocking, 이벤트기반 서버 사용가능.
초록색 : WebFlux
빨간색 : MVC
https://ckddn9496.tistory.com/158
https://heeyeah.github.io/spring/2020-02-29-web-flux/
http://gunsdevlog.blogspot.com/2020/09/reactive-streams-reactor-webflux.html