[spring] webflux란? mono, flux란? :: 잡다한 프로그래밍
반응형

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

 

반응형

+ Recent posts