Spring WebFlux를 탐구하며 정리하는 블로그 포스트입니다.
Spring WebFlux는 reactive web framework 이다. Spring MVC와는 다르게 servelet API를 필요로 하지 않는다. 그리고 완전히 비동기적으로, 그리고 non-blocking 방식으로 작동할 수 있다.
reactive 와 non-blocking 자체로 애플리케이션이 빨라진다기 보다는, 특정 경우에 성능을 향상시킬 수 있다고 보는 것이 적절하다. 대체적으로 WebFlux는 non-blocking 방식으로 더 많은 작업을 요하면서 처리시간을 소량 줄여준다.
reactive 와 non-blocking의 특장점은 적고 한정된 스레드와 메모리로 작동할 수 있게 한다는 것이다. 이로 인해 애플리케이션은 부하에 더 잘 대처할 수 있게 된다. 특히 레이턴시가 있는 환경에서 reactive stack의 장점은 극대화된다.
Adding both
spring-boot-starter-web
andspring-boot-starter-webflux
modules in your application results in Spring Boot auto-configuring Spring MVC, not WebFlux. This behavior has been chosen because many Spring developers addspring-boot-starter-webflux
to their Spring MVC application to use the reactive WebClient. You can still enforce your choice by setting the chosen application type toSpringApplication.setWebApplicationType(WebApplicationType.REACTIVE)
.- spring 공식 문서중 발췌
gradle 혹은 maven 의존성에 spring-boot-starter-web
과 spring-boot-starter-webflux
를 둘 다 세팅해주게 되면 기본적으로 WebFlux가 아니라 Spring MVC로 작동하게 된다. 그 이유는 많은 스프링 개발자들이 Spring MVC에서 WebClient 를 사용하기 위해 spring-boot-starter-webflux
의존성을 추가하기 때문이다. 이 기본 설정을 변경하기 위해서는 SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE)
설정을 해줌으로써 변경할 수 있다.