Network
WebSocket
창욱씨
2020. 6. 26. 15:54
반응형
1. WebSocket이란?
클라이언트와 서버 간의 양방향 실시간 통신을 가능하게 하는 프로토콜
- HTTP는
http:///https://, WebSocket은ws:///wss://
2. HTTP vs WebSocket
| HTTP | WebSocket | |
|---|---|---|
| 소켓 오픈 | 요청마다 열고 닫음 | 한 번만 열고 계속 유지 |
| 통신 방향 | 단방향 (클라이언트 → 서버) | 양방향 (서버도 먼저 전송 가능) |
| 오버헤드 | 매 요청마다 헤더 포함 | 최초 연결 이후 헤더 없음 |
| 실시간성 | 낮음 | 높음 |
3. 연결 원리 (TCP 기반)
① TCP 3-Way Handshake
클라이언트 ── SYN ──────────► 서버
클라이언트 ◄─ SYN-ACK ─────── 서버
클라이언트 ── ACK ──────────► 서버
✅ 연결 완료
② WebSocket Handshake
HTTP → WebSocket 프로토콜로 업그레이드
③ 양쪽 메모리에 소켓 객체 생성
Socket {
localIP: 192.168.0.10:54321
remoteIP: 13.125.0.1:443
state: ESTABLISHED
}4. "연결되어 있음"을 판단하는 방법
| 방법 | 설명 |
|---|---|
| 소켓 상태 | 양쪽 OS 메모리의 소켓 객체가 살아있으면 연결 중 |
| Ping / Pong | 주기적으로 신호를 보내 응답 없으면 연결 끊김으로 판단 |
| ACK 실패 | 데이터 전송 후 수신 확인이 없으면 연결 끊김으로 판단 |
📌 물리적 선이 연결된 게 아니라, 양쪽 메모리의 소켓 객체가 연결을 의미
5. 서버가 먼저 데이터를 보낼 때 클라이언트가 받는 방법
서버 ── 데이터 전송 ──► OS (소켓 버퍼에 적재)
│
└── 이벤트 발생 ──► onmessage() 자동 실행- 클라이언트 앱이 직접 "왔어?" 확인하는 게 아님
- OS가 데이터 도착을 감지 → 이벤트 리스너(콜백) 자동 호출
// "데이터 오면 알려줘" 등록
socket.onmessage = (event) => {
console.log("서버가 보낸 데이터:", event.data);
};6. 장단점
✅ 장점
- 실시간 양방향 통신 가능
- 낮은 오버헤드 (헤더 반복 전송 없음)
- 효율적인 네트워크 사용 (Polling 불필요)
❌ 단점
- 연결 유지로 인한 서버 메모리/CPU 부담
- 다중 서버 환경에서 확장성 구현 복잡 (Redis 등 필요)
- 방화벽/프록시 환경에서 차단될 수 있음
- 재연결 로직 직접 구현 필요
반응형