피드로 돌아가기
Dev.toInfrastructure
원문 읽기
In-memory 큐와 STUN 우선 전략으로 TURN 비용 최소화 및 초저지연 매칭 구현
How we connect two strangers' webcams fast (and keep the TURN bill small)
AI 요약
Context
WebRTC 기반 낯선 이와의 실시간 영상 연결 시 매칭 대기 시간과 시그널링 지연이 사용자 경험의 핵심 병목으로 작용함. 특히 모든 트래픽을 Relay 서버로 처리할 경우 발생하는 막대한 비용과 연결 지연을 해결해야 하는 과제 직면.
Technical Solution
- 외부 Datastore 접근을 배제하고 Node.js 프로세스 내 In-memory 큐를 통한 매칭으로 네트워크 Round-trip 제거
- Redis를 Source of Truth가 아닌 백업 및 상태 복구용으로 활용하여 단일 인스턴스 성능 극대화
- Socket.IO를 단순 Relay 스위치보드로 설계하고 User ID-Socket ID 매핑을 In-memory 맵으로 캐싱하여 룩업 지연 최소화
- Peer ID 기반의 Deterministic Tiebreak 로직을 통한 WebRTC Glare 현상 방지 및 협상 프로세스 단순화
- STUN 서버 우선 탐색 및 최적의 TURN 서버 후보군을 제한적으로 제공하여 ICE Candidate 수집 시간 단축 및 연결 속도 향상
- 연결 실패 시 전체 세션 재시작 대신 restartIce() 호출을 통한 효율적인 경로 재수집 및 연결 복구
실천 포인트
1. 매칭 로직 설계 시 데이터베이스 쿼리 전 In-memory 큐 도입 검토
2. WebRTC 구현 시 Glare 방지를 위한 고유 ID 기반 우선순위 결정 로직 적용
3. TURN 서버 비용 절감을 위해 STUN-first 전략 및 최소한의 Candidate 제공 최적화 수행
4. 상태 저장소(Redis 등)를 쓰기 지연(Write-behind) 방식으로 활용하여 응답 속도 개선