반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- 클라우드컴퓨팅
- 머신러닝
- springboot
- 소프트웨어
- 자료구조
- 사이버보안
- 네트워크보안
- I'm Sorry
- 데이터과학
- 인공지능
- 데이터분석
- Yes
- 디자인패턴
- 파이썬
- 딥러닝
- 알고리즘
- 버전관리
- 컴퓨터공학
- 컴퓨터과학
- 네트워크
- 데이터베이스
- 프로그래밍
- 보안
- 컴퓨터비전
- 데이터구조
- 프로그래밍언어
- 웹개발
- 소프트웨어공학
- 빅데이터
- 자바스크립트
Archives
- Today
- Total
스택큐힙리스트
SSE vs WebSocket, 언제 써야 빛을 볼까? 본문
반응형
1. ‘실시간’이 필요할 때 두 갈래 길
알림·라이브 피드·채팅 같은 기능을 붙이다 보면 “Server-Sent Events(SSE)로 갈까, WebSocket으로 갈까” 갈등이 온다. 두 프로토콜은 모두 HTTP 위에서 동작하지만 성격이 확연히 다르다. 오늘 글에서는 “상황별 최적 선택법”을 정리한다.
2. SSE — 단방향 스트리밍, 가볍고 자동 복구까지
- 단방향: 서버→클라이언트 전용. 클라이언트가 뭘 보낼 일 없는 뉴스·주가·알림에 최적이다.
- HTTP 그대로: 별도 업그레이드 없이 text/event-stream으로 열려서 프록시·로드밸런서 호환성이 높다.
- 자동 재접속 + 체크포인트: 브라우저 EventSource가 끊기면 재연결하고, Last-Event-ID로 놓친 메시지를 이어받는다.
- 가벼운 서버 구현: 응답을 flush만 해 주면 끝. Lambda·Cloud Functions 같은 서버리스 환경에서도 부담이 적다.
- 제한 사항
- HTTP/1.1에서는 도메인당 동시 6 커넥션 한계. 탭을 많이 열면 막힌다. HTTP/2로 대부분 해소된다.
- 바이너리 전송 불가, 오직 UTF-8 텍스트.
3. WebSocket — 풀 듀플렉스, 대화가 필요할 때
- 양방향: 채팅, 협업 에디터, 멀티플레이 게임처럼 클라→서버 메시지가 필수인 서비스에 필수.
- 경량 프레이밍 & 바이너리 지원: 그림·음성·파일까지 실시간 전송 가능.
- 낮은 지연: 핸드셰이크 후엔 헤더 오버헤드 없이 패킷만 주고받아 속도가 빠르다.
- 주의할 점
- Upgrade: websocket 단계가 있어서 일부 기업 프록시·방화벽이 막는 경우가 있다.
- 연결·재시도·하트비트 로직을 직접 짜야 하므로 구현·테스트 비용이 더 든다.
4. 이런 상황엔 SSE가 낫다
- 서버→클라 일방 알림(주문 상태, 실시간 로그, 주가 티커)
- 대용량 구독자에게 브로드캐스트할 때 (수천~수만)
- 프록시·CDN·서버리스 인프라, 혹은 조직 내 HTTP만 허용되는 환경
- 간단한 코드 & 자동 재연결이 큰 이점인 MVP 단계
5. 이런 상황엔 WebSocket이 낫다
- 채팅·게임·문서 공동편집처럼 양방향 저지연 통신
- 클라이언트가 빈번히 데이터를 올려야 하는 IoT, 실시간 센서 스트림
- 이미지·바이너리 전송이 필요한 라이브캠·파일 공유
- 연결 관리(하트비트, 세션)와 인프라 제약을 컨트롤할 여력이 있을 때
6. 기억할 ‘선택 공식’
읽기 전용 + 실시간이면 SSE,
쓰기까지 필요하거나 바이너리·초저지연이면 WebSocket.
둘 다 필요하다면 알림은 SSE, 상호작용은 WebSocket으로 하이브리드를 구성해도 좋다.
7. 구현 팁 한 줌
- SSE: HTTP/2 활성화로 6 커넥션 제한 해결, retry·id 필드를 꼭 써서 재전송 대비.
- WebSocket: wss://로 TLS 적용, 프록시 통과 안 될 때는 443 포트 터널링 확인.
- 공통: 클라이언트-서버 버퍼 지연을 줄이려면 핑/펑(WS) · 코멘트 빈 줄(SSE)로 keep-alive를 주기적으로 보내라.
반응형
'개발' 카테고리의 다른 글
State 패턴: if-else 없이 굴러가는 ‘상태 머신’의 힘 (1) | 2025.07.23 |
---|---|
Spring Boot 실시간 채팅 서버 만들기 — WebSocket + STOMP, 하트비트까지 완전 정복 (1) | 2025.07.23 |
Redis Streams vs Pub/Sub: 저장형 알림 설계, 무엇을 써야 할까? (3) | 2025.07.22 |
Redis Pub/Sub로 5초 만에 터지는 알림, 멀티 인스턴스에서도 놓치지 않는 비결 (0) | 2025.07.22 |
setState vs Provider, 무엇이 다를까? (0) | 2025.07.22 |
Comments