피드로 돌아가기
How we connect two strangers' webcams fast (and keep the TURN bill small)
Dev.toDev.to
Infrastructure

In-memory 큐와 STUN 우선 전략으로 TURN 비용 최소화 및 초저지연 매칭 구현

How we connect two strangers' webcams fast (and keep the TURN bill small)

Camdiv2026년 5월 26일9intermediate

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) 방식으로 활용하여 응답 속도 개선

원문 읽기