📨

SSE (Server-Sent Events)

서버→클라이언트 단방향 스트림

SSE는 HTTP 기반의 단방향 스트리밍 기술입니다. 서버가 클라이언트에 이벤트를 계속 보낼 수 있지만, 클라이언트→서버 방향은 별도 HTTP 요청이 필요합니다. WebSocket보다 단순하고 HTTP/2와 잘 호환되며, 자동 재연결 기능이 브라우저에 내장되어 있습니다.

구조 다이어그램

🌐
Client
EventSource API
① GET 요청
HTTP 연결 유지
② text/event-stream
data: {...}
data: {...}
단방향 스트림 (서버 → 클라이언트)
🖥️
Server
Content-Type: text/event-stream
연결 끊김 시 브라우저가 자동 재연결 (Last-Event-ID 전송)
흐름 설명
  1. 클라이언트가 EventSource API로 서버에 HTTP GET 요청
  2. 서버가 text/event-stream 응답, 연결 유지
  3. 서버가 이벤트를 data: 형식으로 스트리밍
  4. 연결 끊김 시 브라우저가 자동 재연결

동작 흐름

1

클라이언트가 EventSource API로 서버에 HTTP GET 요청

2

서버가 Content-Type: text/event-stream으로 응답, 연결 유지

3

서버가 이벤트 발생 시 data: 형식으로 스트리밍 전송

4

연결 끊김 시 브라우저가 자동 재연결 (Last-Event-ID 활용)

장점

  • HTTP 기반으로 구현 단순
  • 자동 재연결 내장
  • HTTP/2 멀티플렉싱 활용
  • 텍스트 기반으로 디버깅 용이

단점

  • 단방향만 가능 (서버→클라이언트)
  • 바이너리 데이터 전송 비효율
  • IE/구형 브라우저 미지원
  • 최대 동시 연결 수 제한 (HTTP/1.1에서 6개)

사용 사례

실시간 알림/피드 AI 챗봇 스트리밍 응답 (ChatGPT) 주식 시세 업데이트 빌드/배포 로그 스트리밍 라이브 스코어보드