소개
실시간 채팅 앱은 사용자들이 실시간으로 메시지를 주고받을 수 있는 웹 애플리케이션입니다. 이번 블로그 포스트에서는 자바스크립트의 웹 소켓을 활용하여 실시간 채팅 앱을 개발하는 방법을 알아보겠습니다.
웹 소켓이란?
웹 소켓은 클라이언트와 서버 간 양방향 통신을 제공하는 프로토콜입니다. HTTP와 비교하면, HTTP는 클라이언트가 서버로 요청을 보내고 서버는 응답을 보내는 단방향 통신을 수행하는 반면, 웹 소켓은 양방향으로 실시간 데이터를 주고받을 수 있습니다.
개발 환경 설정
이번 예제에서는 Node.js와 Express 프레임워크를 사용하여 웹 서버를 구축하고, Socket.IO 라이브러리를 사용하여 웹 소켓 통신을 구현할 것입니다. 따라서 먼저 Node.js와 Express를 설치해야 합니다.
$ npm install express
$ npm install socket.io
서버 구현
const express = require('express');
const app = express();
const httpServer = require('http').createServer(app);
const io = require('socket.io')(httpServer);
// 클라이언트가 연결되었을 때 실행되는 이벤트 핸들러
io.on('connection', (socket) => {
console.log('클라이언트 연결됨');
// 클라이언트로부터 메시지를 받았을 때 실행되는 이벤트 핸들러
socket.on('message', (data) => {
console.log('메시지 받음:', data);
// 모든 클라이언트에게 메시지 전송
io.emit('message', data);
});
// 클라이언트가 연결 해제되었을 때 실행되는 이벤트 핸들러
socket.on('disconnect', () => {
console.log('클라이언트 연결 해제됨');
});
});
httpServer.listen(3000, () => {
console.log('서버 시작됨');
});
위의 코드는 서버 측 코드입니다. Express를 사용하여 간단한 웹 서버를 생성하고 Socket.IO를 통해 웹 소켓 통신을 설정합니다. 클라이언트 연결, 메시지 수신 및 전송, 연결 해제와 같은 이벤트 핸들러를 구현합니다.
클라이언트 구현
<!DOCTYPE html>
<html>
<head>
<title>실시간 채팅 앱</title>
</head>
<body>
<input type="text" id="messageInput" />
<button id="sendButton">전송</button>
<ul id="messages"></ul>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
// 메시지 수신 이벤트 핸들러
socket.on('message', (data) => {
const messages = document.getElementById('messages');
const li = document.createElement('li');
li.innerHTML = data;
messages.appendChild(li);
});
// 메시지 전송 이벤트 핸들러
document.getElementById('sendButton').addEventListener('click', () => {
const messageInput = document.getElementById('messageInput');
const message = messageInput.value;
socket.emit('message', message);
messageInput.value = '';
});
</script>
</body>
</html>
위의 코드는 클라이언트 측 코드입니다. HTML 파일에서 Socket.IO 클라이언트 스크립트를 로드한 후, 웹 소켓을 통해 서버와 통신합니다. 입력 필드에 메시지를 입력하고 전송 버튼을 클릭하면 서버로 메시지가 전송되며, 서버에서 수신된 메시지는 동적으로 화면에 추가됩니다.
실행 및 테스트
터미널에서 서버를 실행하고 웹 브라우저에서 http://localhost:3000
으로 접속합니다. 두 개 이상의 창을 열고 실시간으로 메시지를 주고받는지 확인합니다.
결론
자바스크립트의 웹 소켓을 활용하여 실시간 채팅 앱을 개발하는 방법을 알아보았습니다. 웹 소켓은 실시간 통신을 구현하는데 매우 유용한 프로토콜입니다. 이를 활용하여 다양한 실시간 애플리케이션을 개발할 수 있습니다.
이 글이 여러분에게 도움이 되길 바랍니다! 자세한 내용은 공식 문서를 참고하시기 바랍니다.