About

WebSocket이란? 서버와 브라우저가 양방향으로 주고받는 구조

HTTP 핸드셰이크 뒤에도 TCP 연결을 유지한다 (RFC 6455)

WebSocket은 RFC 6455로 정의된 프로토콜로, 최초 HTTP 핸드셰이크 이후 TCP 연결을 유지하며 양방향 통신을 지원합니다. 서버가 클라이언트에 먼저 데이터를 보낼 수 있어 실시간 애플리케이션에 적합합니다.

구조 다이어그램

🌐
Client
Browser / Bot / App
① HTTP Upgrade →
← ② 101 Switching
TCP 유지
← ③ 양방향 메시지 →
④ Close 프레임
🖥️
Server
WebSocket Server
흐름 설명
  1. 클라이언트가 HTTP Upgrade 요청으로 핸드셰이크 시작
  2. 서버가 101 Switching Protocols 응답, TCP 연결 유지
  3. 양방향 채널 — 서버/클라이언트 모두 자유롭게 메시지 전송
  4. 어느 쪽이든 Close 프레임으로 연결 종료
활용 예: Slack Socket Mode, Discord Gateway, 실시간 채팅, 게임

동작 흐름

1

클라이언트가 HTTP Upgrade 요청으로 WebSocket 핸드셰이크 시작

2

서버가 101 Switching Protocols로 응답, TCP 연결 유지

3

양방향 채널 확립 — 서버/클라이언트 모두 자유롭게 메시지 전송

4

어느 쪽이든 Close 프레임을 보내 연결 종료

장점

  • ✓ 진정한 양방향 실시간 통신
  • ✓ 서버가 먼저 데이터 push 가능
  • ✓ HTTP 오버헤드 없이 경량 프레임
  • ✓ 방화벽 뒤에서도 아웃바운드 연결로 동작

단점

  • ✗ 연결 유지 비용 (서버 메모리/커넥션)
  • ✗ 연결 끊김 시 재연결 로직 필요
  • ✗ 로드밸런서 설정 복잡
  • ✗ HTTP 캐싱 불가

사용 사례

채팅 애플리케이션 실시간 대시보드/모니터링 온라인 게임 협업 에디터 (Google Docs) 실시간 음성 받아쓰기 (STT — Deepgram, Azure Speech) 라이브 스트리밍 댓글/리액션
← 클라이언트-서버 모델이란? 요청과 응답의 기본 구조 SSE란? WebSocket보다 간단한 서버→브라우저 단방향 스트림 →