HTML5 웹 소켓(WebSockets)
웹 소켓의 개념과 필요성(Concept and Necessity of WebSockets)
웹 소켓(WebSockets)은 HTML5에서 제공하는 양방향 통신 프로토콜로, 클라이언트와 서버 간에 실시간으로 데이터를 주고받을 수 있습니다. HTTP의 요청-응답 방식과 달리, 웹 소켓은 연결이 한 번 성립되면 클라이언트와 서버 간에 지속적인 데이터 통신이 가능해집니다.
필요성:
- 실시간 애플리케이션: 채팅 애플리케이션, 온라인 게임, 실시간 데이터 피드 등의 구현에 적합.
- 네트워크 효율성: HTTP보다 적은 오버헤드로 양방향 통신을 제공, 네트워크 사용량 감소.
- 빠른 응답 시간: 지속적인 연결을 통해 빠른 응답을 제공.
웹 소켓 API(WebSocket API)
웹 소켓 API는 JavaScript에서 웹 소켓을 쉽게 사용할 수 있도록 도와줍니다. 웹 소켓 객체는 WebSocket
생성자를 통해 생성되며, 다양한 이벤트와 메서드를 제공합니다.
주요 메서드:
WebSocket(url)
: 웹 소켓 객체를 생성하고 서버에 연결.send(data)
: 서버로 데이터를 전송.close()
: 연결을 종료.
주요 이벤트:
open
: 연결이 성립되었을 때 발생.message
: 서버로부터 메시지를 받을 때 발생.error
: 통신 중 오류가 발생할 때 발생.close
: 연결이 종료되었을 때 발생.
실시간 양방향 통신 구현(Implementing Real-Time Bidirectional Communication)
웹 소켓을 사용하면 클라이언트와 서버 간에 실시간으로 데이터를 주고받을 수 있습니다. 다음은 웹 소켓을 사용한 간단한 실시간 채팅 애플리케이션의 예제입니다.
예제: 실시간 채팅 클라이언트
<!DOCTYPE html> <html lang="ko"> <head> <meta charset="UTF-8"> <title>실시간 채팅</title> <script> let socket; function init() { socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('연결이 성립되었습니다.'); }; socket.onmessage = function(event) { const messages = document.getElementById('messages'); const message = document.createElement('li'); message.textContent = event.data; messages.appendChild(message); }; socket.onclose = function(event) { console.log('연결이 종료되었습니다.'); }; socket.onerror = function(event) { console.error('오류가 발생하였습니다:', event); }; } function sendMessage() { const input = document.getElementById('messageInput'); const message = input.value; socket.send(message); input.value = ''; } </script> </head> <body onload="init()"> <h1>실시간 채팅</h1> <ul id="messages"></ul> <input type="text" id="messageInput"> <button onclick="sendMessage()">전송</button> </body> </html>
웹 소켓 서버와 클라이언트 예제(WebSocket Server and Client Example)
웹 소켓 서버 예제 (Node.js 사용)
// server.js const WebSocket = require('ws'); const server = new WebSocket.Server({ port: 8080 }); server.on('connection', socket => { console.log('클라이언트가 연결되었습니다.'); socket.on('message', message => { console.log('받은 메시지:', message); // 모든 클라이언트에게 메시지 전송 server.clients.forEach(client => { if (client.readyState === WebSocket.OPEN) { client.send(message); } }); }); socket.on('close', () => { console.log('클라이언트 연결이 종료되었습니다.'); }); socket.on('error', error => { console.error('오류가 발생하였습니다:', error); }); }); console.log('웹 소켓 서버가 포트 8080에서 실행 중입니다.');
웹 소켓 클라이언트 예제
위에서 제공된 HTML 클라이언트 예제는 ws://localhost:8080
URL로 웹 소켓 서버에 연결합니다. 사용자가 메시지를 입력하고 전송 버튼을 클릭하면 메시지가 서버로 전송되고, 서버는 받은 메시지를 다시 모든 클라이언트에게 브로드캐스트합니다.
웹 소켓을 사용하면 HTTP의 요청-응답 모델보다 효율적이고 실시간성이 높은 양방향 통신을 구현할 수 있습니다. 이를 통해 채팅 애플리케이션, 실시간 데이터 대시보드, 멀티플레이어 게임 등 다양한 실시간 애플리케이션을 구축할 수 있습니다.