🔌
WebSocket
양방향 실시간 통신
WebSocket은 RFC 6455로 정의된 프로토콜로, 최초 HTTP 핸드셰이크 이후 TCP 연결을 유지하며 양방향 통신을 지원합니다. 서버가 클라이언트에 먼저 데이터를 보낼 수 있어 실시간 애플리케이션에 적합합니다.
구조 다이어그램
🌐
Client
Browser / Bot / App
① HTTP Upgrade
→
←
② 101 Switching
TCP 유지
←
③ 양방향 메시지
→
④ Close 프레임
🖥️
Server
WebSocket Server
흐름 설명
- 클라이언트가 HTTP Upgrade 요청으로 핸드셰이크 시작
- 서버가 101 Switching Protocols 응답, TCP 연결 유지
- 양방향 채널 — 서버/클라이언트 모두 자유롭게 메시지 전송
- 어느 쪽이든 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)
라이브 스트리밍 댓글/리액션