웹소켓(WebSocket)
웹소켓(WebSocket)
웹소켓(WebSocket)은 실시간 양방향 통신을 지원하는 네트워크 프로토콜 중 하나입니다.
웹소켓은 기존의 HTTP 프로토콜과는 다르게 클라이언트와 서버 간에 지속적인 연결을 유지하며
데이터를 양방향으로 주고받을 수 있습니다.
이러한 특성은 실시간 웹 애플리케이션을 구현하는 데 매우 유용합니다.
웹소켓이 등장하기 이전에는 웹 애플리케이션에서 실시간 통신을 구현하기 위해 다양한 기술과 트릭을
사용해야 했습니다.
예를 들면, 폴링(Polling), 롱 폴링(Long Polling), Comet 등의 방법을 통해 실시간성을
흉내내기도 했지만, 이러한 방법들은 각각의 단점이 있었습니다.
웹소켓 주요 특징
실시간 양방향 통신:
클라이언트와 서버 간에 양방향으로 데이터를 주고받을 수 있습니다.
이는 채팅 애플리케이션, 주식 시장 데이터 업데이트 등의 실시간 기능을 구현하는 데 적합합니다.
낮은 지연:
웹소켓은 TCP 프로토콜을 기반으로 하며, 연결을 유지하면서 데이터를 주고받기 때문에 폴링이나
롱 폴링과 같은 추가적인 통신 프로토콜을 사용하는 것보다 지연이 낮습니다.
효율적인 데이터 전송:
헤더 부분이 작고, 이진 데이터를 효율적으로 전송할 수 있어서 작은 대역폭에서도 효율적으로 동작합니다.
클라이언트와 서버 간의 간단한 핸드셰이크 프로토콜:
웹소켓은 연결을 설정할 때 간단한 핸드셰이크 프로토콜을 사용합니다.
웹소켓은 주로 실시간 웹 애플리케이션, 온라인 게임, 주식 거래소, 주가 정보 제공 서비스 등에서
활용되며, 다양한 언어와 프레임워크에서 지원하고 있습니다.
대표적으로 JavaScript의 WebSocket API, Python의 Flask-SocketIO, Java의 Java-WebSocket 등이 있습니다.
웹소켓 연결 과정
핸드셰이크(Handshake):
클라이언트가 서버에게 웹소켓 연결을 요청합니다.
이때 일반적으로는 HTTP 프로토콜을 사용합니다.
클라이언트는 HTTP 헤더에 "Upgrade: websocket"과 "Connection: Upgrade"와 같은 웹소켓 연결을
위한 관련 헤더를 포함시킵니다.
서버는 이 요청을 받고, 호환 가능한 웹소켓 프로토콜로 업그레이드 하겠다는 응답을 합니다.
웹소켓 연결 수립:
클라이언트와 서버 간의 핸드셰이크가 성공하면, 웹소켓 연결이 수립됩니다.
서버는 HTTP 응답에서 "101 Switching Protocols" 상태 코드와 함께 웹소켓 프로토콜로의
전환을 알립니다.
이후, 클라이언트와 서버는 웹소켓 프레임 형식으로 데이터를 주고받을 수 있는 연결이 설정됩니다.
데이터 전송:
한 번 연결이 수립되면, 양쪽은 데이터를 주고받을 수 있습니다.
클라이언트나 서버에서 웹소켓을 통해 데이터를 보내려면 웹소켓 프레임을 사용합니다.
웹소켓 프레임은 헤더와 실제 데이터 페이로드로 이루어져 있습니다.
연결 종료:
클라이언트 또는 서버가 연결을 종료하고자 할 때는,
정상적인 웹소켓 프레임에 추가 정보를 담아 CLOSE 프레임을 보냅니다.
상대편은 CLOSE 프레임을 받고 연결을 종료합니다.
이렇게 되면 클라이언트와 서버 간에 양방향 통신이 가능한 웹소켓 연결이 설정되어 데이터를 실시간으로
주고받을 수 있습니다.
이 과정은 기본적인 웹소켓 연결의 흐름을 설명한 것이며,
실제로는 각종 보안 및 프로토콜 상의 세부사항들이 적용될 수 있습니다.
*바쁜 사람을 위한 정리
웹소켓이란 실시간 양방향 통신을 지원하는 네트워크 프로토콜 중 하나로 클라이언트와 서버 간에 지속적인 연결을 유지해 데이터를 양반향으로 주고 받을 수 있는 것이 특징이며 이러한 특징을 바탕으로 온라인 게임 및 주식 거래소에서 많이 사용됩니다. 연결되는 과정으로는 웹소켓 연결을 요청하는 핸드셰이크 단계부터, 연결 수립, 데이터 전송 등의 과정을 거쳐 양방향 통신이 이루어집니다.
'목차훔치기 > 네트워킹과 웹 성능 최적화 기법' 카테고리의 다른 글
WebRTC(네트워킹과 웹 성능 최적화 기법) (4) | 2023.12.07 |
---|---|
서버 발송 이벤트(네트워킹과 웹 성능 최적화 기법) (0) | 2023.12.05 |
XMLHttpRequest(네트워킹과 웹 성능 최적화 기법) (2) | 2023.12.04 |
브라우저 네트워킹의 첫걸음(네트워킹과 웹 성능 최적화 기법) (0) | 2023.12.03 |
애플리케이션 전송 최적화(네트워킹과 웹 성능 최적화 기법) (2) | 2023.12.02 |