필자는 Spring WebFlux, Spring MVC 도 모두 경험하였고, 각각의 특징 및 장단점 그리고 예제 코드를 아래와 같이 공유합니다.
TL;DR
Spring WebFlux 는 고도로 동시성에 요구되는 대규모 어플리케이션에 적합하고, 비동기 및 반응형 개발에 익숙하고 성능 및 확장성이 중요한 경우 유리합니다.
반면, Spring MVC 는 전통 웹 개발에 익숙하거나 기존 Spring MVC 기반 어플리케이션 유지 및 개선할 경우 적합합니다.
결론은 Reactive Programming 경험 및 대규모 어플리케이션을 목표로 하고 있다면 WebFlux 도입을 권장해볼 수는 있을 것 같습니다.
Spring WebFlux
Spring 5 부터 도입된 비동기 및 반응형 웹 프레임워크이며, 논블로킹 IO 모델을 기반으로 스레드 효율 향상시키고, 요청 처리량 및 응답시간 또한 개선 가능합니다.
예제 코드는 다음과 같습니다.
@RestController
public class WebFluxController {
@GetMapping("/hello")
public Mono<String> hello() {
return Mono.just("Hello, WebFlux!");
}
}
WebFlux 의 장점으로 높은 동시성 처리(논블로킹 모델), 경량성(제한된 수의 쓰레드로 많은 요청을 처리할 수 있음)이 있고, 단점으로는 러닝 커브(적응에 시간이 다소 필요), 작은 생태계(Spring MVC 와 비교하여 작은 생태계) 등이 있습니다.
Spring MVC
Spring Framework 의 일부이고, 전통적 서블릿 기반 웹 어플리케이션 개발 모델 지원합니다. 동기 방식으로 동작하고, 동시성이 낮고 IO 작업이 많지 않은 어플리케이션에 적합합니다.
예제 코드는 다음과 같습니다.
@Controller
public class MvcController {
@GetMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Hello, MVC!");
return "hello";
}
}
MVC 의 장점으로 성숙한 생태계(다양한 레퍼런스, 다양한 라이브러리 기능 제공), 개발 생산성(전통 웹 개발 모델) 등이 있고, 단점으로는 동시성 처리(많은 요청 처리 시 많은 쓰레드가 필요하므로 리소스 소비가 높을 수 있음), 높은 부하에 대한 확장성(많은 동기 쓰레드로 높은 부하에 대해 확장성이 제한될 수 있음) 등이 있습니다.
Spring WebFlux 가 반드시 Spring MVC 보다 나은 선택일까??
그렇지 않다. 다만 WebFlux 가 MVC 의 대안이 될 수는 있다.
Rossen Stoyanchev 가 QCon SF 2017 에서 발표한 내용에 의하면 다음과 같다.
Spring MVC와 Spring WebFlux 중에서 선택할 때 주의할 것을 제안합니다. 현재 애플리케이션이 spring-mvc에서 제대로 실행되고 있고 스택 변경을 요구하는 문제가 없다면 Stoyanchev는 spring-mvc를 유지해야 한다고 제안합니다. 그는 또한 애플리케이션 종속성에 대해 생각하는 것이 좋은 생각이라고 제안합니다. 애플리케이션에 차단 종속성이 있는 경우 Spring MVC 스택을 유지하는 것이 좋습니다
참고
- https://www.infoq.com/news/2017/12/servlet-reactive-stack/
- https://medium.com/deno-the-complete-reference/spring-boot-vs-spring-webflux-performance-comparison-for-hello-world-case-386da4e9c418
Spring Boot vs Spring Webflux: Performance comparison for hello world case
Find out the performance benefits brought in by reactive programming (webflux) when compared to Spring Boot for a simple hello world case.
medium.com
Servlet vs. Reactive: Choosing the Right Stack - Rossen Stoyanchev Presents at QCon SF 2017
Spring Framework 5 introduced a brand new reactive web framework spring-webflux, which resides alongside the traditional servlet based web framework spring-mvc.In his presentation, Rossen Stoyanchev talked about the differences in these two frameworks’ e
www.infoq.com
'개발 > Spring Boot' 카테고리의 다른 글
| Object Mapping 에 활용되는 라이브러리에 대해 알아보자. (0) | 2022.07.27 |
|---|---|
| [TroubleShooting] NoSuchBeanDefinitionException 해결법 (0) | 2021.03.01 |
| Persistence Context 란? (0) | 2021.01.12 |