[CS] 웹 소켓(Web Socket)에 대해 이해하기

2025. 7. 27. 15:39·CS

웹 소켓이란?

Web Socket은 클라이언트와 서버간의 지속적인 양방향 통신을 가능하게하는 통신 프로토콜 입니다.

핵심적인 특징이 여러가지 있습니다. 그 전에 이해해야 할 부분은 통신 프로토콜이라는 부분입니다.

대표적인 통신 프로토콜의 예시로 Http 프로토콜이 있습니다. 그것과 다른 개념의 통신 프로토콜이라고 이해를 해야 그 다음으로 넘어갔을 때 이해가 쉽습니다.

웹 소켓의 특징

  1. 양방향 통신(Bidirectional Communication): 서버와 클라이언트가 서로 자유롭게 데이터 송신 수신이 가능합니다.
  1. 지속적 연결(Persistent Connection): 한 번 연결되면 계속 유지되며 통신이 가능합니다. Http는 매 요청마다 새로 연결을 맺어야 합니다. 하지만 웹 소켓은 한 번 연결하면 지속되며, 재연결 과정이 필요하지 않습니다.
  1. 실시간 통신(Real-time Communication): 연결이 유지되는 특성이 있기 때문에, 데이터를 즉시 송신 수신 하는것이 가능합니다. 이러한 특성 때문에, 소켓 통신이 채팅 프로그램에 많이 사용됩니다.웹 소켓의 연결과정?웹 소켓은 프로토콜이고 그렇기 때문에 Http에 종속되지 않는 연결과정을 거친다 라고 생각할 수 있습니다.

하지만 웹 소켓도 Http 프로토콜을 사용해서 연결합니다. 첫 연결을 Http로 진행하고 그 이후에 웹 소켓으로 전환하는, 업그레이드 하는 과정을 거쳐서 비로소 웹 소켓이 연결됩니다.

1. HTTP 핸드셰이크 요청

httpGET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

핵심 헤더

  • Upgrade: websocket → 웹소켓으로 프로토콜 업그레이드 요청
  • Connection: Upgrade → 연결 업그레이드 명시
  • Sec-WebSocket-Key → 보안을 위한 랜덤 키
  • Sec-WebSocket-Version → 웹소켓 버전 (현재 13)

2. HTTP 핸드셰이크 응답

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

핵심 응답
101 Switching Protocols → 프로토콜 전환 승인
Sec-WebSocket-Accept → 클라이언트 키 기반 응답 키

3. 프로토콜 전환

  • HTTP 요청-응답 모델 → WebSocket 양방향 통신
  • 텍스트 기반 → 바이너리/텍스트 프레임 기반
  • 상태 없음(Stateless) → 상태 유지(Stateful)
반응형

'CS' 카테고리의 다른 글

운영체제란? 운영체제의 역할  (0) 2025.11.24
[CS] 컴퓨터와 문자 인코딩  (2) 2024.12.21
[System Design] 서버 확장, 로드밸런서, 그리고 무상태 아키텍처로 성능 최적화를 하는 방법  (0) 2024.12.16
'CS' 카테고리의 다른 글
  • 운영체제란? 운영체제의 역할
  • [CS] 컴퓨터와 문자 인코딩
  • [System Design] 서버 확장, 로드밸런서, 그리고 무상태 아키텍처로 성능 최적화를 하는 방법
kangminhyuk1111
kangminhyuk1111
열심히 공부 하세요
  • kangminhyuk1111
    강민혁 개발블로그
    kangminhyuk1111
  • 전체
    오늘
    어제
    • 분류 전체보기 (127)
      • BackEnd (28)
        • 토비의 스프링 (1)
        • Spring (13)
        • Java (21)
        • Socket (4)
      • 독후감 (5)
      • CS (4)
      • SQL (3)
        • RealMySQL (1)
      • 알고리즘 (10)
      • 공부 내용 (4)
        • 유튜브 (1)
        • API (2)
        • WEB (1)
      • FrontEnd (10)
        • React (5)
      • Typescript (11)
        • Javascript (1)
      • 공부중 (6)
      • Android (2)
        • Kotlin (2)
      • 외부활동 (1)
  • 블로그 메뉴

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

  • 공지사항

    • 블로그 이사 왔습니다
  • 인기 글

  • 태그

    TypeScript
    Riot api
    API
    Backend
    nextjs
    공부
    flask
    nodejs
    JavaScript
    Kotlin
    자동매매
    후기
    srt
    유튜브
    매크로
    SQL
    Python
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
kangminhyuk1111
[CS] 웹 소켓(Web Socket)에 대해 이해하기
상단으로

티스토리툴바