Protocol

Server Sent Events ( SSE )

Seung-o 2023. 9. 17. 16:06

1. SSE 란?

웹 브라우저와 서버 사이의 단방향 통신을 가능케 하는 프로토콜 기술이다. 서버가 클라이언트로 데이터를 푸시하는데에 사용되며, 실시간 업데이트를 필요로 하는 웹 어플리케이션에 유용하다.

 

SSE 모식도

2. SSE의 특징

 

2-1. 단방향 통신

SSE는 오직 서버에서 클라이언트로만의 데이터 전송을 지원하는 단방향 통신 프로토콜이다. 즉, 클라이언트에서 서버로 요청을 보내지 않아도, 서버는 실시간 업데이트를 클라이언트로 전송할 수 있다.

 

2-2. 텍스트 기반

SSE는 주로 텍스트 데이터에 최적화되어 있다. ( 대용량 바이너리 파일 처리 등에는 부적합하다 )

 

💡 텍스트 데이터란?

텍스트 기반으로 표현될 수 있는 모든 데이터.

 

( 예시 1 ) JSON 형식

data: {"event": "update", "data": {"value": 42}}

 

( 예시2 ) 텍스트 형식

data: This is a plain text message.

 

( 예시 3 ) 커스텀한 형식

data: event=update&value=42

 

SSE 가 주로 텍스트 데이터를 채택하는데에는 아래와 같은 이유가 있다.

  1. 간단한 구현: SSE는 텍스트 기반으로 간단한 구현을 가지고 있다. 데이터는 텍스트로 표현되며, 이벤트 스트림은 일반적인 텍스트 파일처럼 처리된다. 이로 인해 클라이언트 및 서버 측에서의 구현이 상대적으로 간단하며, 디버깅 및 테스트도 용이하다.
  2. 크로스 플랫폼 호환성: 텍스트 데이터는 다양한 플랫폼 및 언어에서 쉽게 처리할 수 있습니다. 모든 주요 웹 브라우저는 SSE를 지원하고 텍스트 데이터를 쉽게 파싱할 수 있으며, 서버 측에서도 다양한 프로그래밍 언어로 텍스트 데이터를 생성하고 전송할 수 있습니다.
  3. 인간 가독성: SSE는 주로 이벤트 기반의 데이터를 전송하는 데 사용된다. 이러한 이벤트는 텍스트로 표현되므로, 개발자 및 디버거가 쉽게 데이터를 이해하고 확인할 수 있다.
  4. 텍스트 기반 프로토콜과의 호환성: 많은 기존 시스템 및 프로토콜은 텍스트 기반 데이터 교환을 지원하고 있다. SSE를 텍스트로 사용하면 다른 시스템과의 통합이 쉬워진다.
  5. 경량 프로토콜: SSE는 데이터 양이 크지 않은 실시간 업데이트에 적합한 경량 프로토콜이다. 대용량 바이너리 데이터를 처리하는 경우에는 WebSocket과 같은 다른 프로토콜을 고려해야한다.

즉, SSE는 이벤트 방식이라는 장점을 살려 실시간 업데이트가 필요한 어플리케이션 개발이 비교적 가볍게 이루어질 때 용이한 셈이다.

 

2-3. 이벤트 스트림

SSE는 이벤트 스트림 ( event-stream ) 이라고 불리는 특별한 데이터 형식을 사용한다. 이 스트림은 텍스트 기반이며, 각 이벤트는 data, event, id, retry 와 같은 필드를 포함할 수 있다.

 

2-4. 자동 재연결

SSE 는 네트워크 연결이 끊긴 경우, 자동으로 재연결을 시도한다. 이는 네트워크 불안정성을 해결하는 데에 도움을 준다.

 

3. 웹 소켓과의 차이점

 

  Socket  SSE
브라우저 지원 대부분의 브라우저에서 지원 ( IE 10 부터 모두 지원, 전 세계 유저의 98.7% 사용 가능 ) 대부분의 모던 브라우저에서 지원 ( IE 불가능, 전 세계 유저의 97% 사용 가능 )
통신 방향 양방향 단방향 ( 서버 → 클라이언트 )
리얼 타임 YES YES
데이터 형태 Binary, UTF-8 UTF-8
자동 재접속 NO YES ( 3초마다 재접속 )
최대 동시 접속수 브라우저의 연결 한도는 없음. 다만, 서버 셋업에 따라 달라질 수 있음. HTTP 프로토콜을 이용할 때, 브라우저당 6개까지 동시 접속 가능. HTTP2로는 100개가 기본.
프로토콜 WebSocket HTTP
배터리 소모량 작음
방화벽 친화적 NO YES
💡 왜 배터리 소모량이 Socket이 더 클까?
웹 소켓을 사용하는 어플리케이션은 연결 활성화를 위해 백그라운드에서 지속적으로 동작해야한다.따라서 어플리케이션이 열려만 있다면 네트워크 사용량이 많아진다. 이에 반해 SSE는 커넥션을 한 번 형성하고 계속 기다린다.

 

웹 소켓은 주로 “리얼 타임”이 필요한 곳에서 많이 사용된다. 가령, 카카오톡과 같은 채팅 서비스 / 주식 트레이딩 데이터 등이 그 예시이다.

반면, SSE는 알람을 줄 때 많이 사용된다. 예를 들어, 트위터에서 피드를 받거나, 인스타그램에서 팔로우 요청을 받았을 때 등에 SSE가 사용된다. 클라이언트가 데이터를 받기만 하면 되고 완전 실시간일 필요가 없을 때, 그 효용성이 높은 것이다.

'Protocol' 카테고리의 다른 글

AMQP & RabbitMQ  (0) 2023.09.18