songining
article thumbnail

Programming Models

1. Annotated Controller

  • Spring MVC에서 사용하던 방식을 WebFlux 에서 그대로 사용이 가능하다.
    • @RequestMapping, @PathVariable, @RestController, @GetMapping 등 

2. Functional Endpoints

  • Java8의 lambda style routing과 handling 방식 (함수형 모델)
  • RouterFunction: 어떤 핸들러가 요청을 처리할 지 결정
  • HandlerFunction: 바인딩 부터 HTTP 요청 응답처리
  • ServerRequest와 ServerResponse로 응답을 하며 서블릿 제약이 없고 리액티브 타입을 지원한다.

 

Spring WebFlux의 경우 다음과 같은 2개의 개발 방식을 지원한다.

익숙한 건 mvc에서 사용해왔던 어노테이션 방식이지만 함수형 프로그래밍에 맞는 router function을 사용하게 되면 어노테이션에 작성하던 처리 방식을 내부 함수 체인에 위임함으로써 처음부터 끝까지 요청 처리를 담당한다. 이로써 사이드 이펙트를 줄일 수 있다는 장점이 있다.  

 

참고

https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux-programming-models

https://haenny.tistory.com/316 

https://stackoverflow.com/questions/47092029/difference-between-controller-and-routerfunction-in-spring-5-webflux