📌 Spring WebFlux 정리
1. 정의
- Spring 5부터 추가된 리액티브 웹 프레임워크
- 논블로킹 I/O 기반 → 적은 스레드로도 높은 동시성 처리 가능
- Reactor 라이브러리 (Mono, Flux) 사용 → 리액티브 스트림 표준 준수
2. 핵심 개념
- Mono<T> : 0~1개의 결과 (단일 값 비동기 처리)
- Flux<T> : 0~N개의 결과 (스트림 비동기 처리)
- Non-blocking : 결과 기다리지 않고 다음 작업 진행
- Backpressure : 데이터가 몰릴 때 소비자가 감당 가능한 만큼만 처리
3. 코드 비교
Spring MVC (동기/블로킹)
@GetMapping("/user/{id}")
public User getUser(@PathVariable String id) {
return userRepository.findById(id); // 블로킹
}
Spring WebFlux (비동기/논블로킹)
@GetMapping("/user/{id}")
public Mono<User> getUser(@PathVariable String id) {
return userRepository.findById(id); // 논블로킹
}
4. 언제 쓰면 좋은가?
✅ 동시 접속자가 많은 서비스 (채팅, 스트리밍, IoT, API Gateway)
✅ 외부 API 호출, 비동기 DB 연동 등 I/O 의존도가 큰 경우
❌ 단순 CRUD, 동기 DB만 사용하는 경우에는 Spring MVC가 더 간단하고 효율적
5. 장단점
WebFlux | - 높은 동시성 처리 - 논블로킹 I/O - 리액티브 스트림 지원 |
- 러닝 커브 높음 - 모든 의존 라이브러리가 리액티브해야 함 - 디버깅 어려움 |
Spring MVC | - 직관적, 학습 쉬움 - 풍부한 라이브러리 지원 |
- 요청 폭주 시 스레드 한계로 성능 저하 |
👉 정리하면,
Spring MVC는 익숙하고 간단하지만 동시성 한계가 있고,
Spring WebFlux는 비동기 논블로킹으로 대규모 트래픽에 유리!
'JAVA' 카테고리의 다른 글
Spring MVC와 WebFlux의 요청 처리 흐름 (0) | 2025.09.04 |
---|---|
Logback/SLF4j 사용 이유 (0) | 2025.08.20 |
다국어 Papago API 연결 (0) | 2025.08.20 |
Sentry + OpenSearch 로그 수집 (0) | 2025.08.20 |
MyBatis → JPA 전환 이유 (0) | 2025.08.19 |