SSE(Server-Sent Events) vs FCM(Firebase Cloud Messaging) vs WebSocket - 언제, 어떻게 사용할까?

하롭·2025년 3월 16일
post-thumbnail

실시간 데이터 전송, 무엇을 선택해야 할까 ⁉️

앱이나 웹을 개발할 때 실시간 데이터 전송이 필요한 경우가 많다.

  • 실시간 스포츠 경기 점수 업데이트
  • 채팅 서비스
  • 모바일 푸시 알림
  • 금융 데이터 실시간 업데이트

이때 사용할 수 있는 대표적인 기술이 SSE(Server-Sent Events), FCM(Firebase Cloud Messaging), 그리고 WebSocket이 있다.

SSE는 서버에서 클라이언트로 데이터를 지속적으로 보내는 방식이며, 주로 실시간 웹 업데이트에 사용.
FCM은 Firebase를 이용한 푸시 알림 서비스로, 웹과 모바일 모두에서 사용 능.
WebSocket은 서버와 클라이언트가 양방향으로 데이터를 주고받을 수 있는 실시간 통신 기술.

이제 세 가지 기술을 비교해보자.


그 전에 Firebase 의 개념부터 알고가자.

🔥 Firebase란?

✅ Firebase 개념

Firebase(파이어베이스)는 Google에서 제공하는 클라우드 기반 백엔드 서비스 플랫폼.

쉽게 말하면, 앱 개발에 필요한 서버 기능을 쉽게 사용할 수 있도록 도와주는 서비스이다.

보통 앱을 개발할 때 데이터베이스, 사용자 인증, 푸시 알림, 파일 저장 같은 기능이 필요한데,
이런 기능들을 직접 개발하지 않고 Firebase를 이용하면 간편하게 구현할 수 있다.

✅ Firebase의 주요 기능

기능설명
Authentication (인증)이메일, 구글, 페이스북, 애플 로그인 같은 사용자 로그인 기능 제공
Firestore / Realtime Database클라우드 데이터베이스 (NoSQL 기반)
Firebase Cloud Messaging (FCM)푸시 알림 전송 기능
Cloud Storage사진, 동영상 등 파일 저장
Hosting웹사이트를 Firebase 서버에서 배포 가능
Analytics앱 사용 통계를 자동으로 수집

Firebase를 이용하면 백엔드 서버를 직접 구축하지 않고도 다양한 기능을 활용할 수 있기 때문에,
특히 모바일 앱이나 웹 개발에서 아주 유용하다!


🔄 SSE(Server-Sent Events)란?

✅ SSE 개념

SSE(Server-Sent Events)서버가 클라이언트(브라우저)로 지속적으로 데이터를 전송하는 단방향 통신 기술.

HTTP 연결을 유지하면서 서버가 필요할 때마다 데이터를 푸시한다.

✅ SSE 동작 방식

  1. 클라이언트(브라우저)가 서버에 연결 (EventSource 객체 사용)
  2. 서버는 HTTP 연결을 유지하며 데이터를 전송
  3. 클라이언트가 데이터를 받아 화면을 업데이트
  4. 연결이 끊기면 자동으로 재연결

✅ SSE의 장점 & 단점

장점

  • 단순한 HTTP 기반으로 구현이 쉬움
  • 브라우저에서 기본 지원 (별도 라이브러리 불필요)
  • 자동 재연결 기능 제공

단점

  • 서버에서 클라이언트로 단방향 통신만 가능
  • 다수의 연결이 발생하면 서버 부담 증가
  • 모바일 앱에서 사용하기 어려움 (브라우저 전용)

📩 FCM(Firebase Cloud Messaging)이란?

✅ FCM 개념

FCM(Firebase Cloud Messaging)은 Google Firebase에서 제공하는 모바일 및 웹 푸시 알림 서비스.

✅ FCM 동작 방식

  1. 클라이언트(앱, 웹)가 Firebase 서버에서 FCM 토큰을 발급받음
  2. 서버에서 Firebase에 "이 사용자에게 메시지를 보내라" 요청
  3. Firebase가 사용자의 기기로 푸시 메시지 전송
  4. 사용자는 앱이 꺼져 있어도 알림을 받을 수 있음

✅ FCM의 장점 & 단점

장점

  • 웹, 모바일 모두 지원
  • 백그라운드에서도 작동 가능 (앱이 꺼져도 알림 수신 가능)
  • 양방향 통신 가능 (클라이언트 → 서버도 가능)

단점

  • Google Firebase에 종속됨
  • 네트워크 상태가 안 좋으면 푸시 알림이 늦게 도착할 수 있음

🌐 WebSocket이란?

✅ WebSocket 개념

WebSocket클라이언트와 서버가 실시간으로 양방향 통신을 할 수 있도록 지원하는 프로토콜.

HTTP 기반이 아니라, 한 번 연결이 맺어지면 지속적으로 데이터를 주고받을 수 있는 방식이다.

✅ WebSocket 동작 방식

  1. 클라이언트가 서버와 WebSocket 연결을 수립
  2. 연결이 유지된 상태에서 서버와 클라이언트가 자유롭게 데이터를 주고받을 수 있음
  3. 연결을 유지하면서 채팅, 알림, 실시간 데이터 업데이트 가능

✅ WebSocket 코드 예제

📌 서버(Node.js + WebSocket)

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });

server.on('connection', ws => {
    console.log('새로운 클라이언트 연결됨');
    ws.send('서버에서 클라이언트로 메시지 전송');
    ws.on('message', message => {
        console.log(`클라이언트 메시지: ${message}`);
    });
});

📌 클라이언트(JavaScript)

const socket = new WebSocket('ws://localhost:8080');

socket.onmessage = (event) => {
    console.log('서버 메시지:', event.data);
};

socket.onopen = () => {
    socket.send('클라이언트에서 서버로 메시지 전송');
};

✅ WebSocket의 장점 & 단점

장점

  • 양방향 통신 가능 (서버 ↔ 클라이언트)
  • 빠른 데이터 전송 (HTTP보다 가벼운 프로토콜)
  • 실시간 채팅, 주식 거래, 게임 등 빠른 응답이 필요한 서비스에 적합

단점

  • 브라우저 지원 필요 (일부 환경에서 제한될 수 있음)
  • 연결이 많아지면 서버 부하 증가 가능

SSE 🆚 FCM 🆚 WebSocket

비교 항목SSE (Server-Sent Events)FCM (Firebase Cloud Messaging)WebSocket
통신 방식단방향 (서버 → 클라이언트)단방향 (서버 → 클라이언트)양방향 (서버 ↔ 클라이언트)
사용 목적실시간 데이터 스트리밍푸시 알림, 메시지 전송채팅, 게임, 실시간 데이터 공유
웹 지원브라우저에서 가능웹, 모바일 지원웹, 모바일 지원
앱 지원❌ (웹 전용)✅ (모바일, 웹 지원)✅ (모바일, 웹 지원)
백그라운드 작동❌ (탭을 닫으면 끊김)✅ (앱이 꺼져도 알림 가능)❌ (백그라운드에서 유지 어려움)
Google 종속 여부❌ (독립적)✅ (Google Firebase 사용)❌ (독립적)

🤷‍ 언제 SSE, FCM, WebSocket을 사용해야 할까?

SSE를 사용해야 하는 경우

  • 실시간 데이터 스트리밍이 필요한 경우 (주식, 스포츠 경기 점수 등)
  • 브라우저에서 서버 데이터를 지속적으로 받아야 할 때
  • 외부 서비스(Firebase) 없이 자체 서버를 운영하고 싶을 때

FCM을 사용해야 하는 경우

  • 모바일 푸시 알림이 필요한 경우
  • 앱이 꺼져 있어도 알림을 보내야 할 때
  • 웹과 모바일을 모두 지원해야 할 때

WebSocket을 사용해야 하는 경우

  • 실시간 채팅 기능이 필요할 때 💬
  • 게임, 주식 거래 시스템과 같이 빠른 응답이 필요한 경우
  • 서버와 클라이언트가 양방향으로 데이터를 주고받아야 할 때

💡결론

  • SSE는 실시간 데이터 스트리밍에 적합하지만, 브라우저에서만 동작하고 단방향 통신만 가능
  • FCM은 푸시 알림을 위한 서비스로, 모바일과 웹에서 모두 사용 가능하며 백그라운드에서도 작동
  • WebSocket은 실시간 양방향 통신이 필요한 경우에 적합하며, 채팅, 주식 거래, 게임 등에 많이 사용됨
  • 사용 목적에 따라 적절한 기술을 선택하는 것이 중요!
profile
휘발 방지 로그

0개의 댓글