웹소켓 정리
2025. 5. 6. 15:33ㆍBack-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 |