개발/네트워크 & 통신

📡 SSE(Server-Sent Events) 완벽 가이드 — DevOps 관점에서 본 실시간 통신

황동리 2025. 8. 14. 14:01
반응형

1. 왜 이 글을 쓰게 되었나

현업에서 DevOps 겸 클라우드 엔지니어로 일하다 보면, 개발팀이 “실시간”이라는 요구사항이 있을 때 대부분 SSE(Server-Sent Event)을 쓰거나, 혹은 실시간 양방향 통신을 원할 때는 WebSocket 를 선택하는 경우가 있습니다.


따라서, 애플리케이션의 특성과 통신 방식의 장단점을 맞춰야 효율적인 아키텍처를 만들 수 있습니다.


최근 우리 팀도 SSE(Server-Sent Events) 통신 방식를 쓰고 있었는데, 정작 개발자들이 “왜 SSE를 쓰는지”, “어떻게 동작하는지” 정확히 몰라서 아키텍처 논의가 힘들었습니다.


그래서 이번 글에서는 SSE의 개념, 동작 원리, 장단점, 아키텍처 설계 시 고려사항까지 정리하려 합니다.


SSE란 무엇인가?

SSE(Server-Sent Events) 는 서버가 클라이언트(브라우저, 앱 등)로 단방향 스트리밍 데이터를 전송하는 기술입니다.


HTTP 연결을 끊지 않고 유지하며, 새로운 데이터가 있으면 즉시 전송합니다.


📌 한 줄 정의
“서버에서 클라이언트로만, 실시간으로, 텍스트 기반 데이터를 계속 밀어주는 HTTP 스트리밍 방식”


SSE vs 다른 방식 비교

항목 Polling SSE WebSocket
통신 방향 단방향(클라이언트 → 서버) 단방향(서버 → 클라이언트) 양방향
연결 방식 매번 새 요청 장기 연결 장기 연결
브라우저 지원 전부 지원 HTML5 지원 HTML5 지원
전송 데이터 텍스트/바이너리 UTF-8 텍스트 텍스트/바이너리
복잡도 낮음 낮음 중간~높음
사용 예시 날씨 업데이트, 알림 알림, 로그, 시세 채팅, 게임

SSE 동작 원리

  1. 클라이언트 요청

    • 브라우저나 앱이 서버 /events 엔드포인트에 연결 요청
    • 요청 헤더에 Accept: text/event-stream 포함
  2. 서버 응답

    • Content-Type: text/event-stream로 응답 후 연결 유지
  3. 데이터 전송

    • data:로 시작하는 텍스트 이벤트를 전송 (\n\n로 구분)
  4. 자동 재연결

    • 연결이 끊어지면 EventSource API가 자동 재연결 시도

이러한 동작 특성을 가지고 있다보니, 실시간 통신 및 업데이트가 필요한 시나리오에 적합 합니다.


이와 반대로, 무조건은 아니지만 부적합한 경우가 있습니다.

  • 양방향 통신 필요: 채팅, 게임 -> WebSocket 권장
  • 대규모 바이너리 전송: 이미지, 동영상 -> WebSocket/gRPC 권장

마무리

종합해서 마무리를 해보자면,


SSE는 단방향 실시간 전송이 필요한 서비스에서 단순하고 효율적으로 쓸 수 있는 기술입니다.
하지만 모든 실시간 통신에 SSE가 답은 아닙니다.


DevOps/클라우드 엔지니어라면 서비스 특성을 보고 SSE vs WebSocket vs gRPC 중 무엇이 최적일지 판단해야 합니다.

반응형