WebFlux 알기

Rosa·2021년 12월 11일
0

WebFlux 설명에 앞서, 동기와 비동기 그리고 블럭과 넌블럭에 대해서 한 번 짚고 가자.

Blocking / Non-blocking

  • Block : 호출된 함수가 자신이 할 일을 모두 마칠 때까지 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 것
  • Non-block : 호출된 함수가 자신이 할 일을 채 마치지 않았더라고 바로 제어권을 건네주어 호출한 함수가 다른 일을 진행할 수 있도록 하는 것

Sync / Async

  • Sync: 호출된 함수의 수행 결과 및 종료를 호출한 함수가 신경쓰는 것
  • Async: 호출된 함수의 수행 결과 및 종료를 호출된 함수 혼자 직접 신경 쓰고 처리하는 것

출처 : https://musma.github.io/2019/04/17/blocking-and-synchronous.html


Spring WebFlux

  • Spring5 새로 추가된 모듈
  • 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 돕는 모듈
  • non-blocking 에 reactive stream 지원

what is reactive?

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

what is reactive programming?

  • 비동기 데이터 Stream으로 Non-Blocking 어플리케이션을 구현하는 프로그래밍
  • Stream으로 프로그래밍 한다는 건
    - 함수형 처리가 가능해진다는 것
    • filter, map 등을 사용해 여러 형태로 편하게 사용 가능

what is reactive streams?

Non-bloking back presseure 를 이용한 비동기 데이터 처리의 표준.

what is back pressure?

푸시 방식: 기존 옵저버 패턴에서는 발행자가 구독자에게 밀어 넣는 방식으로 데이터 전달.
풀 방식: 백 프레져는 구독자가 가져갈 수 있는 만큼 발행자가에게 요청하고, 발행자는 그 만큼만 전달. 전달되는 모든 데이터의 크기는 구독자가 결정하으로써 oom 발생 방지.

출처 :


Spring MVC와 차이

Spring MVC 간략 설명

  • Java EE의 Servlet Spec 기반
  • Blocking + Sync

동작 흐름 (MVC & WebFlux)

  • MVC: request - Dispatcher Servlet - Handler Mapper - Controller - B/L - Controller - ViewResolver ...
  • WebFlux : request - HttpHandler - WebHandler - Handler Mapper / Handler Adapter - Controller - B/L - 이하 같음

출처: https://kimyhcj.tistory.com/343 [기억과 기록]


Spring WebFlux는 어떨 때 사용하는 게 좋은가

WebFlux는 아래와 같은 용도로 사용하기를 추천한다고 합니다. (by 토비)

Non-blocking - Async reactive 개발에 사용하는 것이 좋음
효율적으로 동작하는 고성능 웹어플리케이션 개발에 사용하는 것이 좋음
서비스간 호출이 많은 마이크로 서비스 아키텍처에 적합

출처: https://happymemoryies.tistory.com/24 [Happy Memory + ies (행복한 기억들의 기록)]

profile
기록, 메모

1개의 댓글

comment-user-thumbnail
2021년 12월 11일

MVC 와 WebFlux의 동작흐름에 관한 차이점이 구체적으로 설명되면 좋을것 같아요! 항상 재미있게 읽고 있습니다 :)

답글 달기