Server-Sent Events

Server-Sent Events(SSE)는 웹 서버가 HTTP 응답 연결을 유지하며 이벤트를 브라우저로 지속적으로 전달하는 기술이다. 서버 측의 상태 변경이나 새 데이터를 즉시 사용자에게 보여 주는 서비스에서 사용되며 실시간 알림, 진행 상태와 로그 스트리밍 등에 적합하다. 양방향 메...

분류서버→클라이언트 이벤트 스트림
정식 명칭SSE (Server-Sent Events)
주요 용도HTTP 연결을 통한 단방향 이벤트 전송
관련 기술World Wide Web, HTML, HTTP, 웹 브라우저
관련 명세WHATWG HTML: Server-sent events

Server-Sent Events(SSE)는 웹 서버가 HTTP 응답 연결을 유지하며 이벤트를 브라우저로 지속적으로 전달하는 기술이다. 서버 측의 상태 변경이나 새 데이터를 즉시 사용자에게 보여 주는 서비스에서 사용되며 실시간 알림, 진행 상태와 로그 스트리밍 등에 적합하다. 양방향 메시지를 제공하는 WebSocket과 달리 SSE의 이벤트 스트림은 기본적으로 서버에서 클라이언트로 향한다.

브라우저에서는 EventSource 인터페이스를 이용해 이벤트 스트림에 연결한다. 서버는 text/event-stream 미디어 타입으로 응답하고 줄 단위의 필드로 이벤트를 전송한다. data는 이벤트 데이터, event는 이벤트 종류, id는 식별자, retry는 재접속 대기 설정에 사용될 수 있다.

SSE 연결은 네트워크 장애 등으로 종료되면 브라우저가 일정한 조건에서 재연결을 시도할 수 있도록 설계되어 있다. 이전에 받은 마지막 이벤트 ID는 Last-Event-ID 헤더를 통해 재전송될 수 있으며 서버가 이벤트의 누락이나 중복을 처리하는 데 활용할 수 있다. 다만 서버가 이전 이벤트를 보관하지 않는다면 연결 복구만으로 모든 이벤트를 복구할 수 있는 것은 아니다.

SSE는 표준 HTTP 요청에 기반하므로 기존 인증과 프록시 체계에 통합하기 쉬운 편이다. 그러나 장시간 열려 있는 응답을 중간 서버가 버퍼링하거나 타임아웃으로 종료하면 실시간성이 떨어질 수 있다. 서버는 연결 수와 메모리, 클라이언트별 전송 지연을 관리하고 필요한 경우 주기적인 주석 행을 전송해 연결 유지에 도움을 줄 수 있다.

SSE를 사용하는 애플리케이션은 사용자 명령을 서버로 보내기 위해 일반 HTTP 요청 등 다른 경로를 사용할 수 있다. 연결에 사용되는 URL과 인증 정책은 브라우저의 출처 규칙에 영향을 받으며 데이터의 내용 자체는 응용 프로그램이 정의한다. 단순한 단방향 서버 이벤트 전달이라면 양방향 WebSocket보다 구현과 운영 구조가 간결할 수 있다.[1]

역사와 목적

서버 푸시

EventSource 도입

연결과 응답

HTTP 응답

text/event-stream

이벤트 형식

data

event

id

retry

브라우저 API

EventSource

이벤트 핸들러

재연결

서버 구현

응답 버퍼링

타임아웃

연결 수

보안과 호환성

인증

출처 정책

메시지 검증

관련 문서

  1. WHATWG HTML: Server-sent events ↩