[RxJava2 #4] WebFlux(Spring WebFlux)란?
28 Jan 2019 | RxJava2 WebFluxWebFlux(Spring WebFlux)
1. WebFlux
- spring framework5에서 web-flux 모듈 새롭게 추가.
- web-flux는 server, client side에서 reactive 스타일의 application 개발을 도와주는 모듈이다.
- spring webflux는 비동기-논블록킹 리엑티브 개발을 할 수 있다.
- 효율적으로 동작하는 고성능 웹 어플리케이션을 개발할 수 있는 서비스간 호출이 많은 마이크로서비스 아키텍처에 적합한 프레임워크
web-flux
-
server side에서 web-flux는 2가지 방식으로 나누어진다.
- 어노테이션 기반
- 함수형 프로그래밍 기반
- 아래는 web-flux 모듈의 모델이다.
- 두방식 모두 reactive stream api, non bloking 방식으로 실행이 된다.
annotiation base model
- 어노테이션 기반은 기존에 @RestController 어노테이션을 이용해 개발한 방식.
functional programming model
- functional programming model은
HandlerFunction
과RouterFunction
나누어 구현한다.- HandlerFunction - http 요청을 ServerRequest 객체를 가져와 Mono 형태로 return 합니다.
- RouterFunction - http 요청에 대해서 HandlerFunctoin 에 routing 해줍니다. Mono 형태로 return.
2. 프로젝트에 적용된 webflux
Setup
- Java 8
- Spring Boot 2.1.0
- Reactive Web
- domain objects.
- A data repository.
- A handler (read: service).
- A router.
- RxJava2 0.1-RC42
- junit jupiter 5.1.1
소스구조
- 현재 프로젝트는 controller가 아닌, handler 패키지를 두어 transfer action을 수행한다.
-
그리고 webfluxrouter에서 router를 두어 server response를 수행하고 있다.
- router : 쉽게 생각하면 URL을 명시하는 RouterFunction과 URL과 로직을 연결하는 HandlerFunction 으로 나눌 수 있다.
Reference
- Spring framework 5 webflux 시작하기
- https://dzone.com/articles/spring-webflux-a-basic-crud-application-part-1