필자는 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 스택을 유지하는 것이 좋습니다

 

 

참고

 

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

 

 

 

 

+ Recent posts