SSE란?
Server-Sent Events는 서버에서 클라이언트로 단방향 실시간 통신을 제공하는 기술입니다.HTTP vs SSE vs WebSocket
비교표
| 특징 | HTTP | SSE | WebSocket |
|---|---|---|---|
| 방향 | 요청→응답 | 서버→클라이언트 | 양방향 |
| 프로토콜 | HTTP | HTTP | WebSocket |
| 재연결 | X | 자동 | 수동 |
| 복잡도 | 낮음 | 중간 | 높음 |
| 용도 | 일반 API | 실시간 푸시 | 실시간 채팅 |
SSE 사용 사례
실시간 알림
새 메시지, 좋아요, 댓글 등
진행 상황
파일 업로드, 작업 처리 진행률
라이브 피드
뉴스 피드, 소셜 미디어 업데이트
모니터링
서버 상태, 로그 스트리밍
기본 설정
sonamu.config.ts
- SSE 엔드포인트 자동 등록
- 자동 재연결 지원
- Keep-alive 자동 전송
SSE 플러그인 옵션
- boolean
- SsePluginOptions
간단한 활성화/비활성화
SSE 작동 방식
연결 흐름
HTTP 헤더
SSE는 특수한 HTTP 헤더를 사용합니다:text/event-stream: SSE 전용 Content-Typeno-cache: 캐싱 방지keep-alive: 연결 유지
실전 설정 예제
1. 기본 설정 (권장)
2. 개발/프로덕션 분리
3. 조건부 활성화
압축 비활성화
SSE는 스트리밍 응답이므로 압축을 비활성화해야 합니다.CORS 설정
SSE를 다른 도메인에서 사용하려면 CORS 설정이 필요합니다.credentials: true 설정 필요
환경별 전략
개발 환경
프로덕션 환경
타임아웃 설정
SSE 연결은 장시간 유지되므로 타임아웃 설정이 중요합니다.connectionTimeout: 0: 연결 타임아웃 비활성화 (SSE는 장시간 유지)keepAliveTimeout: Keep-alive 간격 (기본값: 5초)
프록시 설정 (Nginx)
Nginx를 사용하는 경우 SSE를 위한 설정이 필요합니다.proxy_buffering off: 버퍼링 비활성화 (즉시 전송)proxy_cache off: 캐싱 비활성화proxy_read_timeout 24h: 읽기 타임아웃 (장시간)
디버깅
브라우저 개발자 도구
curl 테스트
-N: 버퍼링 비활성화 (즉시 출력)
주의사항
브라우저 지원
SSE는 모든 모던 브라우저에서 지원됩니다:| 브라우저 | 지원 |
|---|---|
| Chrome | ✅ |
| Firefox | ✅ |
| Safari | ✅ |
| Edge | ✅ |
| IE 11 | ❌ (polyfill 필요) |
