🔙뒤로가기
웹소켓(WebSocket)은 클라이언트와 서버 간에 개방된 연결을 유지하고, 양방향 통신을 가능하게 하는 통신 프로토콜이다. 이는 실시간 어플리케이션 (예: 채팅 애플리케이션, 실시간 게임 등)에 유용하다.
역사
웹소켓 프로토콜은 처음에 HTMl5 사양의 일부로 제안되었다. 이전에는 웹에서 실시간 통신을 하려면 AJAX 풀링, 롱 풀링, Flash 기반의 솔루션 등 복잡하고 비효율적인 방법을 사용해야 했다.
웹 소켓은 이러한 문제를 해결하고자 2008년에 처음 제안되었고, 2011년에 IETF에 의해 RFC6455로 표준화되었다. 웹소켓 프로토콜은 TCP에 기반하며, HTTP와 동일한 기본 포트(80과 443)를 사용한다.
프로토콜 종류와 쓰임새
웹소켓 프로토콜에는 크게 두 가지 종류가 있다.
- wss(WebSocket Secure) : HTTPS와 비슷하게 SSL/TLS를 통해 암호화된 웹 소켓 연결을 제공한다. 민감한 데이터를 전송하는 경우 또는 중간자 공격(man-in-the-middle attacks)을 방지하기 위해 사용된다.
HTTP와 웹소켓 비교
- ws(WebSocket) : 기본 웹소켓 프로토콜로, 일반적인 HTTP 연결과 같이 암호화되지 않은 연결을 제공한다.
웹소켓의 작동 원리를 이해하려면, 먼저 HTTP와 웹 소켓이라는 두 가지 프로토콜의 차이점을 알아야 한다.
- HTTP :
- HTTP는 요청-응답 모델을 따른다. 클라이언트가 서버에 요청을 보내면, 서버는 응답을 반환한다. 그리고 연결은 종료된다.
- 즉 HTTP의 모델은 단방향적이고, 서버가 클라이언트에게 응답하지 않는 한 클라이언트는 서버로부터 어떠한 정보도 받을 수 없다.
- 웹소켓 :
- 반면 웹소켓은 지속적인 연결을 제공하며, 이 연결을 통해 클라이언트와 서버가 서로에게 메시지를 전송할 수 있게 해준다. 즉, 양방향 통신을 가능하게 한다는 뜻이다.
- HTTP 대비 성능 상의 이점
- Full Duplex Communication: 웹소켓은 전이중 통신을 제공한다. 즉, 클라이언트와 서버 모두 동시에 데이터를 주고받을 수 있다.
- Persistent Connection: 웹소켓은 한 번 연결되면 클라이언트와 서버 사이의 연결이 유지되며, 필요한 데이터를 즉시 주고받을 수 있다.
- Low Latency: 웹소켓은 연결을 유지하면서 데이터를 주고받을 수 있으므로, HTTP의 요청-응답 모델에 비해 훨씬 낮은 지연 시간을 제공한다.
- Efficient Use of Bandwidth: 웹소켓은 핸드쉐이크 과정을 통해 연결을 초기화하며, 이후에는 헤더가 아주 작거나 없어 효율적인 대역폭 사용이 가능하다.
웹소켓의 작동 원리
- Handshake: 웹 소켓 연결이 처음 맺어질 때, 클라이언트와 서버는 웹 소켓 Handshake를 진행한다. 이는 HTTP 업그레이드 요청을 통해 이루어지며, 클라이언트와 서버가 통신 방법을 웹 소켓으로 변경하는 것이다.
- 데이터 전송: 한번 연결이 성공적으로 수립되면, 클라이언트와 서버는 양방향 통신을 시작할 수 있다. 이 데이터는 프레임으로 나누어 전송되며, 각 프레임은 작은 데이터 조각으로 구성된다.
- 연결 종료: 웹 소켓 연결은 클라이언트 또는 서버 중 어느 쪽이든 연결을 종료할 수 있다.
추가적인 정보
- 웹소켓의 작동 원리와 어떻게 사용하는지를 이해하려면, HTTP와 TCP, 그리고 네트워크 통신에 대한 기본적인 이해가 필요하다. 이를 이해하면 웹소켓이 어떤 문제를 해결하는지, 그리고 어떻게 효율적인 실시간 통신을 가능하게 하는지를 이해할 수 있다.
- 웹소켓은 통신을 유지하면서 데이터를 주고받기 때문에, 서버 리소스를 많이 사용할 수 있다. 따라서 웹소켓 서버를 설계할 때는 동시 연결 수, 메시지 처리 능력 등을 고려해야 한다.