Web Socket

2026. 7. 28. 12:44·Language·CS/Concepts

이 글은 Velog에서 이전한 글입니다. Velog 원문 보기

웹 소켓(Web Socket)

Web Socket

  • 두 프로그램 간의 메시지 교환을 위한 통신 방법 중 하나

  • 현재 인터넷 환경(HTML5)에서 많이 사용
  • 웹 소켓을 지원하는 브라우저의 경우 웹 소켓 프로토콜을 지원
  • W3C와 IETF에 의해 자리잡은 표준 프로토콜 중 하나

웹 소켓의 특징

웹 소켓이 나온 이유는 특징과 연관이 된다.

  1. 양방향 통신(Full-Duplex)
  • 데이터 송수신을 동시에 처리할 수 있는 통신 방법
  • 통상적인 Http 통신은 Client가 요청을 보내는 경우에만 Server가 응답을 하는 단방향 통신이다.
  1. 실시간 네트워킹(Real Time-Networking)
  • 웹 환경에서 연속된 데이터를 빠르게 노출
  • ex) 채팅, 주식, 비디오 데이터

웹 소켓 이전의 통신 방식

실시간 네트워킹을 하면서 양방향 통신을 하는 것을 뜻함.

  1. Polling
  • 서버로 일정 주기 요청 송신
  • real-time 통신에서는 언제 통신이 발생할지 예측이 불가능
  • 불필요한 request와 connection을 생성

real-time 통신이라 부르기 애매할 정도의 실시간성

  1. Long Polling
  • Polling의 단점을 최소화 하기 위해 서버에서 조금 더 대기해서 이벤트를 받는다
  • 서버에 요청 보내고 이벤트가 생겨 응답 받을 때 까지 연결이 종료되지 않는다

많은 양의 메시지가 쏟아지면 polling과 같아진다

  1. Streaming
  • 서버에 요청을 보내고 끊기지 않은 연결상태에서 끊임없이 데이터 수신

    클라이언트에서 서버로의 데이터 송신이 어렵다

결과적으로 이 모든 방법들이 HTTP를 통해 통신하기 때문에 Request, Response 둘다 Header가 불필요하게 큼

웹 소켓 동작 과정

빨간색 박스

  • Opening Handshake

노란색 박스

  • Data Transfer

보라색 박스

  • Closing Handshake

Handshake

Opening Handshake와 Closing Handshake는 일반적인 HTTP TCP 통신의 과정 중 하나이다.
접속 요청은 HTTP로 한 뒤, Web Socket 프로토콜로 변경된다. (WS)
Web Socket 프로토콜로 변경되기 위한 HTTP 헤더는 아래처럼 구성되어 있다.

ws://localhost:8080/chat로 접속하려고 한다고 가정한다.

Request Header

GET /chat HTTP/1.1
Host: localhost:8080
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://localhost:9000

GET /chat HTTP/1.1
Web Socket의 통신 요청에서

  • HTTP 버전은 1.1 이상
  • GET 메서드를 사용

Upgrade

  • 프로토콜을 전환하기 위해 사용
  • 웹소켓 요청시에는 반스에 Web Socket이라는 값을 가지며, 이 값이 없거나 다른 값이면 Cross-protocol attack이라고 간주하여 웹 소켓 접속을 중지시킨다.

Connection

  • 현재의 전송이 완료된 후 네트워크 접속을 유지할 것인가에 대한 정보
  • 웹소켓 요청 시에는 반드시 Upgrade라는 값을 가진다.
  • Upgrade와 마찬가지로 이 값이 없거나 다른 값이면 웹소켓 접속을 중지시킨다.

Sec-WebSocket-Key

  • 유요한 요청인지 확인하기 위해 사용하는 키 값

Sec-WebSocket-Protocol

  • 사용하고자 하는 하나 이상의 웹소켓 프로토콜 지정
  • 필요한 경우에만 사용

Sec-WebSocket-Version

  • 클라이언트가 사용하고자 하는 웹소켓 프로토콜 버전

Origin

  • CORS 정책으로 만들어진 헤더
  • Cross-Site WebSocket Hijacking과 같은 공격을 피하기 위함

Response Header

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

HTTP/1.1 101 Switching Protocols

  • 101은 HTTP에서 WS로 프로토콜 전환이 승인 되었다는 응답코드이다.

Sec-WebSocket-Accept

  • 요청 헤더의 Sec-WebSocket-Key에 유니크 아이디를 더해서 SHA-1로 해싱한 후 base64로 인코딩한 결과이다.
  • 웹 소켓 연결이 개시되었음을 알린다.

Data Transfer

Opening HandShake에서 승인이 나고나면, 웹소켓 프로토콜로 노란색 박스 부분인 Data transfer이 진행된다. 여기서 데이터는 _메시지_라는 단위로 전달된다.

메시지
여러 프레임(frame)이 모여서 구성되는 하나의 논리적인 메시지 단위

프레임
통신에서 가작 작은 단위의 데이터

  • 가장 작은 단위의 데이터는 패킷이라고 부르던데?
    • 맞는 말이다. 패킷은 전 네트워크 통신 과정에서 가장 작은 단위의 데이터이고, 프레임은 데이터 링크 계층(이더넷)에서 주고 받는 가장 작은 단위를 의미한다.
  • 작은 헤더 + payload로 구성되어 있다.

Socket.io

웹소켓은 HTML5의 기술이기 때문에 오래된 버전의 웹 브라우저는 웹 소켓을 지원하지 않는다.
이를 해결하기 위해 나온 기술 중 하나가 Socket.io이다.

  • 양방향 통신을 하기 위해 웹 소켓 기술을 활용하는 Node.js 라이브러리
  • 웹소켓, 폴링, 스트리밍 등 다양한 방법을 하나의 API로 추상화한 것이다.
  • 자바스크립트르 이용하여 브라우저 종류에 상관없이 실시간 웹을 구현 가능

출처
[10분 테코톡] 🧲코일의 Web Socket

'Language·CS > Concepts' 카테고리의 다른 글

✏️ JWT(Json Web Token)  (0) 2026.07.28
✏️ 무중단 배포 전략(Zero-downtime Deployment)  (0) 2026.07.28
CI/CD란?  (0) 2026.07.27
Gradle  (0) 2026.07.27
[DB] Vector Database  (0) 2026.07.27
'Language·CS/Concepts' 카테고리의 다른 글
  • ✏️ JWT(Json Web Token)
  • ✏️ 무중단 배포 전략(Zero-downtime Deployment)
  • CI/CD란?
  • Gradle
pp8817
pp8817
공부한 내용, 개발 관련 지식, 트러블 슈팅 등을 기록합니다. 이전 블로그: https://velog.io/@pp8817/posts
  • pp8817
    끄적이는 개발 log
    pp8817
  • 전체
    오늘
    어제
    • 분류 전체보기 (273)
      • Project (71)
        • 척척학사 (29)
        • Book (23)
        • Saynow (3)
        • YAPP 27기 (4)
        • 나의 작은 프로젝트 (10)
        • Landit (2)
      • Backend (88)
        • Spring (13)
        • Spring MVC (13)
        • Spring Security (4)
        • JPA (26)
        • Database (19)
        • HTTP·Web (13)
        • Architecture (0)
      • Language·CS (59)
        • Java·Kotlin (5)
        • CS Interview (17)
        • Backend Interview (5)
        • Concepts (32)
      • Algorithm (25)
        • Algorithm (24)
        • 소마 알고리즘 스터디 (1)
      • Infra (8)
      • Troubleshooting (11)
      • Retrospective (6)
      • Etc (5)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    OS
    CS Interview
    트러블슈팅
    http
    개념 정리!
    Python
    Project
    java
    BOJ
    HTTP WEB 기본 지식
    척척학사
    Algorithm
    Spring MVC
    Spring
    object
    Book
    interview
    게시판
    나의 작은 프로젝트
    jpa
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
pp8817
Web Socket
상단으로

티스토리툴바