개발자가 되고 싶은 사람

[RxJava2 #4] WebFlux(Spring WebFlux)란?

|

WebFlux(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은 HandlerFunctionRouterFunction 나누어 구현한다.
    • 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 으로 나눌 수 있다.
src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │   └── doublechain
│   │   │   ├── RxJavaServiceApplication.java
│   │   │   ├── config
    ├── DatabaseConfig.java (비동기 rxjava-jdbc config)
    └── WebFluxRouter.java (server response config)
│   │   │   ├── service
│   │   │   │   └── transfer
│   │   │   │   ├── TransferHistoryService.java
│   │   │   │   ├── domain
│   │   │   │   │   ├── TransferHistory.java
│   │   │   │   │   └── TransferHistoryDTO.java
│   │   │   │   └── handler
│   │   │   │   └── TransferHistoryHandler.java
│   │   │   └── util
│   │   │   └── CommonUtil.java
│   │   └── resources
│   │   └── application.yml
│   └── test
│   └── java
│   └── com
│   └── doublechain
│   └── test
│   └── ServiceTest.java

Reference

  1. Spring framework 5 webflux 시작하기
  2. https://dzone.com/articles/spring-webflux-a-basic-crud-application-part-1

Comments