[SpringBoot/Nginx] 운영 환경에서 SSE가 끊길 때 확인할 것들
1. 문제 상황
- 로컬 환경(SpringBoot + Front)에서는 SSE 스트림이 문제 없이 유지가 됐었습니다. 그러나 Dev(운영 유사) 환경에서는 SSE가 일정 시간 지나면 끊기는 것이 확인 됐습니다.
로컬 환경 자체에서는 제대로 작동되었기에 "로컬과 다른 점: 운영 Nginx(Reverse Proxy) 뒤에 배포"
Nginx 설정 파일에서 SSE 설정을 따로 해두는 부분이 있겠다라는 생각이 들었습니다.
2. TL;DR
- 원인: Nginx 기본 proxy 버퍼링/타임아웃/압축 등의 동작이 SSE(서버-센트 이벤트)의 지속 스트리밍을 방해
실제 파일에서는 SSE 에 대한 기본 설정을 하지 않았었고,


Nginx는 기본적으로 proxy_buffering 을 활성화 시킨 상태가 기본이라고 합니다.
- 해결 핵심: Nginx에서 proxy_buffering 비활성화
3. 환경 정보
- Backend: Spring Boot (Servlet 기반으로 구성된 서비스임 - Servlet 이란? )[추후 정보 추가]
- Frontend: Next.js using EventSource
- Reverse Proxy: Nginx
- 브라우저: Chrome latest (테스트 환경)
4. 문제 재현 & 진단 과정
- 로컬: frontend <--> backend → SSE 정상 유지
- 로컬& Dev: frontend(local) <-- nginx <-- backend(dev) → SSE 끊김 (버퍼를 쌓아서 보냄)
- Dev: frontend <-- nginx <-- backend → 일정시간 후 EventSource.onerror 발생 / 연결 끊김.
- 로그: Nginx access / error 로그에 특별한 에러는 없었지만, 응답이 chunked로 오지 않고 buffering된 뒤 한꺼번에 전달되는 패턴 관찰되었음.
- 가설: Nginx가 스트리밍(Chunked/Flush)을 버퍼링하고 있어 EventStream이 실시간으로 전달되지 못함.
5. 핵심 해결 방법 (실제 설정 및 코드)
5.1 Nginx 설정
proxy\_http\_version 1.1;
proxy\_set\_header Connection "";
# 핵심: 버퍼링 비활성화 (SSE 유지에 필수)
proxy\_buffering off;
proxy\_cache off; ```
[ 참고 링크 : https://docs.nginx.com/nginx/admin-guide/web-server/reverse-proxy/ ]