Spring MVC와 Spring Webflux의 차이점
- blocking / non-blocking
Spring MVC 공식문서에 따르면, Spring Webflux 대부분의 구조 및 설정은 Spring MVC와 동일하다고 명시되어 있다.
그러나 동시성 모델과 블로킹/쓰레드 기본 전략이 다르다.
MVC에서는 애플리케이션이 스레드를 차단(blocking)할 수 있다는 가정 하에 큰 스레드풀을 가지고 있고,
WebFlux에서는 스레드가 차단되지 않아(non-blocking) 적은 스레드풀을 사용하여 request들을 처리한다는 점이다.
더 자세히 살펴보자면 두 프레임워크의 차이는 다음과 같다.
- Spring MVC 어플리케이션은 Imperative logic(명령형 로직)이다.
명령형 프로그래밍은 작성하기도, 이해하기도, 디버깅하기도 쉽다. 지금까지 대부분 블로킹 방식을 사용했기 때문에, 사용할 수 있는 라이브러리가 가장 풍부하다.
- Spring WebFlux는 여러 리액티브 라이브러리를 지원한다.
다른 웹 스택과 같은 실행 환경을 제공하면서도, 다양한 서버(Netty, Tomcat, Jetty, Undertow 등)와 여러 리액티브 라이브러리(리액터, JxJava 등)를 지원하며, 두 가지 프로그래밍 모델(어노테이션을 선언한 컨트롤러와 엔드포인트)를 사용할 수 있다.
Webflux와 R2DBC
스프링 프레임워크 버전 5(Spring 5)는 리액티프 프로그래밍을 위한 WebFlux를 2017년 8월에 릴리즈했고, 2019년 12월에 리액티브 드라이브를 사용한 관계형 데이터베이스인 R2DBC를 릴리즈하였다.
Webflux + R2DBC 조합을 사용하게 되면
- 요청당 CPU를 조금 사용함
- 용청당 메모리가 조금 필요함
- 응답시간이 빠름
- 처리량도 높아짐
- JAR도 가벼워짐
- Spring Web MVC + JDBC
- 낮은 concurrency 에서는 Spring MVC + JDBC가 제일 최선의 선택이다.
- Spring Web MVC + R2DBC
- Spring WebFlux + JDBC
- WebFlux + JDBC는 동시성 처리에서 최악의 선택. (non-blocking 을 선택할 때 blocking component가 있는지 꼭 체크해야 된다.)
- Spring WebFlux + R2DBC
- 높은 concurrency에서 좋은 선택 (WebFlux라고 무조건 높은 concurrency를 보장하는건 아니다. R2DBC 덕분에 높은 concurrency 시에 빠른 응답 시간을 가진다
높은 동시성에선 Spring WebFlux + R2DBC
낮은 동시성에선 Spring MVC + JDBC
연관된 글 :
참고:
'개발 > Spring' 카테고리의 다른 글
[Springboot]Springboot 3.x에 Swagger (0) | 2024.06.06 |
---|---|
POJO(Plain Old Java Object) (0) | 2024.06.06 |
[Spring] 스웨거 (Swagger) v3 설정하기 (0) | 2023.04.30 |
[Spring] Swagger 어노테이션 (0) | 2023.04.28 |
[Spring] 빌더 패턴(Bulider Pattern) (0) | 2023.04.28 |