Spring WebFlux는 Reactive Stream API를 기반으로 한 비동기, 논블로킹 웹 프레임워크로, 대량의 트래픽과 I/O가 많은 환경에서 기존 서블릿 기반의 Spring MVC보다 더 효율적인 성능을 제공합니다. WebFlux의 핵심 키워드는 Reactive Stream, Non-blocking, Asynchronous입니다.
주요 활용 사례
- 마이크로서비스 게이트웨이(Gateway)
- WebSocket
- 실시간 채팅 서비스
하지만 모든 상황에서 Spring WebFlux가 최적은 아닙니다. 특히 CPU Bound 작업(연산이나 계산이 주가 되는 경우)에서는 Spring MVC와 같은 동기 처리 방식이 더 나은 성능을 발휘할 수 있습니다. 반면, I/O Bound 작업(입출력 작업이 많은 경우)에서는 WebFlux의 비동기적 처리 방식이 더 유리할 수 있습니다.
핵심 개념 설명
1. CPU Bound vs I/O Bound
- CPU Bound: 계산 및 연산에 중점을 둔 작업. WebFlux는 I/O 작업에 최적화되어 있으므로 CPU Bound 작업에서는 Spring MVC가 더 적합할 수 있습니다.
- I/O Bound: 입출력에 관련된 작업. WebFlux의 비동기 논블로킹 처리가 큰 장점을 발휘합니다.
2. Sync/Async
- 동기(Sync): 요청과 응답이 순차적으로 진행됩니다. 단순한 작업 흐름에서 적합할 수 있지만, I/O가 많을 때는 비효율적일 수 있습니다.
- 비동기(Async): 요청과 응답이 비동기적으로 처리되어 더 높은 동시성 처리가 가능합니다.
3. Blocking/Non-Blocking
- Blocking: I/O 작업이 완료될 때까지 대기하는 방식. 자원을 비효율적으로 사용할 수 있습니다.
- Non-Blocking: 작업이 완료될 때까지 대기하지 않고, 다른 작업을 처리할 수 있어 효율적입니다.
4. Project Reactor (Reactive Stream)
- Spring WebFlux는 Project Reactor 기반으로, 리액티브 스트림 API를 사용하여 비동기 데이터 처리를 제공합니다. 이는 높은 성능과 동시성을 요구하는 애플리케이션에서 중요한 역할을 합니다.
5. Spring WebFlux
- 비동기 논블로킹 웹 프레임워크로, I/O 작업이 많은 대규모 트래픽 처리에 최적화되어 있습니다.
6. WebClient
- Spring WebFlux에서 제공하는 비동기 HTTP 클라이언트로, 외부 서비스와 통신할 때 논블로킹 방식으로 요청을 처리할 수 있습니다.
결론
Spring WebFlux는 I/O Bound 작업에서 특히 유용하며, 비동기 처리와 논블로킹 특성으로 대규모 트래픽과 리소스 효율성이 중요한 애플리케이션에서 높은 성능을 발휘합니다. 하지만 CPU Bound 작업이나 명확한 흐름이 요구되는 환경에서는 여전히 Spring MVC와 같은 동기 방식이 더 적합할 수 있습니다.
'프레임워크 > 자바 스프링' 카테고리의 다른 글
Webflux - reactor (0) | 2024.09.18 |
---|---|
Webflux - spring mvc vs webflux (1) | 2024.09.18 |
접속자 대기열 시스템 #1: 시스템 설계와 Spring WebFlux, Redis (3) | 2024.09.09 |
대규모 트래픽 게시판 구축 시리즈 #14: 배포 자동화 (1) | 2024.09.07 |
대규모 트래픽 게시판 구축 시리즈 #13: 알림 서비스 구현과 통합 - AWS SNS 및 Slack (0) | 2024.09.07 |