Skip to main content
Sonamu는 fastify-sse-v2 플러그인을 기반으로 **Server-Sent Events (SSE)**를 지원합니다. SSE를 사용하면 서버에서 클라이언트로 실시간 데이터를 푸시할 수 있습니다.

SSE란?

Server-Sent Events는 서버에서 클라이언트로 단방향 실시간 통신을 제공하는 기술입니다.

HTTP vs SSE vs WebSocket

비교표

SSE 사용 사례

실시간 알림

새 메시지, 좋아요, 댓글 등

진행 상황

파일 업로드, 작업 처리 진행률

라이브 피드

뉴스 피드, 소셜 미디어 업데이트

모니터링

서버 상태, 로그 스트리밍

기본 설정

sonamu.config.ts

기본 동작:
  • SSE 엔드포인트 자동 등록
  • 자동 재연결 지원
  • Keep-alive 자동 전송

SSE 플러그인 옵션

간단한 활성화/비활성화

SSE 작동 방식

연결 흐름

HTTP 헤더

SSE는 특수한 HTTP 헤더를 사용합니다:
특징:
  • text/event-stream: SSE 전용 Content-Type
  • no-cache: 캐싱 방지
  • keep-alive: 연결 유지

실전 설정 예제

1. 기본 설정 (권장)

2. 개발/프로덕션 분리

이유: 개발 환경에서는 HMR로 인해 연결이 자주 끊김

3. 조건부 활성화

압축 비활성화

SSE는 스트리밍 응답이므로 압축을 비활성화해야 합니다.
@stream 데코레이터에서 자동 처리:

CORS 설정

SSE를 다른 도메인에서 사용하려면 CORS 설정이 필요합니다.
주의: SSE는 인증 쿠키 등을 전송할 수 있으므로 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 설정 시 주의사항:
  1. 압축 비활성화: SSE는 스트리밍이므로 압축 금지 (@stream 데코레이터가 자동 처리)
  2. 타임아웃 설정: 장시간 연결 유지
  3. CORS 설정: 다른 도메인에서 사용 시 필요
  4. 재연결 처리: 클라이언트는 자동 재연결 구현 필요
  5. 브라우저 제한: 동시 SSE 연결 수 제한 (도메인당 6개)
    • 해결: HTTP/2 사용 또는 연결 재사용
  6. 프록시 버퍼링: Nginx 등 버퍼링 비활성화 필요

브라우저 지원

SSE는 모든 모던 브라우저에서 지원됩니다: IE 11 지원: event-source-polyfill

다음 단계

SSE 엔드포인트 만들기

@stream 데코레이터로 SSE API 구축

클라이언트 통합

프론트엔드에서 SSE 사용하기