본문 바로가기
목차훔치기/네트워킹과 웹 성능 최적화 기법

웹소켓(WebSocket)(네트워킹과 웹 성능 최적화 기법)

by 해삼2 2023. 12. 6.
728x90
반응형
웹소켓(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 프레임을 받고 연결을 종료합니다.
이렇게 되면 클라이언트와 서버 간에 양방향 통신이 가능한 웹소켓 연결이 설정되어 데이터를 실시간으로 

주고받을 수 있습니다. 

이 과정은 기본적인 웹소켓 연결의 흐름을 설명한 것이며, 

실제로는 각종 보안 및 프로토콜 상의 세부사항들이 적용될 수 있습니다.

 

 

*바쁜 사람을 위한 정리

웹소켓이란 실시간 양방향 통신을 지원하는 네트워크 프로토콜 중 하나로 클라이언트와 서버 간에 지속적인 연결을 유지해 데이터를 양반향으로 주고 받을 수 있는 것이 특징이며 이러한 특징을 바탕으로 온라인 게임 및 주식 거래소에서 많이 사용됩니다. 연결되는 과정으로는 웹소켓 연결을 요청하는 핸드셰이크 단계부터, 연결 수립, 데이터 전송 등의 과정을 거쳐 양방향 통신이 이루어집니다.

 

728x90
반응형