SSE 도입 시 발생하는 시스템 병목 현상
스프링 부트 환경에서 톰캣의 기본 워커 스레드는 200개로 제한되어 있습니다. 실시간 스트리밍 기능을 구현할 때 이 제한은 시스템 안정성에 중요한 변수가 됩니다.
수백 명의 사용자가 동시에 30초 이상 스트리밍 응답을 유지할 경우, 서블릿 스레드가 고갈되어 일반적인 비즈니스 API 요청까지 처리하지 못하고 마비되는 상황이 발생할 가능성이 있습니다. 따라서 장기 연결 환경에서 스레드 풀 고갈과 Nginx 버퍼링 병목을 차단하는 설계 역량은 백엔드 아키텍처를 검증하는 핵심 요소가 됩니다.
아키텍처 최적화 및 격리 전략
장기 연결이 메인 애플리케이션의 자원을 잠식하지 않도록 격리하는 것이 설계의 핵심입니다. 이를 위해 다음과 같은 기술적 대응이 필요합니다.
비동기 핸들러 적용 스트리밍 전용 경로에 비동기 핸들러를 적용해야 합니다. 요청을 받는 즉시 서블릿 스레드를 풀에 반환함으로써 워커 스레드 고갈을 방지할 수 있습니다.
인프라 병목 해소 Nginx의 버퍼링 옵션을 비활성화해야 합니다. 또한 브라우저의 도메인당 연결 제한인 6개를 해소해야 할 경우, HTTP/2 멀티플렉싱을 활성화하는 접근이 필요합니다.
세션 관리 15초 주기의 하트비트를 설정하여 유휴 커넥션 및 좀비 세션을 정리해야 합니다. 이를 통해 불필요하게 연결이 유지되는 상황을 방지할 수 있습니다.