
앱이나 웹을 개발할 때 실시간 데이터 전송이 필요한 경우가 많다.
이때 사용할 수 있는 대표적인 기술이 SSE(Server-Sent Events), FCM(Firebase Cloud Messaging), 그리고 WebSocket이 있다.
✅ SSE는 서버에서 클라이언트로 데이터를 지속적으로 보내는 방식이며, 주로 실시간 웹 업데이트에 사용.
✅ FCM은 Firebase를 이용한 푸시 알림 서비스로, 웹과 모바일 모두에서 사용 능.
✅ WebSocket은 서버와 클라이언트가 양방향으로 데이터를 주고받을 수 있는 실시간 통신 기술.
이제 세 가지 기술을 비교해보자.
그 전에 Firebase 의 개념부터 알고가자.
Firebase(파이어베이스)는 Google에서 제공하는 클라우드 기반 백엔드 서비스 플랫폼.
쉽게 말하면, 앱 개발에 필요한 서버 기능을 쉽게 사용할 수 있도록 도와주는 서비스이다.
보통 앱을 개발할 때 데이터베이스, 사용자 인증, 푸시 알림, 파일 저장 같은 기능이 필요한데,
이런 기능들을 직접 개발하지 않고 Firebase를 이용하면 간편하게 구현할 수 있다.
| 기능 | 설명 |
|---|---|
| Authentication (인증) | 이메일, 구글, 페이스북, 애플 로그인 같은 사용자 로그인 기능 제공 |
| Firestore / Realtime Database | 클라우드 데이터베이스 (NoSQL 기반) |
| Firebase Cloud Messaging (FCM) | 푸시 알림 전송 기능 |
| Cloud Storage | 사진, 동영상 등 파일 저장 |
| Hosting | 웹사이트를 Firebase 서버에서 배포 가능 |
| Analytics | 앱 사용 통계를 자동으로 수집 |
Firebase를 이용하면 백엔드 서버를 직접 구축하지 않고도 다양한 기능을 활용할 수 있기 때문에,
특히 모바일 앱이나 웹 개발에서 아주 유용하다!
SSE(Server-Sent Events)는 서버가 클라이언트(브라우저)로 지속적으로 데이터를 전송하는 단방향 통신 기술.
HTTP 연결을 유지하면서 서버가 필요할 때마다 데이터를 푸시한다.

EventSource 객체 사용)✔ 장점
❌ 단점
FCM(Firebase Cloud Messaging)은 Google Firebase에서 제공하는 모바일 및 웹 푸시 알림 서비스.

✔ 장점
❌ 단점
WebSocket은 클라이언트와 서버가 실시간으로 양방향 통신을 할 수 있도록 지원하는 프로토콜.
HTTP 기반이 아니라, 한 번 연결이 맺어지면 지속적으로 데이터를 주고받을 수 있는 방식이다.

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}`);
});
});
const socket = new WebSocket('ws://localhost:8080');
socket.onmessage = (event) => {
console.log('서버 메시지:', event.data);
};
socket.onopen = () => {
socket.send('클라이언트에서 서버로 메시지 전송');
};
✔ 장점
❌ 단점
| 비교 항목 | SSE (Server-Sent Events) | FCM (Firebase Cloud Messaging) | WebSocket |
|---|---|---|---|
| 통신 방식 | 단방향 (서버 → 클라이언트) | 단방향 (서버 → 클라이언트) | 양방향 (서버 ↔ 클라이언트) |
| 사용 목적 | 실시간 데이터 스트리밍 | 푸시 알림, 메시지 전송 | 채팅, 게임, 실시간 데이터 공유 |
| 웹 지원 | 브라우저에서 가능 | 웹, 모바일 지원 | 웹, 모바일 지원 |
| 앱 지원 | ❌ (웹 전용) | ✅ (모바일, 웹 지원) | ✅ (모바일, 웹 지원) |
| 백그라운드 작동 | ❌ (탭을 닫으면 끊김) | ✅ (앱이 꺼져도 알림 가능) | ❌ (백그라운드에서 유지 어려움) |
| Google 종속 여부 | ❌ (독립적) | ✅ (Google Firebase 사용) | ❌ (독립적) |