Voice Cloning + TTS API 시스템 PRD

목표:
사용자가 제공한 음성으로 개인화된 TTS 서비스를 제공하는 오픈소스 기반 API 시스템을 Google Cloud 위에 구축한다.

 

 핵심 기능 요약

기능 설명
음성 클로닝 사용자가 업로드한 음성(3~5초)을 기반으로 음색 임베딩 생성
텍스트 → 음성 합성 사용자가 입력한 텍스트와 임베딩을 사용하여 음성 생성
REST API 음성 업로드, 합성 요청, 결과 조회 API 제공
저장 Cloud Storage에 사용자 음성 및 합성 결과 저장
GPU 기반 추론 Vertex AI Custom Job을 활용한 TTS 처리 (필요 시 GCE로 확장)

 

 구성 요소 및 기술 스택

구성 요소 기술 설명
음성 클로닝 모델 xtts-v2, YourTTS, SV2TTS 음성 임베딩 생성 및 다국어 음성 합성 지원
TTS 엔진 xtts-v2 (by Coqui) 텍스트 + 임베딩 → 오디오 생성
API 서버 FastAPI + Docker + Cloud Run /upload, /synthesize REST API 제공
음성 저장소 Cloud Storage 원본 및 합성 음성 저장 (gs://.../voices/, .../results/)
TTS 실행 환경 Vertex AI Custom Job (GPU) 비용 효율적 배치 처리용
향후 확장 가능 환경 GCE GPU 인스턴스 + FastAPI 실시간 추론 서비스 필요 시 확장
임베딩 관리 Firestore 또는 Redis (옵션) user_id별 speaker embedding 저장
배포 자동화 Cloud Build + Artifact Registry + YAML CI/CD 구성
인증 및 보안 Firebase Auth / Cloud IAM / API Key 사용자 인증, 호출 제한
모니터링 Cloud Logging, Error Reporting 상태 추적 및 장애 감지

 

 아키텍처

graph TD
  A[사용자] -->|음성 업로드| B[Cloud Run API 서버]
  B --> C[Cloud Storage (원본 음성 저장)]
  B --> D[Vertex AI Custom Job (XTTS 추론)]
  D --> E[Cloud Storage (합성 결과 저장)]
  B -->|합성 음성 URL 반환| A

 

 폴더 및 Docker 구조

voice-clone-backend/
├── cloudrun-api/                        # Cloud Run용 경량 API 서버
│   ├── app/
│   │   ├── main.py                      # /synthesize 요청 수신
│   │   ├── trigger_job.py              # Vertex Job 실행용 wrapper
│   │   ├── voice_encoder.py            # 사용자 음성 임베딩
│   │   ├── storage.py                  # GCS 입출력
│   │   └── config.py                   # 환경 설정
│   ├── requirements.txt                # ⚠️ TTS 제거
│   ├── Dockerfile                      # Cloud Run용
│   └── deploy/
│       └── cloudrun.yaml               # 배포 스크립트
└── vertex-job/                         # Vertex AI Custom Job 실행 코드
    ├── job/
    │   ├── run_batch.py                # text + voice_id → 음성 생성
    │   ├── tts_engine.py              # XTTS 호출 wrapper
    │   ├── voice_encoder.py           # 동일하지만 Vertex 버전
    │   ├── storage.py
    │   └── config.py
    ├── requirements.txt                # ⚠️ TTS 포함 (TTS, torch 등)
    ├── Dockerfile                      # Vertex Job용
    └── deploy/
        └── xtts-job.yaml              # Custom Job 정의 YAML

 

처리 흐름

1. 사용자 음성 업로드

  • 클라이언트 → /upload-voice 호출 (파일 포함)
  • Cloud Run → GCS /voices/{user_id}/sample.wav 저장
  • (선택) speaker embedding 생성 후 Firestore/캐시에 저장

2. 텍스트 → 음성 합성

  • 클라이언트 → /synthesize 호출 (text, user_id)
  • Cloud Run → Vertex AI Custom Job 실행 요청
  • XTTS 모델 실행: sample.wav + text.wav 결과 생성
  • 결과 파일 gs://.../results/{user_id}/{uuid}.wav 저장
  • Cloud Run → 결과 URL 반환

 

 비용 전략

실행 방식 장점 월 예상 비용 (T4 기준)
Vertex AI Custom Job 사용한 시간만큼만 과금 (비용 효율) $30$50/월 (1일 12시간 기준)
GCE GPU 인스턴스 실시간 API 서버 운영 가능 $390~400/월 (상시 실행 기준)

 

 

구현 내용

https://github.com/blcktgr73/VoiceCloning

+ Recent posts