웹소켓을 통한 HTML: 자바스크립트를 거의 사용하지 않는 실시간 SPA
2026. 8. 14. 16:43ㆍDev
반응형
HTML over WebSockets: 거의 JavaScript 없이 실시간 SPA 만들기 (Andros Fenollosa)
핵심 아이디어
전통적인 SPA는 JS 프레임워크가 뷰를 그리고, API가 JSON을 주고받으며 두 코드베이스가 계약을 맞춰야 한다.
이 글은 그 대신 서버가 이미 렌더링한 HTML을 WebSocket으로 보내고, 클라이언트는 그걸 제자리에 꽂기만 하는 방식(HTML over the wire / hypermedia)을 소개한다.
동작 방식
- 클라이언트의 JS 역할은 렌더링이 아니라 WebSocket 채널 생성 + 받은 HTML 삽입(애니메이션, 이벤트 처리 등 보조 작업 포함).
- 서버가 템플릿 엔진으로 HTML을 만들고 WebSocket으로 전송.
- 채널이 항상 열려 있어서 서버가 클라이언트의 요청 없이도 변경사항을 푸시(broadcast)할 수 있다.
전통적인 흐름(요청 → JSON → 클라이언트 렌더링)과 달리, 렌더링 로직과 상태가 전부에 집중된다.
장점
- 렌더링 엔진이 하나뿐이라 복잡도 감소
- API/계약 불필요
- 상태가 서버에 존재 (htmx처럼 stateless하지 않음)
- DB에 직접 연결
- 진정한 실시간 + broadcast 용이 (채팅, 대시보드, 멀티플레이 등)
- 연결 유지로 handshake/헤더 반복 감소 → 트래픽·지연 감소
- React/Vue 등 무거운 프레임워크 없이 SPA 가능
- 초기 HTML이 서버 렌더링이라 SEO에 유리 (단, 이후 WebSocket 업데이트는 크롤러가 못 봄)
- XSS에 상대적으로 안전 (서버에서 이스케이프된 HTML 전송)
단점
- 서버 리소스 소모 큼 (클라이언트당 프로세스 + 상태 유지). 수평 확장 시 Redis 등 채널 레이어 필요
- 네트워크 지연이 크면 “즉시성”이 떨어짐
- 오프라인 불가 (재연결 설계 필요)
- WebSocket 서버 + LiveView 패턴 학습 곡선
관련 기술 비교
- HTTP: htmx, django-unicorn (요청-응답)
- SSE: Datastar 등 (서버→클라이언트 단방향, 인프라 부담 적음)
- WebSocket: Phoenix LiveView, Django LiveView, Blazor Server, Laravel Livewire+Reverb 등 (양방향 실시간)
SSE는 알림·피드·AI 스트리밍처럼 서버→클라이언트 푸시만 필요할 때 더 가볍고 추천된다. 양방향·저지연이 필요하면 WebSocket이 적합하다.
결론
모든 문제에 대한 만능 해결책은 아니다.
실시간 양방향이 필요하면 WebSocket, 단방향 푸시면 SSE, 단순 요청-응답이면 HTTP(htmx)를 선택하면 된다.
핵심은 JSON 대신 HTML을 보내고, 단일 언어로 유지하며 API·계약·프론트엔드 복잡성을 줄이는 것이다.
글 작성자는 자신이 만든 Django LiveView를 포함해 여러 언어의 구현체들을 표로 정리해 두었다.
출처: https://en.andros.dev/blog/ef4968f5/html-over-websockets-real-time-spas-with-barely-any-javascript/
반응형
'Dev' 카테고리의 다른 글
| 하이드레이션과 렌더링 전략별 차이 (0) | 2026.07.06 |
|---|---|
| Gemma 4 12B LoRA 파인튜닝 (0) | 2026.06.16 |
| 우리는 모두 시스템 아키텍처 전문가가 되어야 한다 (0) | 2026.06.06 |
| Linear 앱의 초고속 성능을 가능하게 하는 핵심 웹 성능 최적화 방법 (0) | 2026.05.29 |
| Next.js 전환 후기 (0) | 2021.06.27 |