웹소켓(WebSocket)

KDG: First things first!·2024년 11월 7일
0

네트워크

목록 보기
2/2

웹소켓이란

웹소켓(WebSocket): 웹소켓은 클라이언트와 서버 간에 양방향 통신을 실시간으로 가능하게 하는 프로토콜이다. HTTP와 달리 웹소켓은 연결이 지속적으로 유지되어, 클라이언트와 서버가 실시간으로 데이터를 주고받을 수 있다.


웹소켓의 특징

  • 양방향 통신: 웹소켓은 클라이언트와 서버 간의 양방향 통신을 지원한다. HTTP 요청과 응답의 일방적인 통신 방식과 달리, 웹소켓은 클라이언트와 서버가 상호 간에 데이터를 자유롭게 주고받을 수 있도록 합니다.

  • 지속적인 연결: 웹소켓은 연결 유지 방식을 사용한다. 한번 연결이 수립되면, 지속적인 연결을 유지하면서 서버는 클라이언트가 요청할 때마다 새로운 연결을 만들지 않고, 클라이언트와 서버 간에 단일 연결을 통해 데이터를 주고받는다.

  • 저지연성: 웹소켓은 지속적인 연결을 통해 데이터를 전송하기 때문에, 새로운 연결을 생성하는 오버헤드가 없고, 빠른 응답을 제공하여 저지연성을 유지한다. 이로 인해 실시간 애플리케이션에서 유리하다.

  • 상태 유지: HTTP는 상태 비저장(stateless) 프로토콜로 요청마다 새로운 연결을 만들고, 그 이후에 상태를 저장하지 않지만, 웹소켓은 연결이 유지되는 동안 연결 상태를 계속 유지하면서 클라이언트와 서버가 데이터를 주고받을 수 있다.


웹소켓의 작동 방식

  • 핸드쉐이크(Handshake):웹소켓은 HTTP 프로토콜을 사용하여 연결을 초기화한다. 클라이언트가 서버에 웹소켓 핸드쉐이크 요청을 보내면, 서버는 이를 승인하고 웹소켓 연결을 수립한다. 이 핸드쉐이크 과정이 끝나면, HTTP 프로토콜은 더 이상 사용되지 않고 웹소켓 프로토콜이 사용된다.

  • 데이터 전송: 연결이 수립된 후, 클라이언트와 서버는 실시간으로 양방향 데이터를 주고받을 수 있다. 서버는 클라이언트에게 데이터를 푸시할 수 있고, 클라이언트도 서버에 데이터를 보낼 수 있다.

  • 연결 종료: 클라이언트 또는 서버 중 어느 한 쪽이 연결 종료 메시지를 보내고 다른 한 쪽이 이를 확인하면 연결이 종료된다.(어느 한 쪽이 close 프레임을 받지 못 하는 상황이면 비정상적인 종료를 감지하는 몇 가지 방법도 존재한다.)


웹소켓과 HTTP의 차이점

HTTP는 요청-응답 방식으로, 서버가 클라이언트의 요청에 대해 응답을 보내면 연결이 종료되는 방식이다.
하지만 웹소켓은 지속적인 연결을 유지하고, 클라이언트만 서버에게 요청을 보낼 수 있는 단방향 통신인 HTTP와는 다르게 클라이언트와 서버 간에 양방향 통신이 가능하여 실시간으로 데이터를 주고받을 수 있다는 차이점이 있다.

웹소켓은 무상태(stateless) 프로토콜인 HTTP와 다르게 상태를 유지(stateful)하는 연결 방식이다.


HTTPWebSocker
비연결형(Connectionless)연결 지향형(Connection-oriented)
단방향 통신 (Unidirectional Communication)양방향 통신 (Bidirectional Communication)

웹소켓의 장단점

장점

  • 실시간 통신: 웹소켓은 실시간으로 데이터를 주고받을 수 있어서 빠른 응답이 필요한 애플리케이션에 유용다.

  • 낮은 대기 시간: 연결이 지속되기 때문에 새로운 연결을 설정할 필요 없이 빠르게 데이터를 주고받을 수 있다.

  • 효율성: HTTP보다 오버헤드가 적고, 여러 요청을 하나의 연결로 처리할 수 있어 서버 자원을 효율적으로 사용할 수 있다.


단점

  • 연결 유지: 클라이언트와 서버 간에 연결이 지속적으로 유지되어야 하므로, 많은 클라이언트를 지원하려면 서버가 높은 부하를 처리해야 할 수 있다. 또한 오랫동안 데이터 전송이 없어도 연결을 유지해야 하기 때문에 필요 이상의 연결 유지 비용이 소모될 수도 있다.

  • 보안: 웹소켓은 HTTP 기반으로 연결을 시작하므로, 보안에 대한 고려가 필요하다.


웹소켓 사용 예시

  • 실시간 채팅 애플리케이션

  • 온라인 게임의 실시간 데이터 교환

  • 주식 가격 실시간 업데이트

  • 알림 시스템


웹소켓은 주로 실시간 데이터 통신이 필요한 애플리케이션에서 많이 사용된다.

profile
알고리즘, 자료구조 블로그: https://gyun97.github.io/

0개의 댓글