웹소켓 정리

2025. 5. 6. 15:33Back-End

반응형

프론트와 백이 실시간으로 데이터를 주고받아야 할 일이 생겨 웹소켓에 대해 탐구 중이다.

 

웹소켓이란?

웹소켓은 클라이언트와 서버 사이에 양방향 통신을 가능하게 해주는 네트워크 프로토콜이다.

  • HTTP는 요청-응답 기반
  • 웹소켓은 연결을 유지하면서 쌍방향 통신 가능

이 말은 곧, 서버가 클라이언트에게 먼저 메시지를 보낼 수 있다는 뜻이다.
채팅, 실시간 알림, 주식 가격서비스 등에 적합하다.

 

 

작동 원리

웹소켓은 초기에 HTTP 요청으로 시작해서, 프로토콜을 WebSocket으로 업그레이드한다.

▶ 클라이언트 → 서버 (요청)

GET /ws HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ...

 

▶ 서버 → 클라이언트 (응답)

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...

이후에는 HTTP가 아닌 WebSocket 프레임으로 지속적으로 데이터를 주고받는다.

 

 

특징 요약

특징 설명
지속 연결 한 번 연결되면 끊기지 않고 유지됨
양방향 통신 서버 ↔ 클라이언트 자유로운 메시지 전송
저지연(Low Latency) HTTP보다 빠른 응답 속도
텍스트/바이너리 모두 지원 JSON뿐 아니라 바이너리 전송도 가능

 

웹소켓의 보안

웹소켓도 보안 연결을 사용할 수 있다.

구분 프로토콜 포트

구분 프로토콜 포트
일반 ws:// 80
보안 wss:// 443
  • wss://는 TLS(HTTPS) 기반으로 암호화된다.
  • 민감한 데이터를 다룬다면 반드시 wss://를 써야 한다.

참고: TLS 인증서를 서버에 적용하는 방식은 HTTPS와 동일

 

 

웹소켓 확장 – STOMP

웹소켓은 낮은 수준의 프로토콜이라서, 직접 쓰기엔 번거로운 경우가 많다.
그래서 일반적으로는 STOMP라는 메시징 프로토콜을 얹어서 사용한다.

🔸 STOMP란?

  • Simple Text Oriented Messaging Protocol
  • Pub/Sub 개념을 기반으로 동작
  • 채팅방, 알림 구독, 특정 유저 메시지 전송 등을 쉽게 구현할 수 있음

🔸 예시 구조

목적 경로
채팅방 구독 /topic/room/{roomId}
유저 전용 메시지 /user/{userId}/queue/chat
메시지 전송 /app/chat.send (서버 수신용)

- 단, 라우팅키 기반으로 설계를 한다면 알맞지 않다는 말이 있다.

 

웹소켓 vs 다른 방식

구분 웹소켓 SSE 폴링
양방향 O X X
서버 → 클라이언트 O O X
클라이언트 → 서버 O X O
연결 유지 O O X (반복 요청)
브라우저 호환성 O 제한적 O

✔ 웹소켓은 대부분 상황에서 가장 유연하고 강력한 방식이다.

 

웹소켓은 실시간 통신을 구현하는 데 있어 가장 많이 쓰이는 핵심 기술 중 하나다.
단순 연결을 넘어서, STOMP 같은 확장 프로토콜, 보안 연결, 세션 관리, 멀티 유저 처리 등의 고민이 함께 따라온다.

반응형

'Back-End' 카테고리의 다른 글

웹소켓 정리 2  (0) 2025.05.07
실시간 데이터 처리를 위한 RabbitMQ 설계와 웹소켓 연동  (1) 2025.05.02
exitCode  (0) 2024.11.21