Home WebFlux
Post
Cancel

WebFlux

❓ WebFlux

Client와 Server에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈

  • Spring5에서 reactive stack을 지원하는 web container framework


🔎 WebFlux 특징

Non-Blocking IO

  • 최소한의 리소스로 효율적인 운영
  • Singler worker thread가 event loop 처리

Event loop는 코어 개수만큼 존재

Functional Endpoints

  • Lambda 기반 functional programming model
  • Request router가 handler로 request routing
  • Handler method에 @RequestMapping 선언부 없이 request, response를 app에서 전부 제어


📊 Spring MVC and WebFlux Comparison

image https://docs.spring.io

MVC

  • 요청 당 스레드를 따로 할당받아 blocking 처리
  • 요청이 많을 수록 스레드 간 context switching 비용 증가
  • 서버의 하드웨어 성능에 따라 원활한 서버 운영 가능

WebFlux

  • Event loop model로 요청을 Non blocking 처리
  • 적은 스레드에서 여러 작업 처리
  • 스레드 간 context switching 비용 감소
  • 요청이 적을 때 굳이 WebFlux를 사용하지 않아도 🙄..


📋 WebFlux 프로젝트 구성

  • Filter
  • Handler
  • WebClient
  • WebFluxConfigurer


🎈 Handler

HttpHandler

  • Annotated Controller (기존의 MVC와 동일한 형식)
    • Annotations를 통해 선언하며 콜백 받는다.

WebHandler

  • Functional Endpoint
    • 처음부터 끝까지 요청 처리를 담당 및 제어
  • DispatcherHandler가 각 컴포넌트 호출


🎠 Router

Routing Function

  • Handler Function에 요청들을 routing 해주는 역할
  • @RequestMapping 역할과 유사
    • @RequestMapping은 data만 전달
    • Router Function은 Mono<Handler Function>로 함수 전달


🔊 Filter

  • WebHandler API에 적용
  • 요청 처리 전에 선행 로직 실행 가능
  • API Gatway 역할을 하는 app에서 자주 사용


📱 WebClient

Non-blocking Http Client Module

  • HTTP Request를 수행하는 client


📝 R2DBC

  • JDBC의 Blocking API를 대체하는 Nonblocking API Stack
  • Spring 5.3.2+

JDBC를 사용한다면, blocking code가 격리되도록 하는 것이 중요


📍 Handling Errors

WebExceptionHandler

  • WebFilter / WebHandler chain에서 발생한 Exception 처리


This post is licensed under CC BY 4.0 by the author.