SSE vs FCM vs WebSocket

일단 해볼게·2023년 6월 4일
1

Springboot

목록 보기
22/26

SSE

SSE란?

Server-Sent-Event의 약자로 서버의 데이터를 실시간으로, 지속적으로 Streaming 하는 기술이다.

SSE 작동 원리

첫 연결시에 데이터를 주고받은 뒤 연결된 상태를 유지하고 단방향으로 서버가 일방적으로 데이터를 전송한다. (클라이언트는 데이터 수신만 가능하다.)

SSE 장점

  • HTTP를 통해 통신하므로 다른 프로토콜이 필요가 없다.
  • HTML과 JavaScript만으로 구현할 수 있다.
  • 웹 표준으로써 IE를 제외한 모든 브라우저에서 지원되며, IE역시 polyfill을 통해 지원이 가능하다.
    • polyfill : 브라우저가 지원하지 않는 API를 플러그인이나 JavaScript 등으로 흉내 내 구현한 것을 뜻한다.

SSE의 단점

  • payload 크기가 제한적이기 때문에 알림에 많은 데이터를 담을 수 없다.
  • 지원되지 않는 브라우저를 사용하는 사용자의 경우에는 중요한 알림을 아예 받지 못할 가능성이 존재

FCM

FCM이란?

Firebase Cloud Messaging의 약자로 Android, iOS 및 웹 애플리케이션의 메시지 및 알림을위한 크로스 플랫폼 클라우드 솔루션이다.

FCM 작동 원리

클라이언트를 위한 키를 FCM 서버를 통해 얻는 단계

  • Firebase 서버에 키 획득을 위한 요청을 보냄
  • Firebase 서버에서 키를 만들어 클라이언트에 전달
  • 클라이언트에 전달된 키를 서버에 전송
  • 서버는 전달받은 키를 db에 저장하여 타겟 모바일의 identification으로 사용

서버에서 데이터를 스마트폰에 전달하는 절차

  • 서버에서 데이터를 타겟 클라이언트에 전달하기 위해 DB에서 키를 획득
  • DB의 키와 전송하고자 하는 데이터를 HTTP 통신으로 Firebase 서버에 전달
  • Firebase 서버에서는 전달받은 키값을 식별해 어떤 클라이언트인지를 식별
  • 식별된 클라이언트에 데이터 전달

FCM의 장점

  • FCM은 교차 플랫폼 메시지 솔루션이기 때문에 FCM을 이용해서 개발을 진행하면, 플랫폼에 종속되지 않고 Push 메시지를 전송할 수 있다.
  • FCM에서 제공하는 여러 기능들도 함께 사용 가능하다.
  • 기능 구축에 시간과 비용이 줄어든다.
  • 클라우드 메시징 서버를 중간에 둠으로써, 사용자는 낮은 배터리와 네트워크의 사용만으로도 메세지를 실시간으로 송수신 처리를 할 수 있다.

FCM의 단점

  • SSE에 비해서 별도의 설정이 추가로 필요하다.
  • real-time 서비스이긴 하지만 장치 연결 상태, 메시지의 크기와 포맷, 그리고 네트워크 상태 등 전송 시간이 지연될 수 있는 요소들이 존재한다.
  • SSE의 실시간성에 비해서 느린 편이기 때문에 연성 실시간(soft real-time) 시스템에 적합하다.

WebSocket

WebSocket이란?

서버와 클라이언트 간에 socket connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술이다.

WebSocket 작동 원리

  • 서버와 클라이언트간의 웹소켓 연결을 HTTP프로토콜을 통해 이루어진다.
  • 연결이 정상적으로 이루어진다면 서버와 클라이언트 간에 웹소켓 연결(TCP/IP기반)이 이루어지고 일정 시간이 지나면 HTTP연결은 자동으로 끊어진다.
  • 기본적으로 웹소켓 API는 아주 간단한 기능들만을 제공하기 때문에 대부분의 경우 SockJS나 Socket.IO같은 오픈 소스 라이브러리를 많이 사용하고 있으며 메시지 포맷 또한 STOMP같은 프로토콜을 같이 이용한다.

WebSocket의 장점

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

WebSocket의 단점

  • 배터리 소모량이 크다.
  • 연결이 끊기면 자동 재접속이 되지 않는다.

참고

https://qjadud22.tistory.com/70

https://donghun.dev/Firebase-Cloud-Messaging

https://maruzzing.github.io/study/etc/FCM(Firebase-Cloud-Messaging)이란/

https://doozi0316.tistory.com/entry/WebSocket이란-개념과-동작-과정-socketio-Polling-Streaming

https://surviveasdev.tistory.com/entry/웹소켓-과-SSEServer-Sent-Event-차이점-알아보고-사용해보기

https://zuminternet.github.io/FCM-PUSH/

https://headf1rst.github.io/TIL/push-notification

https://www.theteams.kr/teams/6045/post/69819

https://taetaetae.github.io/2019/01/02/faster-parallel-processes/

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글