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