웹소켓

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 05:05 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

🔌 웹소켓 (WebSocket)

웹소켓은 클라이언트와 서버 사이에 하나의 TCP 연결을 계속 유지하면서, 양방향으로 자유롭게 데이터를 주고받을 수 있게 하는 통신 프로토콜입니다. HTTP와 달리, 한 번 연결이 수립되면 어느 쪽에서든 원할 때 데이터를 보낼 수 있습니다.

이는 실시간 채팅, 온라인 게임, 주식 시세 알림 등 서버의 데이터 변경을 클라이언트에게 즉시 알려줘야 하는 서비스에 매우 유용합니다.


🤔 웹소켓은 왜 필요한가?

기존의 HTTP는 클라이언트가 요청을 보내야만 서버가 응답할 수 있는 단방향 통신입니다. 따라서 서버에 변경된 내용이 있는지 알기 위해, 클라이언트는 주기적으로 서버에 물어봐야 했습니다(폴링, Polling). 이는 불필요한 HTTP 요청을 계속 발생시켜 비효율적입니다.

웹소켓은 이러한 비효율을 해결하고, 서버가 클라이언트의 요청 없이도 먼저 데이터를 보내는 서버 푸시(Server Push)를 가능하게 합니다.


⚙️ 웹소켓의 특징

  • 양방향 통신 (Full-duplex) : 클라이언트와 서버가 동시에 데이터를 주고받을 수 있습니다.
  • 지속적인 연결 (Persistent Connection) : 한 번 연결되면 명시적으로 닫기 전까지 계속 유지됩니다.
  • 낮은 오버헤드 : 최초 연결(Handshake) 시에는 HTTP를 사용하지만, 이후에는 매우 작은 크기의 헤더로 통신하여 효율적입니다.
  • 실시간성 : 서버에서 이벤트가 발생하자마자 클라이언트에게 데이터를 즉시 전달할 수 있습니다.

💡 개발자 핵심 Point

  • 웹소켓은 실시간 양방향 통신이 필요한 모든 곳에 사용될 수 있습니다.
  • 채팅 애플리케이션, 실시간 협업 도구(예: Google Docs), 온라인 멀티플레이어 게임, 실시간 데이터 대시보드 등이 웹소켓의 대표적인 활용 사례입니다.
  • 웹소켓을 직접 구현하는 것은 복잡할 수 있어, 보통 `Socket.IO`, `SockJS` 와 같은 라이브러리를 사용하여 더 쉽고 안정적으로 구현합니다. 이 라이브러리들은 웹소켓을 지원하지 않는 구형 브라우저에서도 비슷한 기능을 사용할 수 있도록 하는 대체 기술(Fallback)을 제공합니다.
  • 웹소켓 서버는 클라이언트와 계속 연결을 유지해야 하므로, 기존의 HTTP 서버와는 다른 방식으로 상태를 관리하고 확장성을 고려해야 합니다.