🔌

WebSocket

양방향 실시간 통신

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) 라이브 스트리밍 댓글/리액션