WebSocket 개념과 특징

shjk·2025년 6월 4일

WebSocket은 TCP 프로토콜을 기반으로 하는 전이중(Full-Duplex) 통신 프로토콜로, 웹 클라이언트와 서버 간에 실시간 양방향 통신을 가능하게 한다. 기존의 HTTP 방식이 요청-응답(Request-Response) 구조로 매 요청마다 연결을 새롭게 설정하는 데 비해, WebSocket은 연결을 지속적으로 유지하여 데이터를 자유롭게 주고받을 수 있다.


WebSocket 프로토콜 동작 과정

WebSocket 연결은 다음과 같은 과정으로 수립된다.

  1. Handshake 과정
    클라이언트가 서버에 연결을 요청할 때 HTTP 프로토콜로 초기 Handshake가 이루어진다. 이 과정에서 클라이언트는 WebSocket 프로토콜 업그레이드를 요청하며, 서버가 이를 승인하면 연결이 성립된다.

    Handshake 예시:

    클라이언트 요청:
    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    
    서버 응답:
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

    Sec-WebSocket-Accept 헤더 값은 클라이언트가 보낸 Sec-WebSocket-Key에 정해진 문자열(258EAFA5-E914-47DA-95CA-C5AB0DC85B11)을 붙인 후, SHA-1 해시 처리하고 Base64로 인코딩한 값이다.

  2. 연결 유지
    Handshake가 완료된 후, 연결은 TCP 기반으로 지속적으로 유지된다. 이는 불필요한 HTTP 헤더 전송을 없애 네트워크 오버헤드를 감소시킨다.

  3. 데이터 전송 (메시지 전송)
    WebSocket에서 데이터는 프레임(Frame) 단위로 전송되며, 데이터 유형(텍스트 또는 바이너리)을 명시한다. 프레임 구조는 효율적인 데이터 송수신과 제어를 지원한다.

  4. 연결 종료
    연결 종료는 양측 모두가 할 수 있으며, Close 프레임을 송신하여 연결을 정상적으로 종료한다.


WebSocket 프로토콜 구조

WebSocket 프레임은 다음과 같은 구조를 가진다.

Frame 구조={FIN (1bit)프레임의 마지막 여부RSV1-3 (각 1bit)예약 필드 (확장용)Opcode (4bit)프레임 종류 (텍스트, 바이너리, 종료 등)MASK (1bit)마스킹 여부Payload Length (7 or 7+16 or 7+64bit)데이터 길이Masking-key (0 or 32bit)마스킹 키 (클라이언트 → 서버만 적용)Payload Data실제 데이터\text{Frame 구조} = \begin{cases} \text{FIN (1bit)} & \text{프레임의 마지막 여부} \\ \text{RSV1-3 (각 1bit)} & \text{예약 필드 (확장용)} \\ \text{Opcode (4bit)} & \text{프레임 종류 (텍스트, 바이너리, 종료 등)} \\ \text{MASK (1bit)} & \text{마스킹 여부} \\ \text{Payload Length (7 or 7+16 or 7+64bit)} & \text{데이터 길이} \\ \text{Masking-key (0 or 32bit)} & \text{마스킹 키 (클라이언트 → 서버만 적용)} \\ \text{Payload Data} & \text{실제 데이터} \\ \end{cases}

WebSocket의 장점과 특징

  • 실시간 양방향 통신
    서버와 클라이언트가 동시에 데이터를 전송할 수 있어 채팅, 알림, 실시간 데이터 업데이트 등의 서비스 구현에 적합하다.

  • 낮은 오버헤드
    연결을 유지하여 HTTP 헤더의 반복 전송을 방지함으로써 네트워크 부하를 최소화한다.

  • 확장성
    프로토콜은 확장 가능하며 다양한 서브 프로토콜을 정의하여 추가 기능을 지원할 수 있다.


WebSocket 사용 예시

WebSocket의 대표적 활용 사례는 다음과 같다.

  • 채팅 및 메신저
  • 실시간 데이터 분석
  • 온라인 게임
  • 협업 및 실시간 편집 도구

WebSocket의 한계점

  • 상태 관리
    연결 유지로 인해 서버가 많은 동시 접속을 처리하려면 메모리와 자원 관리가 필수적이다.

  • 브라우저 호환성
    오래된 브라우저에서는 WebSocket을 지원하지 않을 수 있으며, 이때는 폴백(Fallback) 메커니즘(예: Long Polling)을 사용해야 한다.


결론적으로, WebSocket은 HTTP의 한계를 극복하고 실시간 상호작용 애플리케이션 개발에 강력한 도구로 자리 잡고 있다. 다만 효율적인 자원 관리 및 상태 유지에 대한 설계를 반드시 고려하여 사용해야 한다.

profile
백엔드 개발자

0개의 댓글