통화 품질 신호: MOS·지터·패킷손실이 가리키는 것

Twilio Voice Insights 문서는 음성 SDK 통화에서 지터가 30밀리초 이상인 구간이 다섯 개 샘플 창 중 세 번 연속 나타나면 경고 이벤트를 띄우고, 라운드트립 시간이 400밀리초를 넘는 패턴이 같은 빈도로 반복되면 별도 경보로 구분합니다. 캐리어·SIP 트렁킹 통화는 기준이 더 느슨해서 누적 패킷 손실 5% 이상, 평균 지터 5밀리초 초과를 고품질 경계로 잡습니다. 콜봇 루프를 짤 때는 이 구분을 그대로 들여와 호출 경로(WebRTC SDK인지 SIP 트렁크인지)별로 다른 열화 기준을 코드에 선언해야 합니다.

NICE CXone의 통화 품질 지표 가이드는 MOS 4.3 이상을 우수, 3~3.4를 보통, 3 미만을 불량으로 나누고 패킷 손실은 1% 미만을 우수, 5% 초과를 불량 구간으로 둡니다. 두 벤더의 경계값이 완전히 일치하진 않지만, 패킷 손실 1%대와 지터 30밀리초대에서 체감 품질이 꺾인다는 신호는 겹칩니다. 루프 코드가 이 수치를 로그용 경보로만 두면 통화가 끝날 때까지 품질은 그대로 방치됩니다.

감지와 분기는 서로 다른 책임이다

구현 상당수가 지표 수집(감지)까지만 만들고, 무엇을 바꿀지(분기)는 사람이 사후 로그를 보고 정합니다. 통화가 진행 중인 동안에는 그 지연 자체가 실패입니다. 데드에어 감지 게이트가 침묵을 신호로 삼아 복구 분기를 태우는 것과 같은 구조로, 품질 루프도 감지 모듈이 올린 신호를 받아 TTS 발화 속도를 늦추거나 확인형 프롬프트 비중을 늘리거나 DTMF 전용 모드로 넘기는 전환을 상태 머신의 명시적 상태(`quality_degraded`)로 둬야 즉시 실행됩니다.

열화 신호부터 복구까지: 적응형 폴백 로드맵

기획 단계에서는 전환 합격선을 코드보다 먼저 숫자로 박아 둡니다. 지터 30밀리초 이상이 다섯 샘플 창 중 세 번 겹치거나 패킷 손실이 1%를 넘으면 500밀리초 안에 degraded 모드로 넘어가는 것을 1차 목표로 잡고, degraded 모드 동안 바지인 오탐률은 평상 모드 대비 +5%p 이내로 억제하는 것을 2차 목표로 둡니다. 두 수치가 없으면 "느려진 것 같다"는 감으로 배포 여부를 정하게 됩니다.

흔히 겹치는 실패는 네 갈래입니다. 지표를 로그에만 쌓고 분기를 만들지 않아 관측은 했지만 대응은 안 하는 경우, 전환 임계값을 너무 민감하게 잡아 정상 통화마저 수시로 degraded로 넘어가는 플래핑, SDK와 캐리어 구분 없이 단일 임계값을 적용해 SIP 트렁크 통화를 과다 오탐하는 경우, 그리고 degraded에서 돌아오는 복구 조건 자체가 없어 통화가 끝까지 저속 모드에 갇히는 경우입니다.

플래핑을 막으려면 전환과 복구의 조건 길이를 다르게 둡니다. 전환은 다섯 샘플 창 중 세 번(히스테리시스), 복구는 10초 연속 정상 샘플처럼 더 긴 안정 구간을 요구해야 짧은 스파이크마다 모드가 튀지 않습니다. degraded 모드에 들어가면 TTS 응답 길이를 줄이고 확인형 프롬프트로 바꾸며, 패킷 손실이 캐리어 임계(5%)를 넘기면 통화 자체를 재연결하거나 DTMF 전용으로 강제 다운그레이드하는 분기까지 미리 코드로 선언해 둡니다.

운영 체크리스트로는 배포 전 네트워크 에뮬레이터로 지터·손실을 주입해 degraded 전환과 복구 양방향을 모두 왕복시켜 보고, MOS·지터·손실률·전환 상태를 호출 로그 표준 필드로 고정하며, 품질 로그에도 통화 내용과 같은 PII 마스킹 규칙을 그대로 적용합니다. 전환·복구 이벤트를 알람 채널과 분리해 쌓아야 사후에 어느 발신 경로에서 열화가 몰렸는지 추릴 수 있습니다.

지속 운영에서는 매주 degraded 전환 빈도가 높은 발신 경로나 통신사를 추려 SIP 트렁크 교체나 Opus FEC 설정 조정이 필요한지 판단합니다. 전환부터 복구까지 걸리는 평균 시간을 릴리스마다 추적하면, 로드맵 자체가 개선되고 있는지 보여주는 유일한 지표가 됩니다.

바로 쓰는 체크리스트

지터 30밀리초·손실 1%라는 숫자 자체보다 중요한 것은 그 숫자가 감지 로그가 아니라 상태 머신의 분기 조건으로 코드에 박혀 있는지입니다. 전환엔 연속 샘플, 복구엔 더 긴 안정 구간을 요구하는 히스테리시스를 넣고, SDK와 캐리어 경로를 같은 기준으로 묶지 않으면 콜봇 루프는 통화가 나빠지는 순간 스스로 전략을 낮출 수 있습니다.

참고 링크

Call Quality Events — Twilio Voice Insights

Voice Quality Metrics — NICE CXone

이 글에 대해 AI와 대화하기

AI가 이 글을 읽은 상태로 답합니다. 무엇이든 물어보세요 — 글에 없는 내용이면 없다고 먼저 알려줍니다.

대화창을 불러오는 중…