Node.js 를 배워보자/7. 웹 소켓

Node.js에서 웹 소켓 사용하기 (Socket.IO)

_Blue_Sky_ 2024. 10. 1. 09:11
728x90
728x90

Node.js에서 웹 소켓 사용하기 (Socket.IO) 심층 분석

서론

Node.js는 비동기 I/O 모델을 기반으로 실시간 웹 애플리케이션 개발에 매우 적합한 환경을 제공합니다. 특히, 웹 소켓은 서버와 클라이언트 간의 양방향 실시간 통신을 가능하게 하여 채팅, 온라인 게임, 협업 도구 등 다양한 분야에서 활용되고 있습니다. Socket.IO는 Node.js에서 웹 소켓을 쉽게 사용할 수 있도록 도와주는 강력한 라이브러리입니다.

이 글에서는 Socket.IO를 이용하여 Node.js에서 웹 소켓을 구현하는 방법을 상세하게 설명하고, 다양한 예제와 함께 핵심 개념을 짚어보겠습니다.

728x90

Socket.IO 설치 및 초기 설정

먼저, Node.js와 npm(또는 yarn)이 설치되어 있어야 합니다. 새로운 프로젝트 디렉토리를 생성하고 다음 명령어를 실행하여 Socket.IO를 설치합니다.

npm install socket.io
 

다음은 간단한 Socket.IO 서버를 구현하는 예시입니다.

const express = require('express');
const http = require('http');
const socketIO = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIO(server);

io.on('connection', (socket) => {
    console.log('A user connected');

    socket.on('disconnect', () => {
        console.log('A user disconnected');
    });

    socket.on('chat message', (msg) => {
        io.emit('chat message', msg);
    });
});

server.listen(3000, () => {
    console.log('listening on *:3000');
});
 
  • express: 웹 서버를 구축하기 위한 프레임워크
  • http: Node.js의 기본 HTTP 모듈
  • socketIO: Socket.IO 라이브러리

위 코드는 간단한 채팅 서버의 기본적인 구조를 보여줍니다. 클라이언트가 연결되면 connection 이벤트가 발생하고, 클라이언트가 메시지를 보내면 chat message 이벤트가 발생합니다. 서버는 받은 메시지를 모든 연결된 클라이언트에게 다시 전달합니다.

Socket.IO 핵심 개념

  • io 객체: 서버 전체를 나타내는 객체입니다. 모든 소켓 연결을 관리하고, 이벤트를 방송하는 데 사용됩니다.
  • socket 객체: 개별 클라이언트 연결을 나타내는 객체입니다. 특정 클라이언트에게 메시지를 보내거나 이벤트를 발생시키는 데 사용됩니다.
  • 이벤트: 클라이언트와 서버 간의 통신을 위한 신호입니다. emit 메서드를 사용하여 이벤트를 발생시키고, on 메서드를 사용하여 이벤트를 수신합니다.
  • 방: 특정 관심사를 가진 클라이언트들을 그룹화하는 기능입니다. 방에 속한 클라이언트들에게만 메시지를 전달할 수 있습니다.

다양한 기능 구현

  • 개별 클라이언트에게 메시지 전송: socket.emit() 메서드를 사용합니다.
  • 모든 클라이언트에게 메시지 전송: io.emit() 메서드를 사용합니다.
  • 특정 방에 속한 클라이언트에게 메시지 전송: io.to('방 이름').emit() 메서드를 사용합니다.
  • 방 생성 및 참여: socket.join('방 이름') 메서드를 사용하여 방에 참여하고, socket.leave('방 이름') 메서드를 사용하여 방을 나갑니다.
  • 네임스페이스: 서버 내에서 서로 다른 기능을 가진 소켓을 분리하여 관리하는 기능입니다.
  • 인증: 토큰이나 세션을 사용하여 클라이언트를 인증하고, 권한을 부여할 수 있습니다.

실제 예제: 채팅 애플리케이션 구현

// ... (위의 코드와 동일)

io.on('connection', (socket) => {
    // ...

    socket.on('join room', (roomName) => {
        socket.join(roomName);
        socket.broadcast.to(roomName).emit('user joined', socket.id);
    });

    socket.on('chat message', (msg) => {
        io.to(socket.room).emit('chat message', { user: socket.id, message: msg });
    });

    socket.on('disconnect', () => {
        // ...
    });
});
 

위 코드는 채팅방 기능을 추가한 예시입니다. 클라이언트가 채팅방에 참여하면 다른 사용자에게 알리고, 메시지를 보내면 해당 채팅방에 있는 모든 사용자에게 메시지를 전달합니다.

결론

Socket.IO는 Node.js에서 웹 소켓을 쉽고 효율적으로 사용할 수 있도록 도와주는 강력한 도구입니다. 이 글에서는 Socket.IO의 기본 개념과 다양한 기능을 살펴보고, 실제 예제를 통해 웹 소켓 애플리케이션을 개발하는 방법을 알아보았습니다. Socket.IO를 활용하여 더욱 풍부하고 실시간적인 웹 애플리케이션을 개발해 보세요.

추가적으로 다룰 수 있는 내용

  • 오류 처리: 에러 발생 시 적절하게 처리하는 방법
  • 스케일링: 많은 사용자가 접속했을 때 성능을 유지하는 방법
  • 보안: 데이터를 안전하게 보호하는 방법
  • 클라이언트 라이브러리: Socket.IO 클라이언트 라이브러리를 사용하여 다양한 프론트엔드 환경에서 웹 소켓을 활용하는 방법
  • 고급 기능: 네임스페이스, 인증, 방, 적응형 바이팅 등 Socket.IO가 제공하는 다양한 고급 기능

 

728x90
728x90