일본어 TTS 'Irodori-TTS'를 Databricks Model Serving으로 서빙하기 (Part 1)
요약
일본어 TTS 모델인 Irodori-TTS를 Databricks Model Serving을 활용하여 API 형태로 배포하는 방법을 다룹니다. 이 글은 AI 에이전트가 외부 도구로 음성 합성을 호출할 수 있도록 환경 구축에 초점을 맞추고 있습니다. 모델 자체보다 '환경 구성'과 '배포 방법(env_pack)'을 중심으로 설명하며, 셀프호스팅의 필요성과 최근 TTS 시장 동향도 함께 분석합니다.
핵심 포인트
- Irodori-TTS는 일본어 전용 오픈소스 TTS 모델로 보이스 클론 및 문장 지정이 가능합니다.
- Databricks Model Serving을 사용해 모델을 API 형태로 배포하는 과정을 설명합니다.
- AI 에이전트가 음성 합성을 호출하기 위해서는 '환경 구성'과 '배포 환경' 구축이 핵심입니다.
- 최근 TTS 시장은 Web API 방식이 주류이나, 기업의 보안 및 통제 요구로 셀프호스팅이 중요해지고 있습니다.
서론
일본어 음성 합성 모델 Irodori-TTS를 Databricks의 Model Serving을 사용하여, '텍스트를 보내면 음성이 돌아오는 API' 형태로 구동해 보았습니다.
Irodori-TTS는 Aratako 님이 공개한 일본어 전용 오픈소스 음성 합성(TTS: Text-to-Speech) 모델입니다. 0.8B로 비교적 작은 모델임에도 불구하고, '차분한 여성 목소리로'와 같은 문장으로 목소리를 지정하거나, 예시 음성으로부터 보이스 클론이 가능하며, 코드와 가중치 모두 MIT 라이선스로 공개되어 있습니다. 따라서 자신의 환경에서 구동하여 업무나 제작에 통합하기 쉬운 모델입니다(자세한 내용은 다음 장에서 소개합니다).
계기가 된 것은 '음성 합성을 API 형태로 항상 호출할 수 있는 상태로 만들어 놓으면, AI 에이전트로부터 자유롭게 호출할 수 있게 되어 프레젠테이션 영상 제작 등에 활용할 수 있지 않을까'라고 생각했기 때문입니다. 슬라이드와 원고를 전달하면, 에이전트가 내레이션을 입혀 영상을 만들어 주는 수준까지 구현된다면 편리할 것 같습니다.
핵심은 모델 자체보다는 '모델을 구동하기 위한 환경(라이브러리 버전 조합)' 이었습니다. 본 기사(Part 1)에서는,
- 먼저
AI Runtime의 노트북이나 잡(Job)에서 구동하는 방법 - Model Serving의
배포 방법을 선택하는 것 -
**env_pack (Express deployments)**으로 등록하여 서빙하는
순서로 작성해 나갈 것입니다.
본론에 들어가기 전에, 최근 TTS 상황과 모델을 자신의 환경에서 구동(셀프호스트)한다는 의미, 그리고 비즈니스에서의 활용처를 정리하겠습니다.
또한, 더 큰 모델인 Irodori-TTS-v4-Large(3.29B) 역시 같은 방식으로 서빙할 수 있었습니다(⑤).
환경 관련 내용은 사전 지식이 있으면 쉽게 읽을 수 있는 부분이지만, 그렇지 않은 경우 무엇이 일어나고 있는지 이해하기 어려울 수도 있습니다. 따라서 이번에는 최대한 '왜 그렇게 되는지'부터 신중하게 설명하려고 했습니다. 익숙한 분들은 코드와 표만 골라 읽으셔도 괜찮습니다.
긴 문장의 낭독 방법과 양자화(Quantization)의 벤치마크는 Part 2에서 작성하겠습니다.
검증에 사용된 코드는 GitHub에 공개했습니다.
- 리포지토리:
https://github.com/hiouchiy/model-irodori-tts-on-databricks
활발해진 TTS와 셀프호스트라는 선택지
최근의 TTS 동향
최근 음성 합성(TTS) 분야가 매우 활발하게 움직이고 있습니다.
Google의 Gemini API에서는 2026년 9월에 TTS 전용 모델인 gemini-3.8-flash-tts와 gemini-3.8-flash-lite-tts가 일반 제공(GA)되었습니다. 목소리 디자인이나 보이스 클론(본인 동의 확인 필수)에도 대응하고 있습니다. 음성 합성 서비스로 잘 알려진
ElevenLabs는 호스트형 MCP 서버를 준비했습니다. MCP(Model Context Protocol)는 AI 에이전트가 외부 도구를 호출하기 위한 공통 규격이며, Claude 등의 에이전트로부터 OAuth로 연결하는 것만으로 음성 생성이나 보이스 클론을 사용할 수 있게 되었습니다.
AI 에이전트로부터 음성을 만드는 환경이 급속도로 갖춰지고 있습니다.
대표적인 서비스는 'Web API를 사용하는' 방식
다만, 이러한 대표적인 서비스나 모델은 기본적으로 제공처의 Web API를 호출하여 사용하는 형태입니다. 낭독할 원고도, 보이스 클론에 사용할 예시 음성도 제공처 서버로 전송하게 됩니다.
간편하고 품질도 높기 때문에 대부분의 경우 그것만으로 충분합니다. 반면, 기업에 따라서는 **'이러한 모델을 자신들의 관리 하에 두고 싶다'**는 요구사항이 있을 것이라고 생각합니다. 오픈소스 모델을 자신의 환경에서 구동(셀프호스트)하는 의미는 예를 들어 다음과 같은 곳에 있습니다.
1. 데이터와 음성을, 자신들의 관리 하에 둘 수 있다
원고에는 발표 전 제품 정보나 고객의 이름/계약 내용 등이 포함될 수 있습니다. 또한, 보이스 클론에 사용할 예시 음성은 그 사람을 특정할 수 있는 민감한 데이터입니다.
셀프 호스팅(Self-host)의 경우, 원고, 예시 음성, 생성된 음성 모두 자체 환경에서 벗어나지 않습니다. Databricks를 사용하면 Unity Catalog의 권한 관리나 감사 로그 메커니즘 내에서 처리할 수 있습니다.
2. 모델을 직접 선택하고 고정하며 조정 가능
Web API로 제공되는 모델은 제공처 사정에 따라 업데이트되거나 서비스가 종료될 수 있습니다 (실제로 위의 gemini-3.8-flash-lite-tts는 반년 전에 나온 프리뷰 버전의 후속이라는 위치입니다). 셀프 호스팅이라면, 직접 정한 모델/버전을 계속 사용할 수 있기 때문에 '지난달 만든 영상과 같은 목소리로 다음 내용을 만들고 싶다'는 상황에서도 곤란하지 않습니다.
게다가 모델 파라미터 전체를 건드릴 수 있을 뿐만 아니라, LoRA를 이용해 자사 내레이터의 목소리에 맞춘 추가 학습도 할 수 있습니다. API 형태 역시 자체 에이전트나 애플리케이션에 맞춰 결정할 수 있습니다.
3. 데이터 기반 환경에서 자신에게 맞는 형태로 구동 가능
회사 내부 데이터, LLM, 에이전트, 배치 작업과 동일한 Databricks 내에서 작동하므로, '데이터로 원고를 만들고 그대로 음성으로 만들기'와 같은 흐름을 하나의 환경 안에서 구성할 수 있습니다.
비용 구조도 달라집니다. Web API는 글자 수 등에 따른 종량제(従量課金)가 일반적이지만, 셀프 호스팅은 GPU 구동 시간에 따른 과금입니다. 대량의 음성을 한 번에 만들 경우 유리할 때가 있으며, scale-to-zero로 설정하면 사용하지 않는 시간에는 요금이 발생하지 않습니다.
Web API는 편리성이나 다국어 대응 같은 장점이 있고, 셀프 호스팅에는 여기서 언급된 장점들이 있습니다. 용도에 따라 Web API와 셀프 호스팅을 적절히 분리하여 사용하는 것이 이상적이라고 생각합니다.
본 기사는 그 셀프 호스팅 측면을 Databricks에서 실제로 구현해 본 기록입니다.
TTS의 비즈니스 활용 사례
구체적으로 업무에서는 어떤 사용법이 생각해 볼 수 있을까요. 몇 가지 예를 들어보겠습니다.
예시 1: 교육/제품 설명/프레젠테이션 영상 내레이션
사내 교육 영상이나 제품 데모 영상, 웨비나 녹화 등은 내레이션을 녹음하는 데 많은 노력이 필요합니다. 게다가, 내용이 바뀔 때마다 재녹음해야 합니다.
TTS를 사용하면 슬라이드 스피커 노트나 원고로부터 내레이션을 자동으로 만들 수 있습니다. 원고만 수정하면 그 부분만 다시 만들면 되므로, 처음부터 끝까지 같은 목소리로 통일할 수 있습니다. 아직 공개하지 않은 제품 자료도 셀프 호스팅이라면 외부로 빼내지 않고 만들 수 있습니다 (Part 2에서 Google 슬라이드로부터 내레이션 영상을 만드는 예를 소개하겠습니다).
예시 2: 콜센터 음성 안내
전화 자동 응답(IVR) 안내나 예약 확인/리마인드 전화 등, 정해진 형태의 음성 안내에도 사용할 수 있습니다.
안내 문구를 바꿀 때마다 내레이터에게 다시 녹음해 달라고 요청하는 대신, 문구만 수정하여 음성을 다시 만들면 됩니다. 고객 이름이나 예약 일시가 들어간 안내문도 고객 데이터를 외부에 노출하지 않고 음성으로 만들 수 있습니다.
예시 3: 리포트나 뉴스를 '들을' 수 있게 하기
매일의 매출 리포트, 사내 공지사항, 업계 뉴스 요약 등을 음성 브리핑 형태로 사용하는 방법입니다.
예를 들어, Databricks의 작업(Job)으로 매일 아침,
- 데이터로부터 LLM을 이용해 요약 원고 생성
- 그것을 TTS로 음성 변환
- 직원이 이동 중 등에 들을 수 있도록 배포
이러한 흐름을 구성할 수 있습니다. 데이터 집계부터 음성 제작까지, 모든 것이 동일한 환경 안에서 완결됩니다. 화면 보기 어려운 분들을 위한 접근성(Accessibility) 측면에서도 도움이 됩니다.
Irodori-TTS란?
Irodori-TTS는 Aratako 님이 개발 및 공개하신 일본어 전용 음성 합성 모델입니다. 이미지 생성에 자주 사용되는 확산 모델과 유사한 구조(Flow Matching)로 음성을 만드는 모델이며, 텍스트를 읽어주는 것뿐만 아니라, 어떤 목소리로, 어떤 분위기로 읽을지 세밀하게 제어할 수 있다는 특징이 있습니다.
처음에 서비스된 것은 2026년 10월 시점의 Small 최신 버전인 Aratako/Irodori-TTS-v4.1-Small입니다.
| 항목 | 내용 |
|---|---|
| 파라미터 수 | 0.8B (8억) |
| ... |
할 수 있는 것
문장으로 목소리를 디자인하기(Voice Design): '차분하고, 가까운 거리감의 여성 화자'처럼 목소리나 말하는 방식을 문장(캡션)으로 지정할 수 있습니다. - 예시 음성으로부터 보이스 클론: 참조 음성을 제공하면 그 목소리에 맞춰 읽어줍니다 (모델 카드에서는 30초 이상의 참조 음성이 권장됩니다). - 이모티콘으로 스타일 제어하기: 입력 텍스트에 이모티콘을 넣으면, 읽는 방식의 감정이나 스타일에 반영됩니다. - LoRA를 이용한 파인튜닝: 특정 화자에게 맞추기 위한 추가 학습 스크립트도 공개되어 있습니다.
v4.1에서는 v4-Small 본체는 그대로 두고, 음성 길이 예측 부분만 재학습하여 길이 자동 추정의 정확도를 높였습니다. 그 외에도 적은 단계로 생성할 수 있는 경량 버전(-MF)이나 양자화 버전도 공개되어 있습니다.
반면, 일본어 이외의 텍스트에는 대응하지 않습니다. 또한, 어려운 한자의 읽기나 고유명사는 잘못 읽을 수 있습니다 (이에 대한 대책은 Part 2에서 다룹니다).
큰 모델 'v4-Large'도 존재합니다
Irodori-TTS에는 더 큰 Aratako/Irodori-TTS-v4-Large도 있습니다. 어느 쪽이 우수하다기보다는, 강점 분야가 다른 모델입니다.
v4.1-Small | v4-Large |
|---|---|---|
| 파라미터 수 | 0.8B | 3.29B (약 4배) |
| 문장을 읽는 부분 | ModernBERT (일본어) | Google의 T5Gemma 2를 기반으로 한 것 |
| 강점 분야 (모델 카드 평가) | 한자 읽기의 정확성 (상용 한자의 정답률 93.4%. Large는 92.8%) | 목소리 디자인 (캡션대로 목소리가 되었는지에 대한 평가가 4.30 / 5. Small은 4.23), 보이스 클론 (예시 음성과의 유사도). 참조 음성은 최대 120초까지 |
| 적합한 사용 사례 | 오독이 문제가 되는 나레이션 (슬라이드, 자료 읽기) | 캡션으로 목소리를 만들어내고 싶을 때, 보이스 클론을 하고 싶을 때 |
| 라이선스 | MIT | Gemma Terms of Use (후술) |
라이선스와 사용 시 주의사항
v4.1-Small은 코드와 모델 가중치 모두 MIT 라이선스이므로, 상업적 이용을 포함하여 자유롭게 사용할 수 있습니다. 자신의 환경에서 서빙하거나 앱에 통합하기 쉬운 것도 이 라이선스 덕분입니다.
v4-Large는 문장을 읽는 부분이 Google의 google/t5gemma-2-1b-1b를 기반으로 하고 있기 때문에, 모델 전체가 Gemma Terms of Use 하에 공개되어 있습니다. 간단히 말하면 다음과 같습니다 (정확하게는 이용 약관 본문을 확인해 주세요).
- 상업적 이용은 가능합니다. 생성된 음성에 대해 Google은 권리를 주장하지 않습니다 (책임은 사용하는 쪽에 있습니다). - 자신들(사내 포함)이 사용할 경우에도, **Gemma의 금지 사항(Prohibited Use Policy)**을 지켜야 합니다. - API나 웹 서비스로 외부 사람들에게 사용하게 할 경우는 이용 약관상 '배포'에 해당합니다. 이용자가 동의하는 약관에 동일한 금지 사항을 포함해야 합니다.
덧붙여, 필자는 법률 전문가가 아니므로 여기에 적은 내용은 어디까지나 개인적인 해석 요약입니다. 실제로 사용할 때는 이용 약관 본문을 직접 확인하시거나, 사내 법무 부서 등 전문가와 상담 후 판단하시는 것이 좋겠습니다.
두 모델 모두 모델 카드에는 본인의 동의 없는 목소리 클론이나, 오정보/딥페이크 생성에 사용하지 않도록 윤리적 제한이 명시되어 있습니다. 또한, 생성된 음성에는 **SilentCipher를 통한 들을 수 없는 워터마크(Watermark)**가 자동으로 삽입되어, AI로 생성된 음성임을 나중에 식별할 수 있게 되었습니다.
미리 알아두면 좋은 것들
본론에 들어가기 전에, 이 기사에서 여러 번 등장하는 용어들을 정리해 두겠습니다.
Model Serving
Model Serving은 Databricks에서 모델을 REST 엔드포인트로 공개하기 위한 서비스입니다. GPU가 장착된 서버 준비나 관리는 Databricks가 해주기 때문에, 사용하는 쪽에서는 URL에 요청만 보내면 됩니다.
AI Runtime
AI Runtime은 딥러닝을 위한 Databricks의 서버리스 GPU 컴퓨팅입니다. 클러스터를 준비할 필요 없이 노트북에 GPU를 연결하거나 CLI에서 GPU 작업을 실행할 수 있습니다.**
이번에는 모델 구동 확인과 Model Serving 등록 작업 모두 이 AI Runtime(A10이라는 GPU) 위에서 진행했습니다.
torch와 CUDA의 '버전 조합'
이번 핵심 포인트는 바로 여기입니다.
torch는 '어떤 버전의 CUDA로 작동하는지'가 결정된 형태로 배포됩니다. 예를 들어 torch 2.10.0+cu128은 'torch 2.10용, CUDA 12.8용'이라는 의미이고, torch 2.7.1+cu118은 'torch 2.7.1용, CUDA 11.8용'이라는 의미입니다.
최신 OSS 모델들은 새로운 torch를 전제로 만들어지는 경우가 많기 때문에, Irodori-TTS 역시 torch 2.10 / CUDA 12.8이 필요합니다. 단순히 torch뿐만 아니라 음성 처리의 torchaudio나 이미지 처리의 torchvision 같은 주변 라이브러리들도 torch와 정확히 동일한 조합으로 갖춰져 있지 않으면 작동하지 않습니다.
이 '버전 조합'을 Model Serving에서도 그대로 재현하는 것이 이번 이야기입니다.
검증 환경
| 항목 | 내용 |
|---|---|
| 동작 확인/등록 | AI Runtime(GPU_1xA10, 환경 버전 4)의 노트북 및 작업(AI Runtime CLI, Beta) |
| ... | Aratako/Irodori-TTS-v4.1-Small (①~④), Aratako/Irodori-TTS-v4-Large (⑤) |
①~④는 Small로 설명합니다. Large도 같은 절차로 작동하며, 차이점은 ⑤에 정리했습니다.
리포지토리에는 노트북, AI Runtime 배치 작업, Model Serving의 세 가지 구동 방식이 준비되어 있습니다. 모두 동일한 irodori_core.py를 사용하며, 라이브러리 버전이나 텍스트에서 음성을 만드는 처리 과정은 모두 여기에 모여 있습니다.
① 먼저 AI Runtime으로 작동시키기
바로 Model Serving에 올리는 것이 아니라, 우선 AI Runtime 위에서 일반적으로 작동하는지를 확인했습니다.
작성자의 환경 그대로 재현하기
Irodori-TTS 리포지토리에는 uv.lock이라는 파일이 있습니다. 이것은 Python 패키지 관리 도구인 uv가 사용하는 파일로, 작성자가 구동했을 때의 라이브러리 버전이 모두 기록된 '환경 레시피' 같은 것입니다.
Databricks의 AI Runtime에는 작업 설정 파일(environment.dependencies)에 필요한 라이브러리를 적어두면 자동으로 넣어주는 기능이 있습니다. 하지만 이번에 사용한 환경 버전 4(Python 3.12)에는 원래부터 torch 2.7.1이 포함되어 있기 때문에, torch 2.10을 전제로 한 모델은 별도의 환경을 만들어서 넣는 것이 더 확실합니다.
environment:
version:
사용할 경우 `/tmp/tts_venv`
에 **비어있는 새로운 Python 환경(가상 환경)을 만들고**, 그곳에 `uv.lock`
에 적힌 버전만 설치합니다. 기본으로 들어 있는 torch 2.7.1은 **다른 곳에 있으므로 전혀 관계없습니다**.
`uv run`
으로 실행된 프로그램은 이 가상 환경의 Python과 라이브러리를 사용합니다. `uv.lock`
에는 각 패키지의 버전과 출처까지 기록되어 있어, **작성자의 환경과 같은 조합**을 재현할 수 있습니다.
`uv.lock`
을 가지고 있는 최신 OSS 모델이라면, 대략 같은 방식으로 구동할 수 있을 것이라고 생각합니다.
A10으로 Databricks를 소개하는 27초 분량의 내레이션이 문제없이 생성되었습니다. 처리별 시간은 다음과 같습니다. 음성을 만드는 본체(RF 샘플링)에서도 약 2.5초가 소요됩니다.
| 처리 | 시간 |
|---|---|
| 문장을 세분화하는 것 (토큰화) | 2.7 ms |
| 음성 길이 예측 | 150 ms |
| 음성을 만드는 것 (RF 샘플링, 40 스텝) | 2.5초 |
| 음성 데이터로 되돌리는 것 (디코딩) | 0.31초 |
| 워터마크 삽입 | 0.34초 |
### 구동 시 알아두면 좋은 팁
음성을 다룰 때 알고 있으면 유용한 것을 세 가지 적어둡니다.
-
**음성 저장에는** `soundfile`
을 사용합니다. `torchaudio.save`는 FFmpeg을 사용하지만, AI Runtime 이미지에는 FFmpeg이 들어있지 않기 때문에, FFmpeg을 사용하지 않는 `soundfile`로 저장했습니다. -
**UC Volume (WAV는 저장 후 파일의 시작(헤더)을 다시 쓰는 형식이라, 일단 `/Volumes/...`
에서)에 WAV를 저장할 때는, `/tmp`
나 메모리 상에서 만든 다음 복사합니다. `/tmp`
에 쓰거나, 메모리 상(`io.BytesIO`
)에서 만들고 Volume에 저장했습니다. -
AI Runtime에서는 이 설정을 `HF_HUB_ENABLE_HF_TRANSFER`
을 `0`으로 해둡니다. `1`로 되어 있지만, 이번 환경에는 `hf_transfer`
패키지를 넣지 않았기 때문에, `0`(사용 안 함)으로 했습니다.
huggingface_hub는 로드되는 순간 이 설정을 보기 때문에, 가장 먼저 적어둡니다
os.environ[
Irodori-TTS는 torch 2.10 / CUDA 12.8와, 이에 맞는 torchaudio 등이 정확하게 갖춰져 있어야 합니다. 검증 시점의 베이스 이미지는 torch 2.7.1 / CUDA 11.8이었기 때문에, AI Runtime에서 작동한 환경을 그대로 가져갈 수 있는 Express deployments를 선택했습니다.
③ env_pack (Express deployments)로 등록하기
env_pack의 원리
Express deployments는 mlflow.register_model에 env_pack을 지정하여 등록한 모델에서 사용할 수 있습니다.
env_pack을 지정하면, 등록을 실행한 노트북의 Python 환경(설치된 패키지 일체)이 모델과 함께 패키징되며, 엔드포인트에서는 그 환경이 그대로 복원됩니다. 따라서 엔드포인트 측에서 의존 관계를 다시 해결할 필요가 없어, AI Runtime의 노트북에서 검증한 torch 2.10 / CUDA 12.8 환경이 서비스(serving)에서도 그대로 사용됩니다.
패키징되는 것은 등록한 노트북의 환경이기 때문에, 등록은 서비스를 할 때와 동일한 구성(GPU를 사용하는 AI Runtime)의 노트북에서 진행합니다.
등록 코드
등록용 노트북(notebooks/register_serving.py)은 다음 흐름으로 되어 있습니다.
- 필요한 라이브러리를 설치한다.
- Irodori-TTS 코드를 고정된 커밋으로 가져와서, 서비스할 때와 완전히 동일한 코드로 A10 위에서 한 번 음성을 만들어 본다 (여기서 작동하지 않으면 서비스해도 작동하지 않으므로).
- MLflow 형태로 감싸고, env_pack을 포함하여 Unity Catalog에 등록한다.
register_serving.py (발췌)
import mlflow
from mlflow.utils.env_pack import EnvPackConfig
mlflow.set_registry_uri("databricks-uc") # 등록지는 Unity Catalog
...
핵심 포인트는 두 가지입니다.
log_model(감싸기)과register_model(등록하기)을 분리하고,register_model쪽에서env_pack을 지정한다. - 이유: 나중에 설명하겠습니다. 또한,install_dependencies=False로 설정합니다.
이 노트북은 AI Runtime의 Job으로 실행했습니다.
databricks jobs submit --no-wait --json '{
"run_name": "irodori-tts-register",
"tasks": [{
즉, 지정한 라이브러리뿐만 아니라 그것이 의존하는 라이브러리까지도 **조건(예: '이 버전 이상', '이 버전 미만' 등)을 만족하도록 자동으로 설치**해 줍니다. 평소에는 편리한 기능이지만, 오래된 버전을 요구하는 라이브러리가 섞여 있으면 다른 라이브러리까지 그 오래된 버전에 맞추어 버리는 경우가 생길 수 있습니다.
#### 요령 1: 구버전 protobuf를 요구하는 라이브러리는 2단계로 나누어 설치하기
Irodori-TTS가 사용하는 음성 코덱인 `dacvae`는 `descript-audiotools`라는 라이브러리에 의존하고 있습니다. 그리고 이 `descript-audiotools`는 **'protobuf는 3.20 미만'**이라는 상당히 오래된 버전 조건을 걸고 있습니다.
**protobuf**는 프로그램들끼리 데이터를 주고받을 때 사용되는 라이브러리입니다. Databricks 노트북에서도 Spark와 통신하는 부분(Spark Connect) 등에서 사용되는데, 최신 버전이 필요합니다.
그대로 설치하면 pip가 `descript-audiotools`의 조건에 맞춰 protobuf를 3.19.6으로 바꿔버려, 노트북이 Spark와 통신하는 데 필요한 구성 요소(`google.protobuf.internal.builder`)가 사라지게 됩니다.
조사해 보니, `descript-audiotools`
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기