웹소켓(WebSocket)

면접용 답변

WebSocket은 HTTP처럼 TCP를 기반으로 하지만, 한 번 연결이 성립되면 양방향 통신을 지속적으로 유지할 수 있는 프로토콜입니다. 클라이언트와 서버 간에 초기에는 HTTP 요청을 통해 연결을 시작하고, 이후에는 WebSocket 프로토콜로 업그레이드되어 지속적인 연결 상태에서 데이터를 자유롭게 주고받을 수 있습니다. 보통 실시간성이 중요한 채팅, 게임, 주식 시세, 알림 시스템 등에서 자주 사용됩니다.

개념 설명

Websocket

웹 브라우저와 웹 서버 간의 양방향 통신을 지원하는 프로토콜

특징

  1. 양방향 통신 : 클라이언트-서버 모두 실시간으로 메시지 주고받기 가능

  2. 지속적 연결: HTTP처럼 요청/응답 반복 없이 연결 유지

  3. 낮은 지연 시간: HTTP Header 반복 X, 데이터 전송이 가벼움

  4. 프레임워크 지원: 많은 프레임워크와 라이브러리에서 웹소켓을 지원, 쉽게 구현 가능

  5. 이벤트 기반: 데이터 전송은 이벤트 기반으로 이루어져 있어 실시간 업데이트와 상호작용을 구현할 수 있음

동작 원리

  1. 핸드쉐이크(Handshake): HTTP로 시작 클라이언트 - HTTP Upgrade 요청 헤더를 사용하여 웹소켓 연결 요청 서버 - 101 Switching Protocols 응답

  2. 연결 유지(Keeping Connection): 핸드쉐이크 이후 TCP 기반의 연결이 설정, 양방향 통신 시작

  3. 데이터 교환(Data Exchange): 메시지의 형태로 데이터 주고받음 이 메세지는 이벤트 기반으로 동작

  4. 연결 종료(Connection Termination): 클라이언트/서버가 종료 프레임 전송 이 프레임은 연결을 명시적으로 닫는 데 사용됨 연결이 비정상적으로 종료되는 경우 - 네트워크 문제 또는 다른 이유로 인해 연결이 끊어진 것으로 판단

  5. 프로토콜과 데이터 형식(Protocol and Data Format): 웹소켓 프로토콜은 헤더 정보를 최소화하여 낮은 오버헤드로 데이터를 전송함 메시지는 프레임 단위로 나눠짐 각 프레임은 데이터를 포함하거나 컨트롤 명령을 전송하는 데 사용됨

WebSocket vs HTTP vs SSE

항목
HTTP
SSE (Server-Sent Events)
WebSocket

통신 방향

단방향 (요청-응답)

서버 → 클라이언트 (단방향)

양방향

연결 유지

비연속적

지속적

지속적

브라우저 지원

광범위

대부분 브라우저

대부분 브라우저

메시지 크기

큼 (Header 포함)

작음

작음

사용 예시

REST API

뉴스피드, 알림

채팅, 게임, 실시간 주가

새끼 질문

  • WebSocket이 HTTP/2보다 실시간 통신에 더 유리한 이유는 무엇인가요?

  • WebSocket 연결이 끊어졌을 때, 재접속 처리는 어떻게 하나요?


Reference

https://velog.io/@jinyeong-afk/기술-면접-웹소켓-개념-및-동작-원리

Last updated