티스토리 뷰
웹 개발 실무 기술 A to Z # 18 - 실시간 데이터 스트리밍: Kafka, WebSockets, Firebase Realtime Database 활용
octo54 2025. 2. 25. 12:31웹 개발 실무 기술 A to Z
웹 애플리케이션에서 실시간 데이터 처리 및 스트리밍은 사용자 경험을 향상시키고, 빠른 데이터 전송을 가능하게 합니다.
✔️ Kafka → 대량의 데이터를 실시간으로 처리하는 메시지 브로커
✔️ WebSockets → 클라이언트-서버 간 양방향 통신
✔️ Firebase Realtime Database → 실시간 데이터 동기화
이번 글에서는 Kafka, WebSockets, Firebase Realtime Database를 활용하여 실시간 기능을 구현하는 방법을 설명하겠습니다.
1. 실시간 데이터 스트리밍이 필요한 이유
✔️ 사용자 인터페이스 반응 속도 개선 → 실시간 알림, 채팅 기능 등
✔️ 데이터 업데이트를 즉시 반영 → 주식 거래, 스포츠 경기 실시간 업데이트
✔️ 서버 리소스 절약 → 불필요한 API 요청 제거 (폴링 방식 대체)
✅ 실시간 기능을 적용하면 사용자 경험이 향상되고 시스템 효율성 증가!
2. Apache Kafka – 대규모 데이터 스트리밍
2-1. Apache Kafka란?
✔️ 대량의 데이터를 실시간으로 처리하는 분산 메시지 브로커
✔️ 로그 데이터, IoT 센서 데이터, 트랜잭션 로그 등 실시간 이벤트 처리에 활용
✔️ 프로듀서(Producer), 컨슈머(Consumer), 브로커(Broker)로 구성
2-2. Kafka 설치 및 실행
(1) Kafka 다운로드 및 실행
wget https://downloads.apache.org/kafka/3.0.0/kafka_2.13-3.0.0.tgz
tar -xzf kafka_2.13-3.0.0.tgz
cd kafka_2.13-3.0.0
(2) Zookeeper 및 Kafka 실행
bin/zookeeper-server-start.sh config/zookeeper.properties &
bin/kafka-server-start.sh config/server.properties &
✅ Kafka가 실행되면 메시지를 실시간으로 송수신 가능!
2-3. Kafka 프로듀서 & 컨슈머 구현 (Node.js)
(1) Kafka 패키지 설치
npm install kafkajs
(2) 메시지 전송 (Producer)
const { Kafka } = require("kafkajs");
const kafka = new Kafka({ clientId: "my-app", brokers: ["localhost:9092"] });
const producer = kafka.producer();
const run = async () => {
await producer.connect();
await producer.send({
topic: "message-topic",
messages: [{ value: "Hello, Kafka!" }],
});
await producer.disconnect();
};
run();
(3) 메시지 수신 (Consumer)
const consumer = kafka.consumer({ groupId: "test-group" });
const run = async () => {
await consumer.connect();
await consumer.subscribe({ topic: "message-topic", fromBeginning: true });
await consumer.run({
eachMessage: async ({ message }) => {
console.log(`Received message: ${message.value.toString()}`);
},
});
};
run();
✅ Kafka를 사용하면 대량의 데이터를 효율적으로 실시간 처리 가능!
3. WebSockets – 클라이언트-서버 실시간 양방향 통신
3-1. WebSockets 개념
✔️ HTTP 기반의 지속적인 양방향 연결 방식
✔️ 채팅, 실시간 알림, 협업 도구 등에 사용
✔️ Polling 방식보다 네트워크 부하 감소
3-2. WebSockets 서버 구현 (Node.js + Socket.io)
(1) 패키지 설치
npm install socket.io express
(2) WebSockets 서버 코드
const express = require("express");
const http = require("http");
const { Server } = require("socket.io");
const app = express();
const server = http.createServer(app);
const io = new Server(server);
io.on("connection", (socket) => {
console.log("A user connected");
socket.on("message", (msg) => {
console.log("Received message:", msg);
io.emit("message", msg);
});
socket.on("disconnect", () => {
console.log("User disconnected");
});
});
server.listen(3000, () => console.log("WebSocket server running on port 3000"));
✅ WebSockets를 사용하면 실시간 채팅 및 알림 기능 구현 가능!
3-3. WebSockets 클라이언트 코드
const socket = io("http://localhost:3000");
socket.on("message", (msg) => {
console.log("New message:", msg);
});
socket.emit("message", "Hello, WebSockets!");
✅ WebSockets을 사용하면 서버와 클라이언트 간 실시간 데이터 전송 가능!
4. Firebase Realtime Database – 실시간 동기화
4-1. Firebase Realtime Database란?
✔️ 클라이언트 간 데이터를 실시간으로 동기화할 수 있는 Firebase 서비스
✔️ 웹 & 모바일 애플리케이션에서 실시간 데이터 처리가 필요할 때 적합
✔️ Firestore와 차이점: Firestore는 구조화된 쿼리 지원, Realtime Database는 빠른 실시간 업데이트에 강점
4-2. Firebase 설정 및 데이터 저장
(1) Firebase 패키지 설치
npm install firebase-admin
(2) Firebase 초기화 (firebase.js)
const admin = require("firebase-admin");
const serviceAccount = require("./firebase-key.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://your-project-id.firebaseio.com",
});
const db = admin.database();
(3) 실시간 데이터 저장 및 구독
const ref = db.ref("messages");
// 데이터 저장
ref.push({ username: "Alice", message: "Hello, Firebase!" });
// 데이터 변경 감지
ref.on("child_added", (snapshot) => {
console.log("New message:", snapshot.val());
});
✅ Firebase Realtime Database를 활용하면 실시간 데이터 업데이트 구현 가능!
5. 실시간 데이터 스트리밍 적용 전후 비교
5-1. 적용 전
- Polling 방식 사용 → 서버 부하 증가
- 데이터 변경 사항을 즉시 반영하지 못함
- 사용자 경험 저하 → 실시간 피드백 부족
5-2. 적용 후
✔️ Kafka로 대량의 데이터 실시간 처리
✔️ WebSockets으로 서버-클라이언트 간 실시간 데이터 전송
✔️ Firebase Realtime Database로 클라이언트 간 실시간 동기화
✅ 실시간 기술을 적용하면 사용자 경험 및 시스템 효율성 극대화 가능!
6. 마무리 및 다음 글 예고
이번 글에서는 Kafka, WebSockets, Firebase Realtime Database를 활용한 실시간 데이터 스트리밍 방법을 살펴봤습니다.
다음 글에서는 **AI 및 머신러닝을 활용한 웹 애플리케이션 최적화 (TensorFlow.js, OpenAI API, Chatbots)**을 소개하겠습니다.
다음 글 예고: "AI & 머신러닝 기반 웹 애플리케이션 – TensorFlow.js, OpenAI API, Chatbots 활용" 🚀
'project > 웹 개발 실무 기술 A to Z' 카테고리의 다른 글
- Total
- Today
- Yesterday
- PostgreSQL
- Python
- rag
- til
- 관리자
- nodejs
- 개발블로그
- Webpack
- 로컬LLM
- babel
- nextJS
- kotlin
- 백엔드개발
- Next.js
- 리액트
- REACT
- LangChain
- Project
- github
- 페이지
- 프론트엔드
- Ktor
- llm
- 웹개발
- AI챗봇
- Page
- fastapi
- Docker
- 백엔드
- 챗봇개발
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |