Spring WebFlux Framework

Sangwoo Park·2022년 9월 18일
0
post-thumbnail

Spring WebFlux를 탐구하며 정리하는 블로그 포스트입니다.

WebFlux Famework란?

Spring WebFlux는 reactive web framework 이다. Spring MVC와는 다르게 servelet API를 필요로 하지 않는다. 그리고 완전히 비동기적으로, 그리고 non-blocking 방식으로 작동할 수 있다.

WebFlux 가 만들어진 이유

  1. 더 적은 하드웨어 자원과 스레드, 스케일을 가지고도 동시성을 처리할 수 있는 non-blocking web stack이 필요해짐에 따라 만들어졌다.
  2. Java 8 이후로 lambda expression이 추가되면서 함수형 프로그래밍이 부상하고 non-blocking application 을 구현하기 좋은 함수형 web endpoint를 만들 수 있는 WebFlux가 출현하게 되었다.

WebFlux를 사용하면 성능이 향상될까?

reactive 와 non-blocking 자체로 애플리케이션이 빨라진다기 보다는, 특정 경우에 성능을 향상시킬 수 있다고 보는 것이 적절하다. 대체적으로 WebFlux는 non-blocking 방식으로 더 많은 작업을 요하면서 처리시간을 소량 줄여준다.
reactive 와 non-blocking의 특장점은 적고 한정된 스레드와 메모리로 작동할 수 있게 한다는 것이다. 이로 인해 애플리케이션은 부하에 더 잘 대처할 수 있게 된다. 특히 레이턴시가 있는 환경에서 reactive stack의 장점은 극대화된다.

Spring MVC와 Spring WebFlux를 동시에 사용하면?

Adding both spring-boot-starter-web and spring-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 add spring-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 to SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE).

- spring 공식 문서중 발췌

gradle 혹은 maven 의존성에 spring-boot-starter-webspring-boot-starter-webflux 를 둘 다 세팅해주게 되면 기본적으로 WebFlux가 아니라 Spring MVC로 작동하게 된다. 그 이유는 많은 스프링 개발자들이 Spring MVC에서 WebClient 를 사용하기 위해 spring-boot-starter-webflux 의존성을 추가하기 때문이다. 이 기본 설정을 변경하기 위해서는 SpringApplication.setWebApplicationType(WebApplicationType.REACTIVE) 설정을 해줌으로써 변경할 수 있다.

관련 지식

profile
going up

0개의 댓글