Java 비동기 처리, 무엇을 선택해야 하지?
Java에서 비동기 처리를 고민하다 보면 마주치는 두 가지 선택지가 있다.
바로 CompletableFuture와 Spring 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 |