본문 바로가기
웹개발/spring && springboot

스프링 WebFlux

by 지구별 여행자 임탱 2024. 4. 3.
728x90

스프링 WebFlux는 스프링 5에서 새롭게 도입된 리액티브 웹 프레임워크입니다. 이는 비동기적이고 논블로킹 방식의 웹 애플리케이션 개발을 지원하며, 리액티브 프로그래밍 패러다임을 따릅니다. WebFlux는 높은 처리량과 확장성을 필요로 하는 애플리케이션 개발에 적합합니다.

 

WebFlux의 주요 특징과 이점
  * 반응형 프로그래밍(Reactive Programming): 데이터 흐름과 전달에 관한 변경사항을 자동으로 전파하는 프로그래밍 모델을 지원합니다. 
  * Reactor 라이브러리 사용: WebFlux는 Reactor 라이브러리를 기반으로 하며, 이는 리액티브 프로그래밍을 위한 자바 8의 CompletableFuture와 유사한 API를 제공합니다.
  * Netty 서버 지원: 기본적으로 Netty를 사용하는 비동기 네트워크 프레임워크를 사용하여 높은 성능을 제공합니다. 
  * 비동기 및 논블로킹 요청 처리: WebFlux는 비동기 방식으로 요청을 처리하며, 이는 더 적은 스레드와 자원을 사용하여 더 많은 요청을 처리할 수 있게 합니다.

 

WebFlux 사용 시 고려사항
  * Spring MVC와의 차이: 전통적인 Spring MVC는 하나의 요청에 하나의 스레드를 사용하는 동기적인 처리 방식을 사용합니다. 반면, WebFlux는 리액티브 프로그래밍을 통해 비동기적이고 논블로킹 방식으로 요청을 처리합니다. 이는 고성능 웹 애플리케이션 개발에 유리합니다. 
  * 적용 시나리오: 비동기적이고 논블로킹 방식의 개발이 필요하거나, 서비스 간 호출이 많은 마이크로서비스 아키텍처에 적합합니다.

 

필수 지식 및 기술
  * 리액티브 프로그래밍 이해: 스프링 WebFlux는 리액티브 프로그래밍 패러다임을 기반으로 하므로, 리액티브 프로그래밍의 기본 개념과 원리를 이해하는 것이 중요합니다. 
  * Reactor 라이브러리: 스프링 WebFlux는 Reactor 라이브러리를 사용합니다. Mono와 Flux 같은 Reactor의 핵심 타입에 익숙해지는 것이 필요합니다.
  * 함수형 프로그래밍 스타일: WebFlux는 함수형 프로그래밍 스타일을 적극적으로 활용합니다. 람다 표현식과 함수형 인터페이스에 대한 이해가 필요합니다. 
  * Netty와의 통합: 스프링 WebFlux는 기본적으로 Netty, 비동기 네트워킹 프레임워크를 사용합니다. Netty의 기본적인 작동 원리를 이해하는 것이 유용합니다.
  * 스프링 부트와의 통합: 스프링 WebFlux를 스프링 부트와 함께 사용하는 방법을 알아야 합니다. spring-boot-starter-webflux 의존성을 프로젝트에 추가하는 방법을 포함합니다.

 

핵심 컴포넌트
  * Mono와 Flux: Reactor의 핵심 타입으로, 비동기 데이터 스트림을 처리합니다. Mono는 0 또는 1개의 결과를, Flux는 0개 이상의 결과를 처리할 수 있습니다.