network · high priority
WebSockets
실시간 양방향 통신의 핵심
intermediate 난이도3시간토스카카오네이버당근라인
시작 전
이해도
매우 낮음
학습 개요
탄생 배경
쉬운 설명
복잡한 개념을 실생활 비유로 설명합니다.
“전화 통화(WebSocket) vs SMS(HTTP)”
HTTP는 문자 메시지처럼 매번 새 요청을 보내고 응답을 받아야 합니다. WebSocket은 전화처럼 한 번 연결하면 끊을 때까지 양쪽이 언제든 말할 수 있습니다. 채팅처럼 실시간으로 대화해야 한다면 전화(WebSocket)가 훨씬 효율적입니다.
핵심 개념
WebSocket 연결 수립 4단계
1
HTTP Upgrade 요청
클라이언트가 Upgrade: websocket 헤더를 포함한 HTTP GET 요청을 보냅니다.
2
101 Switching Protocols
서버가 101 상태 코드와 Sec-WebSocket-Accept 헤더로 응답하며 프로토콜 전환을 승인합니다.
3
TCP 연결 유지
HTTP 연결이 WebSocket 연결로 업그레이드되고, 연결이 닫힐 때까지 TCP 소켓을 유지합니다.
4
양방향 메시지
클라이언트와 서버가 프레임(frame) 단위로 언제든 자유롭게 메시지를 주고받습니다.
실무 적용
어떤 상황에서 사용하는가
실시간 채팅, 라이브 주식 시세, 멀티플레이어 게임, 협업 에디터 구현
어떻게 적용하는가
wss:// 프로토콜을 사용하고, 재연결 로직과 heartbeat(ping/pong)를 구현하며, 서버 스케일 아웃 시 Redis Pub/Sub로 인스턴스 간 메시지를 동기화합니다.
흔한 실수와 안티패턴
- 재연결 로직을 구현하지 않아 네트워크 불안정 시 연결이 끊기는 문제
- 서버 스케일 아웃 시 sticky session이 필요하거나 Redis Pub/Sub 미적용으로 메시지 유실
- wss:// 대신 ws://를 사용해 보안 취약점 노출
면접 질문
기초토스카카오네이버
답변 방향 힌트
연결 방식, 방향성, 오버헤드 측면에서 비교하세요.
반드시 언급할 키워드
- HTTP는 요청-응답 단방향
- WebSocket은 Upgrade 후 양방향 지속 연결
- HTTP는 매 요청마다 헤더 오버헤드
- WebSocket은 초기 핸드셰이크 후 낮은 오버헤드
예상 꼬리 질문
- WebSocket 연결이 끊겼을 때 어떻게 처리하시겠습니까?