• Home
  • About
    • YUN MIN JUNG photo

      YUN MIN JUNG

      If you don't know where you are going, just go.

    • Learn More
    • LinkedIn
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Spring WebFlux

18 Apr 2021

Reading time ~2 minutes

Spring WebFlux

목차

  1. WebFlux 개념
  2. WebFlux 도입 배경
  3. WebFlux 특성(reative, non-blocking, async)
  4. Spring MVC와 WebFlux 차이
  5. WebFlux 구조/원리
  6. WebFlux 적용 예제

개요

면접 질문에 WebFlux에 관한 기술 질문들이 많이 나왔었다.
실제 실무에서 사용해보지 못한 기술이였기 때문에, 실제 면접 본 회사에서 적용하려고 하는 것 같다.
WebFlux에 대해서 공부를 하며 적용해보려고 한다.


상세

1. WebFlux 개념

Spring WebFlux는 Spring FrameWork 5에서 새로 추가된 모듈이다.
WebFlux는 client, server에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이다.
WebFlux는 reactive-stack web framework이며 non-blocking에 reactive stream을 지원합니다.
WebFlux에 대해 이해를 하려면 reactive, non-blocking, async에 대해 이해를 하여야 한다.
이 부분은 밑에서 다루도록 하겠다.

2. WebFlux 도입 배경

WebFlux를 만든 이유는 무엇인가?

  1. 적은 수의 쓰레드로 동시성을 처리하고 non-blocking/async 방식으로 자원을 효율적으로 사용
  2. 함수형 프로그래밍. 함수형 AP를 위한 Lamda표현식 추가(non-blocking API 토대)

3. WebFlux 특성(reative, non-blocking, async)

reactive 정의

Reactive Streams is a standard for asynchronous data processing in a streaming fashion with non-blocking back pressure.

논블로킹(Non-blocking) 백 프레셔(back pressure)를 이용한 비동기 데이터 처리의 표준

‘reactive’라는 용어는 I/O 이벤트에 반응하는 네트워크 컴포넌트, 마우스 이벤트에 반응하는 UI 컨트롤러 등과 같은 변화에 대한 반응을 중심으로 구축된 프로그래밍 모델을 나타낸다.
따라서 non-blocking은 blocking과 다르게 작업이 완료되거나 데이터를 사용가능한 상태가 되면 알림에 반응하는 방식이 있으므로 reactive하다고 말 할 수 있다.

non-blocking(논-블럭킹) vs blocking(블록킹) 차이

제어권 반환
제어할 수 없는 대상의 처리 방법
블록킹(blocking)
특정 작업이 실행되는 동안, 끝날때까지 제어권을 가지고 있어 다른 작업은 진행하지 못하고 대기해야만 하는 방식
논블록킹(non-blocking)
특정 작업이 실행되는 중이라도, 바로 리턴 해서 제어권을 주어 상관없이 다른 작업을 수행 가능한 방식

async(비동기) vs sync(동기) 차이

시간
동기(Synchronous)
호출하고 호출된 작업이 완료 된 후의 리턴을 기다리거나, 호출된 함수가 계속해서 작업완료 여부를 신경 씀 비동기(Asynchronous)
함수를 호출할 때 callback 함수를 같이 전달해 작업이 완료되면 callback을 실행 작업완료를 callback함수가 신경 씀

Spring MVC는 Blocking + Sync 방식.
Spring WebFlux는 Non-Blocking + Async 방식.

Spring MVC vs WebFlux 흐름

Spring MVC vs WebFlux 구조

WebFlux 적용 방식 2가지

  1. 어노테이션 방식
  2. 함수형 방식

Spring boot에서 WebFlux 이용하려면 아래 denpendency를 추가하여야합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
 </dependency>

…..추가 예정 …….


정리


참고

https://docs.spring.io/spring-framework/docs/5.0.0.M5/spring-framework-reference/html/web-reactive.html https://www.baeldung.com/spring-webflux
https://engineering.linecorp.com/ko/blog/reactive-streams-with-armeria-1/
https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html#webflux



etc Share Tweet +1