Topic

SSE(Server-Sent Events)

JackerLab 2025. 4. 24. 11:37
728x90
반응형

개요

SSE(Server-Sent Events)는 서버가 클라이언트(웹 브라우저 등)로 지속적으로 데이터를 푸시할 수 있게 해주는 HTML5 기반의 단방향 통신 기술입니다. 클라이언트가 초기 요청을 보내고 나면 서버가 실시간 이벤트 스트림을 유지하며 자동으로 데이터를 전송할 수 있어, 주식 시세, 알림, 채팅, IoT 모니터링 등 다양한 실시간 웹 애플리케이션에 적합합니다.


1. 개념 및 정의

항목 설명
정의 클라이언트가 서버에 한 번 연결한 뒤, 서버가 지속적으로 데이터를 푸시하는 HTTP 기반의 단방향 스트리밍 방식
프로토콜 HTTP/1.1 기반 (웹소켓과 달리 업그레이드 불필요)
MIME 타입 text/event-stream (Content-Type 헤더)

2. SSE의 작동 방식

단계 설명
1. 클라이언트 연결 JavaScript에서 EventSource 객체로 서버에 연결
2. 서버 스트리밍 서버는 text/event-stream 형식으로 데이터를 지속 전송
3. 이벤트 수신 클라이언트는 이벤트 핸들러로 데이터 수신 후 처리
4. 자동 재연결 네트워크 단절 시 자동으로 재연결 시도 (기본 제공 기능)

3. 코드 예시

📍 클라이언트 (JavaScript)

const eventSource = new EventSource('/sse');

eventSource.onmessage = function(event) {
  console.log('New message:', event.data);
};

📍 서버 (Node.js 예시)

app.get('/sse', (req, res) => {
  res.setHeader('Content-Type', 'text/event-stream');
  res.setHeader('Cache-Control', 'no-cache');
  res.setHeader('Connection', 'keep-alive');

  setInterval(() => {
    res.write(`data: ${new Date().toISOString()}\n\n`);
  }, 2000);
});

4. SSE vs WebSocket vs Long Polling

항목 SSE WebSocket Long Polling
연결 방향 서버 → 클라이언트 단방향 양방향 클라이언트 주도
사용 용도 실시간 알림, 로그 스트림 채팅, 게임, 실시간 협업 저간격 이벤트 발생시 간편함
표준화 HTML5 명세 포함 별도 프로토콜 비표준 구현 방식
장점 HTTP 기반, 구현 간단, 자동 재연결 양방향 통신 가능, 고속 호환성 좋지만 비효율적

5. 적용 사례

분야 활용 예시
실시간 알림 SNS 알림, 메신저 도착 알림, 주문 상태 푸시
데이터 시각화 대시보드 실시간 업데이트, IoT 센서 데이터 반영
뉴스/주식 스트리밍 속보, 주가/환율 실시간 갱신
로그 모니터링 DevOps 환경의 로그 스트림 처리

6. 장점과 제한사항

항목 장점 제한점
단순성 HTTP 기반으로 기존 서버에서 쉽게 구현 클라이언트 → 서버 전송 불가 (단방향)
안정성 자동 재연결 및 브라우저 내장 지원 오래된 브라우저, 프록시 호환성 문제 발생 가능
적은 오버헤드 웹소켓 대비 프로토콜 및 구현 부담 적음 대용량 메시지 처리에는 적합하지 않음

7. 확장 전략

전략 설명
JWT 기반 인증 연계 클라이언트 연결 시 인증 토큰 기반 접근 통제
이벤트 이름 활용 event: 헤더로 커스텀 이벤트 분기 처리 가능
브라우저 지원 고려 polyfill 또는 fallback 메커니즘 필요 (IE 등)
SSE + Redis 다수 클라이언트 대상 메시지 브로드캐스트 시 Redis Pub/Sub 연계

결론

SSE는 간단하지만 효과적인 실시간 데이터 전송 기술로, 양방향 통신이 꼭 필요하지 않은 실시간 애플리케이션에서 매우 유용합니다. 서버 구현이 쉬우며, 자동 재연결, 낮은 오버헤드 등의 장점으로 인해 실시간 알림 및 스트리밍에 적합한 선택지입니다.

728x90
반응형