WebSocket

HanHyuk·2024년 1월 5일

웹소켓

  • 실시간, 양방향 통신을 웹 클라이언트와 서버 간에 가능하게 하는 기술
  • 전통적인 HTTP 통신과 다르게, 웹소켓은 지속적 연결을 제공하여 서버와 클라이언트가 언제든 서로에게 데이터를 보낼 수 있게 함, 실시간 애플리케이션에 매우 적합

작동 방식

  • 연결 초기화 : 클라이언트가 서버에 연결 요청을 보냄(사용자가 웹 페이지를 열 때)
  • 핸드셰이크 과정 : 서버는 요청을 받고 웹소켓 연결을 수락함(사용자가 채팅 앱을 열면 서버는 이를 인식하고 연결을 확립함)
  • 데이터 교환 : 클라이언트와 서버 간에 지속적인 연결이 맺어지며, 실시간으로 데이터를 주고받을 수 있음(채팅 앱에서 사용자가 메시지를 보내면, 해당 메시지가 서버를 거쳐 다른 사용자에게 즉시 전달)

사용 이유

  • 실시간 통신 가능
  • 낮은 오버헤드 : 추가적인 HTTP 요청 없이 핸드셰이크를 함으로써 데이터 교환이 가능해 통신 오버헤드가 낮음
  • 양방향 통신 : 클라이언트와 서버가 양방향 통신이 가능

사용 예시

  • 채팅 애플리케이션
  • 온라인 게임
  • 금융 애플리케이션
  • 실시간 알림
// express 서버에 웹소켓
const express = require('express');
const http = require('http');
const WebSocket = require('ws');

const app = express();
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
    ws.send(`Server received: ${message}`);
  });
});

app.get('/', (req, res) => {
  res.send('Hello, World!');
});

인기 있는 웹소켓 라이브러리 및 프레임워크

  • ws(WebSocket) : Node.js용 가벼운 웹소켓 라이브러리, 간단하고 빠르며 확장성이 뛰어남
  • Socket.IO : 실시간 통신을 위한 매우 인기 있는 라이브러리, 자동 재연결, 방(Room)개념, 여러 트랜스포트(fallback) 지원 등 고급 기능을 제공
  • WebSocket-Node : ws와 비슷하지만 다른 API와 추가 기능 제공
  • SockJS : WebSocket이 지원되지 않는 오래된 브라우저에서도 사용할 수 있는 라이브러리
  • SignalR(ASP.NET) : ASP.NET 개발자를 위한 웹소켓 및 실시간 통신 라이브러리
profile
선한 영향력을 펼치는 개발자가 되겠습니다.

0개의 댓글