실시간 통신은 현대 웹 애플리케이션에서 필수적인 요소가 되었습니다. 특히, 사용자 간의 즉각적인 상호작용이 필요한 경우, Socket.IO와 같은 라이브러리가 큰 역할을 합니다. 이번 글에서는 Socket.IO를 활용한 실시간 통신의 기초와 함께, 실제로 서버와 클라이언트 간의 통신을 설정하는 방법에 대해 알아보겠습니다.

Socket.IO란?

Socket.IO는 웹 소켓을 기반으로 한 실시간 통신 라이브러리로, 클라이언트와 서버 간의 양방향 통신을 지원합니다. HTTP 프로토콜보다 빠른 실시간 데이터 전송을 가능하게 하며, 웹 브라우저와 모바일 환경 모두에서 사용할 수 있습니다. 또한, Socket.IO는 다양한 브라우저와의 호환성 문제를 해결해 주며, 자동으로 폴백(fallback) 메커니즘을 제공합니다.

기본 설치

Socket.IO를 사용하기 위해 Node.js와 npm이 설치되어 있어야 합니다. 아래 명령어로 Socket.IO를 설치할 수 있습니다.

npm install socket.io

서버 설정

이제 기본적인 Socket.IO 서버를 설정해 보겠습니다. 아래 코드는 Express.js를 사용하여 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);

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

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

    socket.on('chat message', (msg) => {
        console.log('메시지: ' + msg);
        io.emit('chat message', msg);
    });

    socket.on('disconnect', () => {
        console.log('클라이언트 연결 종료');
    });
});

const PORT = process.env.PORT || 3000;
server.listen(PORT, () => {
    console.log(서버가 ${PORT} 포트에서 실행 중입니다.);
});

위 코드는 기본적인 Express 서버를 설정하고, Socket.IO를 통해 클라이언트의 연결을 처리합니다. 클라이언트가 'chat message' 이벤트를 서버에 전송하면, 서버는 이를 모든 클라이언트에게 다시 브로드캐스트합니다.

클라이언트 설정

이제 클라이언트 측 코드를 작성해 보겠습니다. index.html 파일을 만들고 다음과 같이 작성합니다:

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Socket.IO Chat</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();

        function sendMessage() {
            const msg = document.getElementById('message').value;
            socket.emit('chat message', msg);
            document.getElementById('message').value = '';
            return false; // 폼 제출 방지
        }

        socket.on('chat message', (msg) => {
            const item = document.createElement('li');
            item.textContent = msg;
            document.getElementById('messages').appendChild(item);
        });
    </script>
</head>
<body>
    <ul id="messages"></ul>
    <form onsubmit="return sendMessage();">
        <input id="message" autocomplete="off" /><button>전송</button>
    </form>
</body>
</html>

위 코드에서는 클라이언트가 입력한 메시지를 서버로 전송하고, 서버에서 브로드캐스트된 메시지를 수신하여 화면에 표시합니다.

실시간 통신의 활용

Socket.IO를 통해 구축한 실시간 통신 시스템은 여러 분야에서 활용될 수 있습니다. 예를 들어, 채팅 애플리케이션, 실시간 알림 시스템, 게임 서버 등 다양한 곳에 적용 가능합니다. 특히, 여러 사용자가 동시에 상호작용해야 하는 애플리케이션에서는 Socket.IO의 장점이 더욱 두드러집니다.

마무리

Socket.IO는 실시간 웹 애플리케이션 개발에 있어 매우 유용한 도구입니다. 위에서 설명한 간단한 예제를 바탕으로, 여러분의 프로젝트에 Socket.IO를 적용해 보세요. 기본적인 실시간 통신 기능 외에도, Socket.IO는 방(room) 기능, 네임스페이스(namespace) 지원, 사용자 인증 등 다양한 고급 기능을 제공하므로 이를 적극 활용해 보시기 바랍니다. 실시간 통신을 통해 사용자의 경험을 한층 향상시킬 수 있을 것입니다.