노드 Node.js
10. 웹소켓(WebSocket)과 실시간 데이터 처리
안녕하세요! 태마입니다.
Node.js 기초 강좌입니다.
강좌의 경우
1. 주제 간단 정리
2. 상세 주제 정리
으로 이루어져 있습니다.
노드 Node.js
포스팅 시작하겠습니다 :)
1. 주제 간단 정리
1. 웹소켓(WebSocket)이란?
웹소켓(WebSocket)은 클라이언트와 서버가 실시간으로 데이터를 주고받을 수 있는 프로토콜입니다.
기존 HTTP 요청과 달리, 한 번 연결되면 양방향 통신이 가능합니다.
📌 웹소켓의 특징
✔ 양방향(Bidirectional) 통신 → 서버와 클라이언트가 동시에 데이터 전송 가능
✔ 실시간 데이터 처리 → 채팅, 게임, 주식 데이터 등에 활용
✔ 낮은 오버헤드 → HTTP 요청 대비 네트워크 비용 절감
2. HTTP와 WebSocket 비교
✅ 기존 HTTP 방식
특징설명
요청-응답 방식 | 클라이언트가 요청해야 서버가 응답 가능 |
연결 지속성 없음 | 요청이 끝나면 연결이 종료됨 |
실시간 처리 어려움 | 주기적으로 요청(Polling)해야 함 |
✅ WebSocket 방식
특징설명
양방향 통신 | 서버와 클라이언트가 동시에 데이터 전송 가능 |
연결 유지 | 한 번 연결되면 지속적인 데이터 전송 가능 |
낮은 네트워크 비용 | HTTP 요청 반복 없이 데이터 주고받기 가능 |
📌 웹소켓을 사용하면 채팅, 실시간 알림, 게임 등 다양한 실시간 기능 구현 가능!
✅ 여기까지 웹소켓의 기본 개념과 기존 HTTP 방식과의 차이점을 배웠습니다!
👉 "그렇다면, Node.js에서 웹소켓을 어떻게 구현할까?"
✅ 2부에서 Node.js의 WebSocket 활용 방법을 배워봅시다!
2. 상세 주제 정리
1. WebSocket을 활용한 실시간 서버 구축
✅ 웹소켓 패키지 설치 (ws 모듈 사용)
$ npm install ws
✅ 기본적인 WebSocket 서버 구현
const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 3000 });
wss.on("connection", (ws) => {
console.log("클라이언트가 연결되었습니다.");
ws.on("message", (message) => {
console.log("클라이언트 메시지:", message);
ws.send(`서버 응답: ${message}`);
});
ws.on("close", () => {
console.log("클라이언트 연결 종료");
});
});
console.log("WebSocket 서버 실행 중 (포트 3000)");
📌 웹소켓 서버가 3000번 포트에서 실행되며, 클라이언트와 실시간 데이터 교환 가능!
✅ 웹소켓 클라이언트 연결 (JavaScript 브라우저 코드)
const ws = new WebSocket("ws://localhost:3000");
ws.onopen = () => {
console.log("서버와 연결됨!");
ws.send("안녕하세요, 서버!");
};
ws.onmessage = (event) => {
console.log("서버 응답:", event.data);
};
📌 클라이언트에서 서버와 연결하고 메시지를 주고받을 수 있음!
2. 실시간 채팅 서버 구현 (WebSocket + Express)
✅ 1) Express와 WebSocket 서버 통합
const express = require("express");
const http = require("http");
const WebSocket = require("ws");
const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
wss.on("connection", (ws) => {
ws.on("message", (message) => {
console.log(`클라이언트 메시지: ${message}`);
// 모든 클라이언트에게 메시지 전송 (브로드캐스트)
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
});
server.listen(3000, () => {
console.log("웹소켓 채팅 서버 실행 중 (포트 3000)");
});
📌 모든 연결된 클라이언트에게 메시지를 전송하는 실시간 채팅 서버 구현!
✅ 2) 클라이언트에서 채팅 메시지 전송
const ws = new WebSocket("ws://localhost:3000");
ws.onopen = () => {
console.log("서버와 연결됨!");
ws.send("안녕하세요, 채팅방입니다!");
};
ws.onmessage = (event) => {
console.log("채팅 메시지:", event.data);
};
📌 브라우저에서 실행하면 메시지가 서버로 전송되고, 다른 클라이언트에게 전달됨!
3. 실시간 알림 서비스 구현
✅ 서버에서 특정 이벤트 발생 시 클라이언트에 알림 전송
setInterval(() => {
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send("🔥 새로운 알림이 도착했습니다!");
}
});
}, 5000);
📌 5초마다 연결된 모든 클라이언트에게 알림을 전송하는 기능 추가!
✅ 클라이언트에서 알림 수신 처리
ws.onmessage = (event) => {
console.log("📢 알림 메시지:", event.data);
};
📌 클라이언트가 실시간으로 서버의 알림을 수신할 수 있음!
4. WebSocket과 Socket.io 비교
✅ Socket.io란?
Socket.io는 WebSocket을 기반으로 실시간 기능을 쉽게 구현할 수 있는 라이브러리입니다.
웹소켓이 지원되지 않는 환경에서도 폴링(Polling) 방식으로 자동 대체해 동작합니다.
✅ WebSocket vs Socket.io 비교
구분WebSocketSocket.io
기반 기술 | 표준 WebSocket 프로토콜 | WebSocket + 폴링(Polling) |
브라우저 지원 | 최신 브라우저 지원 | 구형 브라우저까지 지원 |
기능 | 기본 메시지 송수신 | 룸(Room), 자동 재연결, 브로드캐스트 지원 |
복잡도 | 직접 구현 필요 | 편리한 API 제공 |
📌 실시간 기능이 필요한 경우, Socket.io를 사용하면 더 편리함!
✅ 여기까지 WebSocket을 활용한 실시간 데이터 처리 방법을 배웠습니다!
👉 "그렇다면, Node.js에서 JWT(JSON Web Token) 인증을 구현하려면?"
✅ 다음 회차에서 JWT를 활용한 인증 시스템 구축 방법을 배워봅시다!
'IT Developer > Node.js' 카테고리의 다른 글
Node.js 기초 <14. 클라우드 스토리지(AWS S3, Firebase)와 파일 업로드> (0) | 2025.03.16 |
---|---|
Node.js 기초 <13. 파일 업로드와 이미지 처리 (multer 활용)> (0) | 2025.03.15 |
Node.js 기초 <12. Express의 미들웨어와 요청 처리 흐름> (0) | 2025.03.14 |
Node.js 기초 <11. 인증과 보안: JWT, OAuth, 세션 관리> (0) | 2025.03.13 |
Node.js 기초 <9. 파일 시스템(fs 모듈)과 스트림(Stream) 활용> (0) | 2025.03.11 |
Node.js 기초 <8. Node.js와 데이터베이스 (MySQL, PostgreSQL, MongoDB)> (0) | 2025.03.10 |
Node.js 기초 <7. RESTful API 개발: CRUD 구현 및 HTTP 요청 처리> (0) | 2025.03.09 |
Node.js 기초 <6. Express.js로 서버 만들기: 기본 개념과 라우팅> (1) | 2025.03.08 |