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 등 필요)
  • 방화벽/프록시 환경에서 차단될 수 있음
  • 재연결 로직 직접 구현 필요
반응형