본문 바로가기

개발

Node.js를 활용한 실시간 통신과 웹소켓

Node.js는 실시간 통신과 웹 소켓을 통한 양방향 통신에 매우 적합한 환경을 제공합니다. 이 글에서는 Node.js를 사용하여 실시간 통신을 구현하는 방법과 웹 소켓을 활용하는 방법에 대해 살펴보겠습니다.

실시간 통신은 사용자와 서버 간에 데이터를 실시간으로 주고받는 기술을 말합니다. 예를 들어 채팅 애플리케이션에서는 사용자가 메시지를 보내면 다른 사용자들에게 실시간으로 전달되어야 합니다. 이를 위해 Node.js는 이벤트 기반 아키텍처를 통해 실시간 통신을 가능하게 합니다. Node.js는 단일 스레드 이벤트 루프를 사용하여 여러 클라이언트와 동시에 연결하고 통신할 수 있습니다.

웹 소켓은 HTML5에서 새롭게 도입된 프로토콜로, 클라이언트와 서버 간의 양방향 통신을 가능하게 합니다. 웹 소켓은 HTTP와는 달리 지속적인 연결을 유지하며 데이터를 전송할 수 있습니다. 이를 통해 실시간으로 데이터를 주고받을 수 있고, 서버에서 데이터를 전송하거나 클라이언트에서 요청을 보낼 수 있습니다.

Node.js에서 웹 소켓을 사용하기 위해 ws 라이브러리를 활용할 수 있습니다. ws 라이브러리는 웹 소켓 서버를 생성하고 관리하는 데 도움을 주는 도구입니다. 이 라이브러리를 사용하여 간단한 웹 소켓 서버를 만들어 보겠습니다.

먼저 ws 라이브러리를 설치합니다. 터미널에서 다음과 같은 명령을 실행합니다

 

npm install ws

웹 소켓 서버를 생성하기위해서는 아래 코드를 작성하시면됩니다.

const WebSocket = require('ws');

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

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

  ws.on('message', (message) => {
    console.log(`클라이언트로부터 메시지를 받았습니다: ${message}`);

    // 클라이언트로 응답을 보냅니다.
    ws.send('서버에서 클라이언트로 메시지를 보냅니다.');
  });
});

 

위 코드에서는 웹 소켓 서버를 생성하고 클라이언트의 연결을 기다립니다. 클라이언트가 연결되면 connection 이벤트가 발생하고 콜백 함수가 실행됩니다. 클라이언트로부터 메시지를 받으면 message 이벤트가 발생하고 콜백 함수에서 해당 메시지를 처리할 수 있습니다.

 

마지막으로 서버에서 클라이언트로 메시지를 보내기 위해 send 메서드를 사용할 수 있습니다.

클라이언트 측에서도 웹 소켓을 사용하기 위해 JavaScript의 WebSocket 객체를 활용할 수 있습니다. 클라이언트에서 서버로 메시지를 보내고 서버에서 온 메시지를 받기 위해 다음과 같은 코드를 작성할 수 있습니다

const socket = new WebSocket('ws://localhost:8080');

socket.onopen = () => {
  console.log('서버에 연결되었습니다.');

  // 서버로 메시지를 보냅니다.
  socket.send('클라이언트에서 서버로 메시지를 보냅니다.');
};

socket.onmessage = (event) => {
  console.log(`서버로부터 메시지를 받았습니다: ${event.data}`);
};

 

위 코드에서는 웹 소켓을 생성하고 서버에 연결합니다. 연결이 성공하면 open 이벤트가 발생하고 콜백 함수에서 해당 메시지를 처리할 수 있습니다. 마찬가지로 서버로부터 메시지를 받으면 message 이벤트가 발생하고 콜백 함수에서 해당 메시지를 처리할 수 있습니다.

 

이렇게 Node.js와 웹 소켓을 활용하여 실시간 통신을 구현할 수 있습니다. 이를 응용하면 실시간 채팅 애플리케이션, 협업 도구, 실시간 대시보드 등 다양한 실시간 기능을 개발할 수 있습니다. Node.js와 웹 소켓은 뛰어난 성능과 확장성을 제공하므로 실시간 통신을 구현하는 데 이상적인 선택입니다. 그럼 Node.js와 웹 소켓을 활용하여 다양한 실시간 애플리케이션을 만들어보세요!