기술 지식 쌓아가기 📚/Backend 🍔

[Spring] WebFlux: 비동기와 반응형 프로그래밍의 새로운 장 🍃

코양이🤍 2024. 9. 27. 13:46

오늘은 Spring WebFlux에 대해 알아보려고 합니다.

최근에는 비동기 및 반응형 프로그래밍이 많이 주목받고 있는데, WebFlux는 이러한 흐름을 지원하는 Spring의 프레임워크입니다.

그럼 WebFlux의 기본 개념과 특징을 살펴보겠습니다.


⭐ WebFlux란 무엇인가?

Spring WebFlux는 비동기 및 반응형 애플리케이션을 구축하기 위해 설계된 모듈입니다.

전통적인 Spring MVC가 서블릿 API를 기반으로 동작하는 반면, WebFlux는 비동기 스트림을 처리할 수 있는 Reactive Streams API를 사용합니다.

이를 통해 높은 성능과 확장성을 제공할 수 있습니다.

 

⭐ 비동기 프로그래밍의 필요성

전통적인 웹 애플리케이션에서는 요청이 들어오면 해당 요청을 처리하는 동안 서버가 다른 요청을 기다려야 합니다.

이는 높은 트래픽 상황에서 서버의 성능 저하를 초래할 수 있습니다.

반면, 비동기 프로그래밍을 활용하면 요청을 처리하는 동안 다른 작업을 수행할 수 있어 서버 자원을 보다 효율적으로 사용할 수 있습니다.

 

⭐ WebFlux의 주요 특징

✅ 반응형 프로그래밍

WebFlux는 비동기 프로그래밍을 위한 반응형 프로그래밍 모델을 채택하고 있습니다.

이를 통해 데이터 스트림을 쉽게 처리하고, 데이터의 변화를 실시간으로 반영할 수 있습니다.

✅ Non-blocking I/O

WebFlux는 Non-blocking I/O를 사용하여 요청과 응답 처리를 비동기적으로 수행합니다.

이로 인해 많은 수의 클라이언트 요청을 동시에 처리할 수 있는 능력을 갖추게 됩니다.

✅ 다양한 서버 지원

WebFlux는 Netty, Undertow, Tomcat 등 다양한 서버와 함께 사용할 수 있습니다.

특히 Netty는 높은 성능을 자랑하는 비동기 이벤트 기반 서버로, WebFlux와 궁합이 잘 맞습니다.

✅ 쉬운 테스트와 유지보수

WebFlux는 테스트와 유지보수가 용이합니다.

반응형 스트림을 활용하면 데이터 흐름을 명확하게 관리할 수 있어, 코드의 가독성과 유지보수성을 높여줍니다.

 

⭐ WebFlux의 기본 사용법

✅ Maven 의존성 추가

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

WebFlux를 사용하기 위해서는 pom.xml에 다음 의존성을 추가합니다.

✅ 간단한 Controller 작성

WebFlux에서는 @RestController와 @GetMapping 어노테이션을 사용하여 비동기 요청을 처리할 수 있습니다. 예를 들어, 다음과 같이 간단한 REST API를 만들 수 있습니다.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public Mono<String> hello() {
        return Mono.just("Hello, WebFlux!");
    }
}

위 코드는 /hello 엔드포인트에 GET 요청을 하면 "Hello, WebFlux!"라는 문자열을 비동기적으로 반환합니다.

 

🚩 결론

Spring WebFlux는 비동기 및 반응형 프로그래밍을 통해 웹 애플리케이션의 성능과 확장성을 극대화할 수 있는 강력한 도구입니다.

높은 트래픽을 처리하거나 실시간 데이터 업데이트가 필요한 경우, WebFlux는 좋은 선택이 될 것입니다.

 

📌 참고

 

 

Spring WebFlux :: Spring Framework

The original web framework included in the Spring Framework, Spring Web MVC, was purpose-built for the Servlet API and Servlet containers. The reactive-stack web framework, Spring WebFlux, was added later in version 5.0. It is fully non-blocking, supports

docs.spring.io