IT/JAVA

CompletableFuture vs WebFlux

iamhyeon 2026. 1. 2. 18:17

 

Java 비동기 처리, 무엇을 선택해야 하지?

Java에서 비동기 처리를 고민하다 보면 마주치는 두 가지 선택지가 있다.
바로 CompletableFutureSpring WebFlux이다.

두 기술 모두 “비동기 처리”를 지원하지만, 문제 해결 방식과 철학은 다르다.

 

1. CompletableFuture란 무엇인가

CompletableFuture는 미래에 완료될 결과를 표현하는 비동기 추상화이다.
기존의 동기 코드 스타일을 최대한 유지하면서, 비동기 처리를 “추가”하는 방식이다.

  • 기존 Servlet / MVC 구조 그대로 사용 가능
  • Thread 기반 비동기 처리
  • 명시적인 스레드 풀(ExecutorService) 사용
  • imperative(명령형) 코드 스타일 유지

현재 구조를 유지하면서 비동기를 도입하고 싶을 때 적합하다.

 

2. WebFlux란 무엇인가

WebFlux는 Spring의 Reactive Programming 기반 웹 프레임워크이다.
CompletableFuture와 달리, 단순히 비동기를 “추가”하는 것이 아니라
전체 실행 모델 자체가 다르다.

핵심 특징은 다음과 같다.

  • Non-blocking, Event-loop 기반
  • Thread보다 Event 중심 처리
  • Backpressure 지원
  • Flux / Mono 기반 선언적 스트림 처리
  • Servlet이 아닌 Netty 기반 사용 가능

애플리케이션 전체를 비동기·논블로킹 모델로 설계해야 한다.

 

3. 핵심 차이 비교

항목 CompletableFuture WebFlux
처리 모델 Thread 기반 비동기 Event-loop 기반 Reactive
코드 스타일 명령형(Imperative) 선언형(Reactive)
기존 MVC 호환 매우 좋다 구조 변경 필요
러닝 커브 낮다 높다
대규모 트래픽 제한적 매우 강함
Backpressure 없음 있음

 

4. 언제 CompletableFuture를 선택해야 하는가

  • 기존 Spring MVC 프로젝트를 유지해야 할 때
  • 일부 API만 비동기로 개선하고 싶을 때
  • 팀의 Reactive 경험이 부족할 때
  • DB/JPA 기반 동기 시스템일 때

👉 “현실적인 점진적 비동기 도입”에 최적이다.

 

5. 언제 WebFlux를 선택해야 하는가

  • 처음부터 비동기 시스템으로 설계할 때
  • 초고동시성(수만~수십만 요청) 환경
  • 외부 API 호출이 많은 시스템
  • Non-blocking DB, Redis, 메시지 기반 시스템

👉 “완전한 비동기·논블로킹 시스템”에 적합하다.

 

반응형

'IT > JAVA' 카테고리의 다른 글

CompletableFuture 비동기 처리  (0) 2026.01.02
Java 멀티스레드와 병렬 실행  (0) 2025.12.07
Java 함수형 인터페이스 Supplier, Runnable  (0) 2025.12.07
getOrDefault() vs computeIfAbsent()  (0) 2025.12.06
ReentrantLock 락 제어  (0) 2025.12.06