Spring WebFlux 란?

우아한 기술 블로그 혹은 다른 테크 블로그들을 보면 Spring WebFlux 란 단어를 자주 접할수있었다.

그래서 과연 무엇이고 어떤 점 때문에 각 프로젝트에 사용되는지에 대해 알아보았다.

Spring WebFlux

스프링 5에서 새롭게 추가된 모듈로서 reactive 스타일로 애플리케이션을 만들수있도록 도와준다.

비동기 Non-Blocking , 스레드는 코어 수 * 2 만큼 사용 이라는 특징을 가지고 있다.

주로 MSA, 고성능 웹애플리케이션에 주로 사용된다.

Flux, Mono

Mono : 0~1개 데이터

Flux : 0개 이상

Annotated Controller

MVC 와 유사하게 어노테이션을 통해 프로그래밍 하는 방식 ex. @Controller, @RequestMapping

Spring-Web 모듈 그대로 사용 가능하다.

Functional Endpoints

람다 표현식 같이 함수형 프로그래밍을 지향하는 프로그래밍 방식

어노테이션을 인식해 콜백하는 방식이 아닌 처음부터 끝까지 애플리케이션이 요청을 게속 담당한다. 고로 Annotated Controller 보다는 속도면에서 앞선다고 한다.

내부 로직에 Hard 한 연산들이 많다면 MVC 와 크게 성능에서 차이가 나지 않을수있다.

그리고 리액티브 를 지원하는 디비를 사용 중인가도 WebFlux 를 도입하기 전에 생각해야할 점이다.

그리고 일정 요청 트래픽 이하는 MVC 와 성능에서 큰 차이가 없다. 고로 MSA, 처리량이 일정 수준이상 규모의 고성능을 필요로 하는 웹 애플리케이션에서 주로 사용되는 이유이다.

MVC 보다 고려해야할 점도 많고 러닝커브도 높기에 위와 같은 이유가 아니라면 MVC 를 사용하는것을 스프링에서도 권장한다.

고려해야할 점에서는 일단 리액티브 라이브러리, 리액티브를 지원하는 DB, Mono, Flux 객체 사용

동기적 코드 모두 배제 등 이 있다.

Last updated