딥페이크 AI 음성 응답: 사용자 목소리와 합성 목소리를 분리한 구조
딥페이크 AI 상담원에서 음성은 하나가 아닙니다. 서버로 올라가는 사용자의 원래 목소리와 서버에서 만들어져 돌아오는 합성 목소리는 출발점도, 처리 방식도 다릅니다.
두 경로를 구분하지 않으면 Speex가 AI 음성을 만드는 기술이거나 WebRTC가 딥페이크를 생성하는 기술처럼 설명하기 쉽습니다. 실제로 Speex는 입력 음성을 압축하고, WebRTC는 생성된 응답 미디어를 전달합니다.
한 번의 대화에는 두 개의 음성 경로가 있습니다
전체 흐름을 음성 기준으로 나누면 다음과 같습니다.
[사용자 목소리]
마이크
-> 16비트, 16 kHz, 모노 PCM
-> Speex 인코딩
-> 소켓 스트리밍
-> 서버의 질문 처리
[AI 목소리]
답변 데이터
-> 합성 음성 생성
-> 딥페이크 얼굴 영상과 결합
-> WebRTC 미디어 응답
-> 앱 화면에서 영상과 함께 재생첫 번째 경로는 입력입니다. 앱에서 마이크 데이터를 수집하고 서버로 전송합니다. 두 번째 경로는 출력입니다. 서버에서 생성된 목소리가 딥페이크 영상과 함께 돌아오고, 앱은 이를 대화 순서에 맞춰 재생합니다.
Speex는 목소리를 복제하지 않습니다
Speex는 음성 합성 모델이 아니라 음성 코덱입니다. 마이크에서 받은 PCM 샘플을 네트워크로 전송하기 좋은 크기로 압축합니다.
Speex 공식 설명에서 16 kHz는 광대역 음성 모드에 해당합니다. Speex는 패킷 네트워크와 VoIP 용도의 음성 압축을 목표로 설계됐으며, 특정 사람의 음색이나 말투를 만들어내지 않습니다.
각 기술의 역할은 다음처럼 구분할 수 있습니다.
- 사용자 음성: PCM으로 수집한 뒤 Speex로 압축해 전송합니다.
- AI 음성: 서버에서 합성되어 딥페이크 영상 응답에 포함됩니다.
- WebRTC: 생성된 영상과 음성을 앱까지 전달하고 재생합니다.
Speex 기반 AI 음성 생성이라고 표현하면 입력 압축과 출력 합성을 한 기술로 합쳐버립니다. 코덱, 합성 모델과 전송 계층은 별도로 설명하는 편이 정확합니다.
딥페이크 AI 음성은 서버에서 생성됩니다
사용자가 듣는 가상 상담원의 목소리는 서버가 답변 데이터로부터 만든 합성 음성입니다. 이 음성은 화면 속 얼굴의 입 모양과 결합된 미디어 응답으로 전달됩니다.
여기서 합성 음성과 Voice Cloning도 구분해야 합니다. 합성 음성은 텍스트나 다른 입력으로부터 음성을 생성하는 넓은 개념입니다. Voice Cloning은 특정 화자의 음색을 재현하는 경우를 가리킵니다. 특정인의 음성 데이터와 복제 과정이 확인되지 않았다면 일반적인 합성 음성으로 설명하는 편이 안전합니다.
생성 모델은 음성 파일이나 스트림을 만들고, 앱은 결과를 재생합니다. 모델 학습, 추론, 전송과 플레이어를 한 계층처럼 다루면 문제가 생겼을 때 확인할 위치가 불분명해집니다.
얼굴과 목소리는 같은 시간축에서 움직여야 합니다
딥페이크 영상에서는 화질만큼 입 모양과 목소리의 동기화가 중요합니다. 영상이 먼저 움직이고 음성이 늦게 나오거나, 음성이 시작됐는데 첫 영상 프레임이 준비되지 않으면 가상 인물이 말한다는 느낌이 깨집니다.
WebRTC는 미디어 트랙의 시간 정보를 이용해 오디오와 비디오를 재생합니다. W3C WebRTC 명세는 RTCPeerConnection을 통해 로컬 트랙을 보내고 원격 트랙을 받는 API를 정의합니다. 생성된 결과를 실시간 미디어 응답으로 전달하면 오디오와 비디오를 같은 재생 파이프라인에서 다룰 수 있습니다.
앱에서는 다음 세 시점을 구분해야 합니다.
- 사용자의 발화가 끝났다고 판단하는 시점
- 서버의 응답 미디어를 받을 준비가 된 시점
- 합성 음성과 영상의 첫 프레임을 실제로 재생하는 시점
세 시점 사이의 공백이 길면 사용자는 AI가 답을 만드는 중인지 연결이 끊긴 것인지 알 수 없습니다. 반대로 첫 패킷만 보고 너무 빨리 재생하면 네트워크 변화에 따라 중간에 멈출 수 있습니다. 실시간 응답은 지연을 0으로 만드는 문제가 아니라 재생을 시작할 만큼 준비됐는지 판단하는 문제입니다.
사용자가 느끼는 지연은 모델 시간만이 아닙니다
AI 상담원이 늦게 답하면 생성 모델부터 의심하기 쉽습니다. 실제 대기 시간은 여러 구간의 합입니다.
발화 수집
+ Speex 인코딩
+ 소켓 전송
+ 질문 인식과 답변 생성
+ 합성 음성 생성
+ 딥페이크 영상 생성
+ WebRTC 전달
+ 앱 디코딩과 첫 프레임 재생전체 응답 시간 하나만 기록하면 느린 구간을 찾기 어렵습니다. 음성 첫 샘플, 발화 종료, 서버 수신 완료, 응답 생성 완료, 첫 미디어 패킷, 첫 프레임 재생 시점을 같은 요청 ID로 연결하면 전송과 생성 지연을 나눠 볼 수 있습니다.
WebRTC 음성 코덱과 Speex도 구분해야 합니다
WebRTC와 Speex가 같은 흐름에 있다고 해서 WebRTC가 Speex를 표준 음성 코덱으로 사용한다는 뜻은 아닙니다. RFC 7874는 WebRTC 엔드포인트가 구현해야 하는 기본 음성 코덱으로 Opus와 G.711의 PCMA, PCMU를 규정합니다.
Speex는 별도의 소켓 경로로 올라가는 사용자 음성에 사용할 수 있습니다. 돌아오는 딥페이크 영상과 합성 음성은 WebRTC 미디어 경로로 전달할 수 있습니다. 같은 대화 안에서도 입력과 출력은 서로 다른 코덱과 전송 조건을 가질 수 있습니다.
합성 얼굴과 음성에는 안전장치가 필요합니다
합성 얼굴과 목소리를 사용하는 서비스라면 사용자가 AI와 대화하고 있다는 사실을 분명히 알려야 합니다. 얼굴과 목소리 원본의 사용 동의, 생성물의 저장 기간, 접근 권한과 오용 방지 기준도 기능 설계와 함께 정해야 합니다.
사람 상담이 필요한 상황으로 전환하는 경로도 중요합니다. 합성 음성이 자연스럽게 들리는 것과 사용자가 시스템의 정체와 한계를 이해하는 것은 별개의 문제입니다. 기술적으로 매끄러운 재생만으로 안전한 상담 경험이 완성되지는 않습니다.
함께 읽기
- LLM 토큰 스트리밍은 응답을 빠르게 만들까?같은 모델에 같은 질문을 두 번 보낸다고 해 보겠습니다. 한 번은 stream: false, 한 번은 stream: true 입니다. 스트리밍 쪽이 훨씬 빠르게 느껴집니다. 그런데 마지막 글자가 도착하는 시각은 두 쪽이 거의 같습니다. 모델은 어느 쪽이든 토큰을 하나씩 순서대로 만들고, 스트리밍은 그 순서를 바꾸지 않기…
- AI 도입 전에 물어야 할 것: ERP 를 바꿀 일인가, 앞뒤를 붙일 일인가AI 기능이 들어갔다는 업무 시스템으로 갈아탔습니다. 반년이 지났는데 현장에서는 여전히 거래처 카톡을 읽어 엑셀에 옮겨 적고 있습니다.
- LLM 게이트웨이 직접 구현: 스트리밍부터 사용량 기록까지이 글에서 직접 구현할 LLM 서버는 모델 가중치를 GPU에 올리는 추론 서버가 아닙니다. 여러 외부 또는 내부 모델 엔드포인트 앞에서 인증, 모델 선택, 스트리밍, 장애 처리, 사용량 기록을 담당하는 애플리케이션 계층의 LLM Gateway입니다. 모델 추론 자체는 vLLM 같은 별도 엔진이나 상용 API가 담당한다고…
- LiteLLM의 역사: Python SDK에서 AI Gateway까지LiteLLM을 단순한 멀티 모델 호출 라이브러리로만 이해하면 현재 모습의 절반만 보게 됩니다. 출발점은 Python 애플리케이션 안에서 여러 AI 모델 제공자를 같은 방식으로 호출하는 일이었지만, 지금은 조직의 모델 접근을 한곳에서 통제하는 AI Gateway까지 범위가 넓어졌습니다. 이 변화는 이름만 커진 것이 아니…
- 에이전트 RAG를 작은 모델로 짜는 법: 도구 선택은 코드가, 답은 모델이에이전트 RAG라는 말을 처음 들었을 때 떠올린 그림은, 모델이 스스로 판단해 도구를 부르는 거였습니다. "이 질문은 검색을, 이 질문은 DB 조회를" 모델이 결정하고, 그 결과를 받아 다시 답을 쓰는 구조. 그런데 막상 작은 로컬 모델로 이걸 짜려니 한 가지가 걸렸습니다. 도구를 고르는 결정을 모델에게 맡길 수가 없었…