요즘 회사에서 새로운 웹 에디터를 개발하려고 준비중이다.
관련 기술을 학습해야하는 시간이 왔는데 웹 에디터에 동시 편집을 지원하기 위한 대표적인 프로토콜 방법인
WebRTC와 WebSocket에 대해서 장/단점을 비교하고 동작방식에 대해서 알아보려고 한다.
WebRTC (Web Real-Time Communication)란?
WebRTC(Web Real-Time Communication)는 브라우저 간(P2P) 직접 실시간 데이터 통신을 가능하게 하는 기술
주로 오디오/비디오 스트리밍, 실시간 파일 전송 등에 사용
- 기본 개념: P2P 연결을 통해 클라이언트끼리 직접 데이터를 교환함.
- 특징:
- 낮은 지연시간 (Low Latency) → 서버를 거치지 않고 직접 통신
- 오디오/비디오 스트리밍 지원 → 실시간 화상 채팅, 라이브 스트리밍 가능
- P2P 연결 → 다자간 연결 시 SFU/MCU 서버 필요
- STUN/TURN 서버 필요 → 방화벽/NAT 문제 해결
사용 예시: Google Meet, Discord 음성 채팅, WebTorrent (P2P 파일 공유)
WebSocket이란?
WebSocket은 서버와 클라이언트 간의 지속적인 양방향 통신을 지원하는 프로토콜
- 기본 개념: 클라이언트와 서버가 한 번 연결을 맺으면, 이후에는 HTTP 요청 없이 데이터를 주고받을 수 있음.
- 특징:
- 양방향(Bidirectional) 통신 → 서버와 클라이언트가 실시간으로 데이터 교환 가능
- 낮은 오버헤드 → HTTP보다 네트워크 부담이 적음
- 다중 사용자 연결 가능 → 서버가 모든 클라이언트와 지속적 연결 유지
- 서버 중심 아키텍처 → 서버가 데이터를 관리하고 동기화
사용 예시: Slack, WhatsApp Web, 주식 거래 시스템 (Binance, Upbit), Google Docs 실시간 동기화
WebRTC vs WebSocket 차이점
WebRTC (P2P 기반) | WebSocket (서버 기반) | |
주요 사용 사례 | 실시간 미디어 스트리밍, 파일 공유, P2P 게임 | 실시간 채팅, 문서 편집, 주식 데이터 |
통신 방식 | 클라이언트 간 P2P 직접 연결 (Signaling 필요) | 클라이언트-서버 지속적 연결 유지 |
지연 시간 | 낮음 (서버 없이 직접 연결) | 중간 (서버 경유, 로드밸런싱 가능) |
확장성 | SFU/MCU 서버 필요 (다자간 연결 시) | 서버 부하 관리 필요 (로드밸런싱) |
데이터 유형 | 오디오/비디오 스트리밍, 대용량 데이터 | 텍스트 메시지, 작은 데이터 패킷 |
WebRTC 와 WebSocket의 동작 방식

WebRTC는 P2P 통신을 바탕으로 클라리언트 간 직접 연결을 통해 데이터를 교환하며 중앙 서버가 없어도 사용이 가능하다. 직접 연결하기 때문에 서버의 지연 시간이 없는 것이 장점이지만 서버의 연결 관리를 하는 것이 복잡하다. 또한 참여자가 많아 질 경우 서버의 피어 간 연결을 관리하는 것이 어렵다.
WebSocket은 클라이언트 <-> 서버 통신 구조로 서버가 모든 연결을 중앙 집중식으로 관리하므로 안정적이고 다수의 클라이언트를 관리하기에 유리한 것이 장점이지만 모든 트래픽이 서버를 거치므로 서버에 과부하가 생길 수 있고 중앙 서버를 경유하므로 네트워크 상황에 따라 지연이 생길 수 있다.
아직까지는 어떤 프로토콜을 사용할 지 정하지는 않았지만 두 프로토콜 가운데 하나를 선택하자면 나는 WebSocket을 사용하고 싶다. 실시간 채팅 및 문서 편집 같은 주요 사용사례가 있고 중간 서버를 두어서 관리할 수 있도록 처리하는게
최적화에도 좋을 것 같기 때문이다.
WebRTC와 WebSocket에 대한 의견이 있다면 언제든지 댓글로 공유해주시면 감사하겠습니다.
'개발' 카테고리의 다른 글
웹 접근성을 위한 role과 aria-label의 차이점과 활용법 (0) | 2025.04.04 |
---|---|
ProseMirror 가이드 톹아보기 (0) | 2025.03.31 |
크로미움 브라우저에서 p 내부 span을 삭제할 때 span이 날아간다면 ? (0) | 2024.08.17 |
Zustand에 대해서 알아보기 (0) | 2024.07.26 |
Docker 시작하기 (0) | 2024.07.08 |