1. WebFlux란?
Spring Framwork5에서 새롭게 추가된 모듈이다. webflux는 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이라한다. 즉 Reactive Programming방식의 스프링이다.
Reactive Programming(반응 형 프로그래밍)은 비동기(Asynchronous)식 및 이벤트 기반(event-driven)의 Non Blocking이다.
웹 플럭스는 기존 MVC처럼 이용할 수 있고, 기본으로 Netty를 제공한다고 함.
WebFlux는 아래와 같은 용도로 사용하는 것을 추천 한다고 합니다.
- 비동기 - 논블록킹 리액티브 개발에 사용
- 효율적으로 동작하는 고성능 웹어플리케이션 개발
- 서비스간 호출이 많은 마이크로서비스 아키텍처에 적합
기존 MVC VS 웹 플럭스
기존 MVC 방법
Spring MVC의 경우 어플리케이션이 실행되면서 Thread Pool을 만들어 놓는다.
요청이 들어오면 그 요청을 Queue에 쌓고 이것을 Thread Pool의 Thread들이 요청을 가져가 처리한다.
하지만 많은 요청이 들어와 Pool Size를 초과하여 Queue에 계속 요청이 쌓이는 경우가 발생할 수 있다.
웹 플럭스
웹 플럭스의 2가지 방식
1. 기존 에노테이션 방식
@Controller
...{
// 애너테이션 기반 라우팅
@GetMapping("/hello")
@ResponseBody
public Mono<String> getHello() {
return demoService.getHello();
}
}
2. 함수형 프로그래밍 방식
@Component
// 함수 기반 라우팅
@Bean
public RouterFunction<ServerResponse> routes(DemoHandler demoHandler) {
return RouterFunctions
.route(RequestPredicates.GET("/hello"), demoHandler::getHello);
}
두가지 중에 편한 방법을 통해서 사용해도 무방하다.
웹 플럭스의 반환형
아래와 같이 MVC에서 일반적으로 사용하던 Plain Object를 사용할 수 없고 반드시 Publisher Object로 감싸서 반환해야 한다. 이 때 Publisher는 Reactive Stream Interface중 하나인데 (Processor, Publisher, Subscriber, Subscription) Reactive Stream Interface에 관한 설명은 brunch.co.kr/@springboot/153 참고하기 바란다.
2. Mono & Flux란?
Publisher의 실제 구현체 즉 웹 플럭스에서 반환하는 형식이라고 생각해도 무방.
Flux (0-N개의 데이터)
Flux는 Publisher의 구현체로서, 0-N개의 데이터를 발행(전달, 방출)할 수 있다. 하나의 데이터를 전달할때마다 onNex 이벤트를 발생시키고, 모든 데이터 전달이 완료되면 onComplete 이벤트가 발생하며 오류가 발생할 경우 onError이벤트가 발생한다.
Mono(0-1개의 데이터)
Publisher 인터페이스의 구현체, Flux와 달리 0-1개의 데이터를 처리한다.
MVC VS WEBFLUX
m.blog.naver.com/joebak/222008524688
'프로그래밍 > 시큐어코딩' 카테고리의 다른 글
[Spring] @Async와 completablefuture란? (0) | 2020.07.27 |
---|---|
[디자인 패턴] 템플릿 메소드 패턴 (0) | 2020.07.15 |
[디자인 패턴] 빌더 패턴 (0) | 2020.07.15 |
[디자인 패턴] 퍼사드 패턴 (0) | 2020.07.14 |
[디자인 패턴] 어댑터 패턴 (0) | 2020.07.14 |