본문 바로가기

스터디-ing

[socket] 소켓과 웹소켓 차이

실시간으로 웹서비스에더 다른 서버에 있는 소프트웨어로 파일과 메시징을 송/수신해야 하는 이슈가 있었습니다.

파일만 처리한다면 TCP/IP Socket을 사용했겠지만, 간단한 메시징과, 추후에 추가될 수 있는 메시징 교환을 고려해 웹소켓을 사용하기로 했습니다.

 

 

소켓과 웹소켓

소켓이란?

  • 소켓은 네트워크에서 실행되는 두 프로그램 간의 양방향 통신 링크의 한 끝점
  • TCP(안정적인 연결 지향통신) 과 UDP(신뢰할 수 없는 연결 없는 통신) 두가지가 있습니다.
  • 사용 사례: 파일 전송, HTTP 요청, 이메일 프로토콜

웹소켓이란?

  • 단일 TCP 연결을 통해 전이중 통신 채널을 제공하는 통신 프로토콜
  • 지속적인 연결, 낮은 대기 시간, 실시간 데이터 교환이 특징입니다.
  • 사용사례: 채팅 애플리케이션, 실시간 스포츠 업데이트, 실시간 알림
  소켓(TCP/UDP) 웹소켓
연결 유형 연결 지향(TCP) 또는 비연결(UDP) 단일 TCP 연결을 통한 지속적인 전이중
데이터 교환 요청/응답 모델 지속적인 데이터 교환
프로토콜 TCP/UDP 기반 HTTP 핸드셰이크 후 사용자 정의 프로토콜
지연 시간 더 높음(특히 HTTP의 경우) 낮음, 실시간 앱에 적합
복잡성 추가 설정 및 관리 webSocket API로 단순화됨
사용 사례dP 파일 전송, HTTP 요청 채팅 앱, 실시간 알림

 

소켓과 웹소켓 차이

소켓과 웹소켓의 차이를 크게 3개로 정리해보았습니다.

 

  1. 프로토콜
    • 소켓: TCP/IP 프로토콜을 직접 사용.
    • 웹소켓: HTTP 프로토콜을 기반으로 하며, 웹 브라우저와 서버 간의 통신에 최적화되어 있음.
  2. 연결 방식
    • 소켓: 양방향 전이중(full-duplex) 통신을 지원하며, 연결이 지속됨.
    • 웹소켓: 초기 연결은 HTTP를 통해 이루어지고, 그 후 웹소켓 프로토콜로 업그레이드되어 지속적인 양방향 통신이 가능함.
  3. 사용 환경
    • 소켓: 주로 네이티브 애플리케이션에서 사용되며, 운영체제 수준의 네트워크 프로그래밍에 적합함.
    • 웹소켓: 웹 브라우저 환경에서 사용되며, 실시간 웹 애플리케이션 개발에 적합함. JavaScript를 통해 쉽게 구현할 수 있음.

위 그림에서 보이는 것처럼 크게 통신 계층이 다릅니다.

소켓은 4계층에 해당하는 전송 계층에 해당하며 웹소켓은 7계층에 해당하는 응용 계층에 해당합니다. 따라서 소켓은 TCP/IP 프로토콜, 웹소켓은 HTTP 프로토콜을 사용한다는 점이 가장 큰 차이점입니다.

그리고 기존 소켓이 있는데 웹소켓이 생긴 이유는 HTTP로 실시간 통신을 하는 것이 어려웠기 때문입니다.

HTTP 실시간 통신이 어려운 이유
1. 비연결성으로 인한 단방향 통신
2. 비연결성으로 인한 통신마다 맺고 끊는 과정의 비용
3. request-response의 구조
4. 헤더의 비중이 너무 큼

 

 

소켓과 웹소켓을 사용해야 하는 경우

소켓과 웹소켓을 사용해야 하는 경우를 나눠보면 아래와 같습니다.

 

소켓을 사용해야 하는 경우

  • 데이터 전송에 대한 높은 통제가 필요한 경우
  • TCP 또는 UDP 프로토콜에 대한 특정 요구 사항이 필요한 경우
  • 파일 전송, 저수준 네트워크 서비스와 같은 애플리케이션에 적합

 

WebSocket을 사용해야 하는 경우

  • 낮은 대기 시간이 필요한 시시간 애플리케이션인 경우
  • 지속적인 데이터 교환이 필요한 경우
  • 라이브 채팅, 게입, 협업 도구 등 대화형 애플리케이션인 경우

'스터디-ing' 카테고리의 다른 글

[OAuth2.0] OAuth2.0 개념과 동작 원리  (0) 2024.05.31
[GIT] Gitmoji  (0) 2024.05.30