Spring MVC Vs. Spring WebFlux
✏️ Spring WebFlux 란
- Spring 5 부터 지원하는 Reactive web framework 이다.
- 비동기 Non-Blocking I/O 방식으로 적은 수의 쓰레드를 사용한다.
- Reactive Streams 의 구현체 중 하나인 Reactor 에 의존해 비동기 로직을 구성하고 Reactive Stream 을 제공한다.
- Reactor 기반이지만 RxJava 등 다른 Reactive 확장 라이브러리를 쉽게 적용할 수 있다.
- Spring WebFlux 자체의 학습 비용보다 Reactor 의 학습 비용이 더 많이 필요하다.
✏️ 차이점
✏️ 기술 스택 차이
- 아래 그림에서 보시다 시피 Reactor 하에 Reactive Stack 과 Sevlet Stack 이 포함되어있다.
- 즉, Spring MVC 에서도 Reactor 를 사용할 수 있기는 하다.
- 하지만 Sevlet Stack 자체가 Blocking I/O 방식이기 때문에 Reactor 를 사용하더라도 완벽하게 사용할 수 없다.
- Reactive Stack 은 관계형 데이터베이스를 지원하지 않았지만 2023.4 부터 공식적으로 지원하고있다.
- 기존엔 Spring Reactive Repositories 를 통해 NoSQL 만 사용 가능했다.
📍 Netty
- 비동기 Non-Blocking 을 지원하는 기본 서버 엔진
- Spring Reactive Stack 의 기본 서버 엔진이다.
- Spring WebFlux 는 Netty 외에 Jetty 나 Undertow 도 유연하게 사용이 가능하다.
✏️ 정리
- Blocking I/O 방식으로 처리하는데 한계가 있는 대량의 요청 트래픽이 발생하는 시스템에서는 WebFlux 가 유리하다.
- 하지만 System 의 요청 트래픽이 충분이 감당 가능한 수준이라면 Spring MVC 를 사용하는 것이 유리하다.
📍 Spring WebFlux 에 적합한 시스템
- MSA 를 채택했을 경우
- 스트리밍 또는 실시간 시스템
- 네트워크 접속이 느린 클라이언트의 요청 처리