자바스크립트 웹 소켓을 활용한 채팅 기능

자바스크립트를 사용하여 웹 애플리케이션에 실시간 채팅 기능을 추가하는 방법을 알아보겠습니다. 이를 위해 웹 소켓 (WebSocket) 프로토콜을 사용하겠습니다. 웹 소켓은 사용자의 웹 브라우저와 서버 간에 양방향 통신을 제공하는 기술입니다.

웹 소켓의 기본 개념

웹 소켓 채팅 구현 절차

  1. 클라이언트의 웹 브라우저에서 웹 소켓 연결을 엽니다.
  2. 서버는 클라이언트가 연결되었음을 인식하고, 클라이언트를 소켓 연결에 추가합니다.
  3. 클라이언트가 채팅 메시지를 입력하면, 메시지를 서버에 전송합니다.
  4. 서버는 받은 메시지를 다른 모든 클라이언트에게 전달합니다.
  5. 서버에서 받은 메시지를 클라이언트의 웹 브라우저에서 표시합니다.

예제 코드

아래는 웹 소켓을 사용하여 채팅 기능을 구현한 예제 코드입니다. 이 예제 코드는 클라이언트와 서버간의 간단한 채팅을 할 수 있는 기능을 제공합니다.

// 클라이언트 측 코드

const socket = new WebSocket('ws://localhost:3000'); // 서버의 웹 소켓 주소에 연결

socket.addEventListener('open', () => {
  console.log('연결이 열렸습니다.');

  // 메시지 전송 예시
  const message = {
    user: 'John',
    content: 'Hello, World!'
  };
  socket.send(JSON.stringify(message));
});

socket.addEventListener('message', (event) => {
  console.log('새로운 메시지가 도착했습니다:', event.data);

  // 메시지 처리 예시
  const message = JSON.parse(event.data);
  console.log('받은 메시지:', message.user, message.content);
});

// 서버 측 코드

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 3000 });

wss.on('connection', (ws) => {
  console.log('새로운 클라이언트가 연결되었습니다.');

  ws.on('message', (message) => {
    console.log('새로운 메시지가 도착했습니다:', message);

    // 메시지 전달 예시
    wss.clients.forEach((client) => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });
});

위의 예제 코드에서는 클라이언트는 ws://localhost:3000 주소로 서버에 웹 소켓 연결을 엽니다. 서버는 3000 포트로 웹 소켓을 열어 클라이언트의 연결을 기다립니다. 클라이언트는 연결이 열리면 “Hello, World!” 메시지를 보내고, 서버는 이 메시지를 모든 클라이언트에게 전달합니다.

이와 같은 방식으로 자바스크립트 웹 소켓을 활용하여 채팅 기능을 구현할 수 있습니다. 추가적인 기능이나 보안을 고려해야 하는 경우, 실제 프로덕션 환경에 맞게 수정 및 보완해야 합니다.