웹소켓(WebSocket)은 브라우저와 서버 간의 실시간 양방향 통신을 지원하는 프로토콜입니다.
기존 HTTP와는 달리, 한 번 연결이 맺어지면 클라이언트와 서버가 서로 자유롭게 데이터를 주고받을 수 있습니다.
| 구분 | HTTP | WebSocket |
|---|---|---|
| 연결 방식 | 요청 → 응답 단발성 | 연결 유지 (persistent) |
| 데이터 흐름 | 클라이언트 → 서버 (일방향) | 클라이언트 ↔ 서버 (양방향) |
| 성능 | 매번 요청 시 TCP/HTTP 헤더 오버헤드 발생 | 최초 연결 이후에는 최소한의 프레임만 전송 |
| 활용 예 | 게시판, 뉴스 기사 요청 | 채팅, 주식 시세, IoT 제어 |
Handshake
HTTP Upgrade 요청을 보냄ws:// (또는 wss://)로 변경GET /socket HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
연결 유지
메시지 교환
// 연결
const socket = new WebSocket("ws://localhost:8080/socket");
// 연결 성공
socket.onopen = () => {
console.log("연결 성공");
socket.send(JSON.stringify({ msg: "Hello Server!" }));
};
// 메시지 수신
socket.onmessage = (event) => {
console.log("서버로부터:", event.data);
};
// 연결 종료
socket.onclose = () => console.log("연결 종료");
// 에러 처리
socket.onerror = (err) => console.error("에러:", err);
✅ 채팅 서비스 (카카오톡, Slack 같은 구조)
✅ 실시간 알림 (주식 시세, 비트코인 가격, 스포츠 경기 스코어)
✅ IoT 기기 제어 (드론, 센서, 로봇)
✅ 온라인 게임 (멀티플레이어 동기화)
웹소켓은 실시간성이 중요한 서비스에 거의 표준처럼 쓰이고 있습니다.
채팅, 알림, IoT 제어 같은 기능을 구현한다면 WebSocket은 사실상 필수입니다.
“HTTP는 편지, WebSocket은 전화”
웹소켓 통신이 정상적으로 이루어지면, 브라우저 개발자 도구 → 네트워크 탭 → Socket 필터에서 상태 코드를 확인할 수 있습니다.
상태 코드 101 Switching Protocols

💡 TIP: 이 상태 코드가 보이면, 이제
send와onmessage이벤트로 실시간 양방향 통신이 가능합니다.
상태 코드가 다른 값이 나오면, 방화벽, CORS 정책, 혹은 서버 설정 문제일 수 있습니다.