코딩

[Web 기술] WebSocket이란?

lwz7 2024. 10. 11. 17:08

 

참여한 프로젝트에서 채팅 API 개발을 담당하게 되었습니다. 요구사항을 분석해 가며 웹 채팅의 핵심은 실시간으로 이루어지는 양방향 통신이라고 생각했고, 이를 구현하기 위해 WebSocket 기술을 프로젝트에 도입하게 되었습니다. 이번 포스팅에서는 먼저 WebSocket의 기본 개념에 대해 간단히 알아보고, 채팅 API 개발 과정에서 제가 경험한 문제와 이를 해결한 방법에 대해 적어보겠습니다.

 

WebSocket

 

WebSocket은 클라이언트와 서버 간에 실시간 양방향 통신을 가능하게 해주는 프로토콜입니다. HTTP는 클라이언트가 서버에 요청을 보내면 서버가 응답을 반환하는 단방향 방식이지만, WebSocket은 한 번 연결이 수립되면 양방향으로 데이터를 주고받을 수 있게 됩니다.

 

WebSocket의 원리

 

WebSocket은 핸드셰이크 과정을 통해 서버와 클라이언트 간 연결을 설정합니다. HTTP 요청을 통해 연결을 시작한 후, 연결이 성공하면 클라이언트와 서버는 WebSocket으로 통신하게 됩니다. 이 과정은 두 단계로 이루어집니다.

  1. 클라이언트는 HTTP로 서버에 연결을 요청하고, WebSocket으로의 전환을 제안합니다. 이 과정을 핸드셰이크 라고 합니다.
  2. 핸드셰이크가 완료되면 양방향 통신이 가능한 WebSocket이 연결되고, 양쪽에서 실시간으로 데이터를 주고받을 수 있게 됩니다.

 

WebSocket과 HTTP의 차이점?

 

  • HTTP는 단방향으로만 데이터를 주고받을 수 있지만 WebSocket은 양방향 통신을 지원합니다.
  • HTTP는 각각의 요청마다 새로운 연결을 열고 닫지만 WebSocket은 한 번 연결이 수립되면 지속적인 연결을 유지합니다.
  • HTTP는 요청마다 무거운 헤더 정보를 전송하지만 WebSocket은 한 번 연결이 설정되면 이후에는 비교적 간결한 데이터를 주고받으므로 네트워크 부하가 줄어듭니다.

 

WebSocket의 장점

 

  • 실시간으로 빠르게 데이터를 주고받아야 하는 상황에서 유용합니다. 
  • HTTP과는 다르게 반복적인 연결, 해제 과정이 없어 네트워크 자원을 더 효율적으로 사용합니다.

 

WebSocket의 단점

 

  • 연결을 지속적으로 유지해야 하므로 동시에 많은 클라이언트가 연결을 유지하는 상황에서는 서버 자원이 많이 소모될 수 있습니다.
  • 구형 브라우저에서는 제대로 동작하지 않을 수 있습니다.

 

WebSocket 사용 사례

 

WebSocket은 실시간으로 많은 데이터를 주고받아야 하는 작업에 사용하면 효율적입니다. 아래의 예시들이 이에 해당합니다.

 

  • 사용자 간의 실시간 메시지 전송
  • 주식 시장, 암호화폐 거래소와 같은 빠른 데이터 전송이 필요한 시스템
  • 여러 사용자가 실시간으로 즉각적인 상호작용을 하는 온라인 게임

 

프로젝트에서의 경험

 

 

 

'코딩' 카테고리의 다른 글

[HTTP] RESTful API 란?  (1) 2024.09.27
[HTTP] PATCH 그리고 OPTIONS  (3) 2024.09.13
[HTTP] PUT, DELETE 그리고 멱등성  (1) 2024.09.05
[HTTP] GET 그리고 POST  (0) 2024.08.22
[GitHub] 초보 개발자를 위한 .gitignore 작성 요령과 팁  (0) 2024.08.20