아카이브사이트맵
© 2026 Rayon. All rights reserved.
DevDay
아티클랭킹스페이스채용
네이버 페이 favicon네이버 페이

MongoDB CQRS, Tomcat NDJSON 병목을 뚫다!

by DD
2025-07-31
11개월 전
조회수 6

CQRS 패턴 기반의 MongoDB 시스템 도입 후 API 조회 속도 40배 향상

Tomcat에서 NDJSON 스트리밍 시 한 줄씩 블로킹되는 문제 발생

버퍼링 기법을 활용하여 엑셀 다운로드 성능 개선 달성

Tomcat NDJSON 병목 현상의 기술적 배경

Tomcat에서 Flux 타입으로 NDJSON을 처리할 때, 각 JSON 객체마다 `write`와 `flush`가 발생한다. 구체적으로, SseEmitter 내부에서 한 줄씩 직렬화하여 HttpResponse에 전송한다. 따라서, 대량 데이터 전송 시 I/O 블로킹으로 인해 성능 저하가 발생한다.

Tomcat vs Netty: 성능 비교 및 트레이드오프

Tomcat은 블로킹 I/O 방식으로 NDJSON을 처리하여 성능 병목을 발생시킨다. 반면, Netty는 non-blocking 방식으로 처리하여 Tomcat 대비 7배 빠른 속도를 보인다. 하지만, Netty로 전환 시 코드 변경 및 자원 투입이 필요하므로, 상황에 맞는 선택이 중요하다.

버퍼링 기법을 활용한 성능 개선 전략

문제 해결을 위해 Flux.buffer(1000)를 사용하여 데이터를 묶어 전송한다. 구체적으로, 1000개의 객체를 묶어 한 번에 `write` & `flush`를 수행한다. 따라서, I/O 횟수 감소를 통해 엑셀 다운로드 성능 향상을 달성하고, Tomcat 환경에서도 효율적인 스트리밍을 구현했다.

MongoDB CQRS 성능 개선기: 예상치 못한 Tomcat NDJSON 병목 해결
고급
아키텍처
MongoDB
Tomcat
Spring Web
Java
Data
Backend
원문 읽기
원문 읽기

댓글 0

첫 번째 댓글을 남겨보세요!

관련 추천 글

MongoDB 커넥션 풀 모니터링 시스템 구축으로 서비스 안정성 확보!

펫프렌즈 로고

스프링 데이터(Spring Data) 2026.0.0-M2 출시: Redis, MongoDB 기능 개선!

스프링 로고

Spring AI 2.0 출시 및 CVE 급증 소식

스프링 로고

Spring Boot 4.1 출시 후 최신 Spring 생태계 소식 모음!

스프링 로고

VSMS, 데드락을 넘어 1500 TPS 달성!

컬리 로고

MongoDB, 인증 없이 메모리 유출 공격에 노출!

랍스타즈 로고
네이버 페이 favicon네이버 페이
고급
아키텍처
MongoDB
Tomcat
Spring Web
Java
Data
Backend

관련 추천 글

MongoDB 커넥션 풀 모니터링 시스템 구축으로 서비스 안정성 확보!

펫프렌즈 로고

스프링 데이터(Spring Data) 2026.0.0-M2 출시: Redis, MongoDB 기능 개선!

스프링 로고

Spring AI 2.0 출시 및 CVE 급증 소식

스프링 로고