Socket.io의 Namespace

Seong Hoon Jung·2025년 2월 21일

1. Namespace란?

Socket.io에서 Namespace(네임스페이스)는 여러 개의 WebSocket 연결을 따로 관리할 수 있도록 해주는 기능입니다.

네임스페이스는 하나의 공유된 연결을 통해 애플리케이션의 로직을 분리할 수 있도록 해주는 통신 채널입니다. 이러한 방식을 멀티플렉싱(multiplexing)이라고도 합니다.

이 기능을 사용하면 이런 장점이 있습니다.

  • 기능별 분리: 채팅, 알림, 게임 등 다른 기능을 각각 따로 관리할 수 있습니다.
  • 성능 향상: 필요 없는 이벤트를 줄여 서버 부담을 줄일 수 있습니다.
  • 접근 제한 가능: 특정 네임스페이스에만 접속할 수 있도록 설정할 수 있습니다.

2. 따라해 보기

1) 프로젝트 시작하기

Node.js 프로젝트를 만들고 socket.io를 설치합니다.

npm init -y
npm install express socket.io

그리고 서버 파일(app.js)을 만들어 expresssocket.io를 불러옵니다.

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);

app.get("/", (req, res) => {
  res.send("Socket.io Namespace 예제");
});

server.listen(3000, () => {
  console.log("서버 실행 중! http://localhost:3000");
});

2) 여러 개의 네임스페이스 만들기

/chat/news라는 네임스페이스를 추가합니다.

클라이언트가 /news 채널로 새로운 뉴스(update)를 요청하면 서버에서는 update 이벤트로 뉴스를 전달합니다.

클라이언트가 /chat 채널로 메시지(message)를 전송하면 /chat에 접속된 모든 참여자에게 메세지를 전파한다.

const chat = io.of("/chat");
const news = io.of("/news");

news.on("connection", (socket) => {
  socket.on("update", () => {
    const newsData = `실시간 뉴스 업데이트: ${new Date().toLocaleTimeString()}`;
    news.emit("update", newsData);
  });
   ...
});
  
chat.on("connection", (socket) => {
  socket.on("message", (msg) => {
    chat.emit("message", msg);
  });
   ...
});  

3. 정리

  • io.of('/namespace')를 사용하면 특정 기능을 따로따로 관리합니다.
  • 클라이언트는 io('/namespace')를 사용해 특정 네임스페이스에 연결하면 됩니다.
  • 네임스페이스를 활용하면 기능별로 코드를 정리하고 성능도 최적화할 수 있습니다.

참고한 글

profile
Seek first his kingdom and his righteousness

0개의 댓글