Post

Webflux에 대해

프로젝트에서 OAuth2를 사용해 로그인을 구현하다보니 알지 못했던 RestTemplate과 WebClient에 접했다.

이에 대해 공부하다보니 스프링 부트에서 지원하는 Webflux에 대해 알게 되었고 공부한 것을 정리한 글이다.

Webflux

  • Spring Framework 5부터 지원하는 반응형 웹 애플리케이션을 구축하기 위한 프레임워크
  • Webflux는 Reactor 라이브러리를 기반으로 하는 반응형 프로그래밍 프레임워크로, 비동기(Asynchronous) 처리 및 Non-Blocking 처리를 지원한다.

  • 비동기 및 이벤트 기반 프로그래밍을 통해 높은 확장성과 성능을 제공한다.

반응형 프로그래밍(Reactive Programming)

  • 이벤트 중심으로, Thread 대신 데이터 스트림에 초점을 맞춤으로써, 대량의 동시 요청을 처리해야하는 애플리케이션의 확장성과 응답성을 향상 시키는데 효과적이며, 적은 리소스로 많은 동시 연결을 처리할 수 있다.
  • 데이터를 비동기적으로 처리하기 위한 반응형 유형인 Mono와 Flux를 제공
  • Publisher-Subscriber 패턴을 중심으로 동작
분류명령형 프로그래밍반응형 프로그래밍
처리 방식명령어를 순서대로 실행데이터 스트림을 처리하며, 데이터 변화에 반응
동기/비동기대부분 동기적대부분 비동기적
코드 구성명령형 코드선언형 코드
사용 예시계산기, 루프 등이벤트 처리, UI 업데이트 등
프로그래밍 종류Spring MVCWebflux

Publisher-Subscriber 패턴 : 반응형 스트림

  • 비동기 및 이벤트 기반 응용 프로그램을 위한 스트림 처리 기술을 의미. Publisher가 Subscriber에게 데이터를 제공하는 것
  • 스트림을 이용해 Publisher는 데이터를 생성하고 Subscriber는 해당 데이터를 처리
객체설명
Publisher : 발행자데이터를 생성하고, Subscriber에게 전송합니다.
Subscriber : 구독자Publisher로부터 데이터를 받아들이고, 소비합니다.
Subscription : 구독Subscriber가 처리할 데이터의 양을 정의합니다.

좀 더 자세히 살펴보기

Mono

  • Publisher 중 하나로 0개 또는 하나의 데이터 항목 생성하고 결과가 생성되면 스트림을 종료

Flux

  • Publisher 중 하나로 여러 개의 데이터 항목을 생성

Mono와 Flux에 대해서는 기회가 되면 더 자세히 알아보자.

비동기 및 Non-blocking

  • 스레드를 효율적으로 사용 가능
  • Synchronous 및 Blocking을 사용하는 기존의 WebMVC보다 높은 처리량 제공

함수형 프로그래밍

  • 람다와 스트림을 제공함

장점

  • 높은 성능과 효율성
  • 효율적인 자원 사용 가능

단점

  • 학습 곡선이 높을 수 있음
  • 오류 처리 및 디버깅이 복잡

vs Spring MVC

적용 사례

  • 채팅 또는 메시징 플랫폼과 같은 실시간 애플리케이션
  • 마이크로서비스 아키텍처

정리

Webflux는 non-blocking 방식을 지원하며 기존의 MVC보다 높은 확장성과 성능을 제공한다.

OAuth2.0을 구현하다보니 HTTP 클라이언트 중 RestTemplate이나 WebClient로 많이들 구현한 것을 보았다.

하지만 스프링 프레임워크에서 WebClient를 사용해 구현하는 것을 권장하고 있으니 WebClient를 사용하자.

분류RestTemplateWebClient
I/O 모델블로킹논블로킹
동시성낮음높음
성능동기식비동기식
응답 타입ResponseEntityMono, Flux
클라이언트 측 부하 분산지원 안 함지원
스트리밍지원 안 함지원

출처)

[Java] Spring Boot - WebF.. : 네이버블로그 (naver.com)

[Java] Spring Boot Webflux 이해하기 -1 : 흐름 및 주요 특징 이해 — Contributor9 (tistory.com)

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