본문 바로가기

JAVA

WebFlux 정리

📌 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