[ Server ] SSE 과 FCM , WebSocket 비교

5tr1ker·2023년 10월 13일
0

Server

목록 보기
9/10
post-thumbnail

우선 SSE 와 WebSocket에 대한 구현방법을 원하시는 분은 해당 포스팅 을 보고 와주세요.

SSE 와 WebSocket

SSE 는 Server-Send-Events 의 약자로 WebSocket과 같이 서버와 클라이언트간 데이터 송수신할 수 있는 기술입니다.

일반적으로 Connection Less 가 아닌 연결을 유지하여 실시간으로 데이터가 들어올 때 마다 이벤트를 발생시키는 구조입니다. 따라서 WebSocket으로 연결할 땐 서버의 URL 주소를 ws://localhost 처럼 해주어야 합니다.

다만 SSE 는 서버 -> 클라이언트로 단방향 구조로 양방향 구조 인 WebSocket 보다 가볍다는 장점을 가지고 있지만 SSE는 클라이언트가 접속을 종료해도 서버에서 알 방법이 없습니다.
따라서 Last Event ID 헤더를 이용하여 클라이언트가 마지막으로 수신받은 데이터를 확인하여 받지 못한 데이터를 다시 보내줘야 하는 번거로움이 있었습니다.

SSE의 특징

  • 서버에서 클라이언트로 실시간 Streaming을 한다.
  • 연결된 상태로 서버에서 클라이언트로 단방향으로만 데이터가 전송된다.
  • 클라이언트의 연결이 끊겨도 서버에서는 알 방법이 없다. ( lasy event id 를 활용하여 극복 가능 )

SSE 의 장점

  • HTML과 Javascript만으로 구현할 수 있다.
  • HTTP를 제외한 다른 프로토콜을 사용하지 않아 가볍다.
  • 웹 표준으로 IE를 제외한 모든 브라우저에서 사용이 가능합니다.
    - IE의 경우 Polyfill 를 통한 지원이 가능합니다.
    • polyfill 는 브라우저가 지원하지 않는 API 플러그인이나 Javascript를 흉내내는 것을 말합니다.

SSE의 단점

  • payload의 크기가 제한적이여서 많은 데이터를 담을 수 없다.
  • SSE를 지원하지 않는 경우 중요한 알림을 받을 수 없다.

Socket의 특징

  • Socket Connection을 이용하여 양방향 통신을 한다.
  • 일정시간 동안 HTTP와 TCP/IP 연결을 통해 통신을 한다.

Socket의 장점

  • 양방향 통신이 가능하다.
  • 최대 동시 접속 수가 많다.
  • 대부분 브라우저에서 지원한다.

Socket의 단점

  • 연결이 끊기면 재접속 시도를 하지 않는다.
  • 배터리 소모량이 크다.

FCM는 무엇인가?

FCM은 Firebase Cloud Messanger 의 약자로 모바일이나 웹 어플리케이션의 메세지 및 알림을 받기 위한 크로스 플랫폼 클라우드 솔루션입니다.

클라이언트가 FCM 서버에 등록되는 단계

  • 먼저 클라이언트는 키를 받기 위해 Firebase 서버에 요청을 보낸다.
  • Firebase 서버에서 키를 받아 클라이언트에게 전달한다.
  • Firebase 서버에서 받은 키를 서버에 전송한다.
  • 서버는 전달 받은 키를 DB에 저장하고 모바일의 Identification으로 사용

서버가 스마트폰에 데이터가 전달되는 과정

  • DB에서 특정 클라이언트의 키를 추출
  • 특정 키와 데이터를 HTTP 를 이용하여 Firebase에게 전달
  • Firebase는 전달받은 키를 식별하여 클라이언트에게 데이터를 전달

FCM의 장점

  • 특정 플랫폼에 종속받지 않고 데이터를 전송할 수 있습니다. ( 웹이나 , ios , 안드로이드 )
  • FCM에서 제공하는 다양한 기능을 활용할 수 있습니다.
  • 기능 구축에 적은 시간을 사용한다.
  • 클라우드 메신저 서버를 중간에 둠으로서 사용자는 낮은 배터리네트워크만으로 메세지를 송수신할 수 있다.

FCM의 단점

  • SSE와 달리 별도의 여러 설정이 필요하다.
  • SSE 보다 느리기 때문에 연성 실시간 ( soft real-time ) 에 적합하다.
  • real-time 의 성질을 가지고 있지만 연결 상태 , 데이터의 크기에 따라 지연될 수 있다.

총 정리

SSE 와 Socket , FCM 은 실시간으로 메세지 및 알림을 통신하기 위한 기술입니다.
다만 FCM 은 SSE 와 Socket 보다 더 많은 플랫폼을 수용할 수 있으며 , 중간 서버를 두기고 통신하기 때문에 배터리를 크게 소모하지 않습니다. 물론 SSE 나 Socket 보다 속도가 느려질 수 있다는 단점을 가질 수 있기 때문에 무조건 FCM이 좋다고 할 순 없죠.

따라서 실시간 성이 중요할 때 Socket과 SSE 를 사용하고 , 배터리 효율 및 연성 실시간을 사용하거나 , 다양한 플랫폼 ( 웹 , 앱 , ios )을 사용한다면 FCM을 고려해보는 것이 좋겠습니다.

참고

참고 블로그 : 링크

profile
https://github.com/5tr1ker

0개의 댓글