TURN·영상 비용을 기본 차단하는 WebRTC 음성 리뷰
0회 조회약 2분 읽기
TURN·영상 비용을 기본 차단하는 WebRTC 음성 리뷰
WebRTC는 Java API가 미디어를 전달하지 않아도 브라우저 간 연결·NAT·릴레이 설정이 필요하다. 그래서 DMDDKSL은 텍스트 방을 원본으로 유지하고, 음성 리뷰는 opt-in 가능한 P2P 보조 경로로만 구현했다.
기본값이 중요한 이유
WEBRTC_VOICE_ENABLED=false이면 /api/rooms/{roomId}/voice/config가 enabled=false, videoEnabled=false, disabledReason=cost_guard를 반환한다. 클라이언트는 이 응답을 먼저 확인하므로 마이크 권한, WebSocket, ICE 수집을 시작하지 않는다. ICE 서버와 TURN credential은 기본값이 비어 있고, 세 값을 모두 명시할 때만 클라이언트에 전달한다.
음성을 운영에서 켜더라도 audio-only, 최대 8명, 기본 30분 세션이다. signaling은 32KB payload·SDP/ICE 길이·분당 메시지 수를 제한하고, SDP와 ICE는 저장하거나 로그에 남기지 않는다. 영상·SFU·MCU·coturn은 비용 승인과 relay 트래픽 계측 전에는 열지 않는다.
다섯 관점의 검증
- 기획: 월 고정비, relay GB, 피크 동시 세션의 예산 소유자를 정한다.
- 디자인: 잠금 사유와 “텍스트 방은 계속 사용 가능”을 권한 요청보다 먼저 보여준다.
- 개발: handshake에서 room과 익명 identity를 검증하고 ephemeral peer ID만 노출한다.
- 사용자: 권한 거부·NAT 실패·세션 만료 뒤에도 텍스트 기록을 잃지 않는다.
- 운영: enabled/TURN 상태, 세션 상한, relay 비율을 확인한 뒤에만 환경 변수를 바꾼다.
고정비용이 없는 현재 기본 배포는 미디어 세션을 열지 않는다. TURN을 도입할 때는 coturn을 Compose 기본 서비스로 추가하지 않고, 별도 비용 승인·트래픽 계측·rollback 기준을 충족한 환경에서만 외부 TURN을 주입한다.