
백엔드
WebFlux & Project Reactor 기반, 고성능 실시간 웹한글 문서 편집 시스템 전환기
두줄요약
실시간 웹한글 편집의 I/O 병목과 블로킹 한계를 해결하기 위해 WebFlux와 Project Reactor로 전환했습니다. 블로킹 작업 분리, 커스텀 스케줄러, graceful shutdown, Context 추적으로 안정성과 관찰성을 높였습니다.
문제 상황
- 실시간 협업 웹한글 편집에서 수천 건의 편집 이벤트와 대용량 데이터 반영으로 I/O 병목이 쉽게 발생하는 상황
- 기존 Vert.x 기반 논블로킹 구조에 블로킹 로직이 많아 비동기 이점을 충분히 활용하지 못하고 처리 지연이 누적된 문제
원인 분석
- WebFlux 도입 필요성의 핵심은 다수의 블로킹 의존성과 증가하는 트래픽을 감당할 완전한 논블로킹 스택 부재
- 리액티브 스트림의 backpressure, subscribe 시점 실행, 이벤트 루프와 스케줄러 동작을 실무에서 정확히 이해해야 하는 복잡성
- 블로킹 코드의 이벤트 루프 차단, 즉시 평가로 인한 불필요한 오류와 자원 낭비, 공유 스레드 풀의 장애 전파 가능성
해결 방법
- Spring WebFlux와 Project Reactor로 백엔드를 통합해 선언적 리액티브 파이프라인과 논블로킹 I/O 처리 전환
- Mono.fromCallable, fromRunnable, defer, subscribeOn을 조합해 블로킹 작업을 전용 스레드로 분리하고 실행 시점을 지연
- newBoundedElastic 등 커스텀 스케줄러, 단일 스레드 처리, Sinks 기반 graceful shutdown, Context 기반 추적성 강화 적용
