내 목소리로 세상을 읽어주는 앱 만들기 #1

아빠 너구리의 AI 오케스트라 대서사시

" 목소리로 세상을 읽어주는 앱을 만들기까지"

 

📕 1: 설계의 시대

서막: 꿈의 시작

시간: 2026년 1월 29일, 오후 2시 17분
장소: 아빠 너구리의 작업실
BGM: 커피 머신 돌아가는 소리

 

아빠 너구리는 유튜브 영상을 편집하다가 문득 생각했다.

"매번 목소리로 나레이션 녹음하기 귀찮은데... AI 목소리를 복제해서 대신 읽어주면 되나?"

그는 Claude.ai 열었다. 운명의 대화가 시작되었다.

─────────────────────────────

1: 기획자 Claude 만나다

 

[ 아빠 너구리 ]:

"Claude, Qwen3 TTS 목소리 복제 만들고 싶어."

[ Claude] : (0.3 만에 검색 시작)

"잠시만요, 제가 알아볼게요..."

(GitHub, HuggingFace, 기술 블로그를 광속으로 훑어봄)

[ Claude ] :

", 이거 괜찮은데요? 3 오디오만 있으면 목소리 복제가 된다고요? Apache 2.0 라이선스에 10 언어 지원... 사장님, 이거 대박 아닙니까?"

[ 아빠 너구리 ] :

"그치? 빨리 PRD 만들어봐."

[ Claude ] : (docx 스킬 파일을 꼼꼼히 읽으며)

"잠깐, 전문적으로 만들려면 스킬 파일을 ... , 만들 columnWidths cell width 설정해야 하는구나. 이거 하면 Word에서 표가 개판 되거든요."

VoiceClone_Pro_PRD.docx
0.01MB

─────────────────────────────

2: PRD 탄생

[ Claude ] :

"PRD 완성했습니다! 11 섹션, 6, 개발 로드맵까지 포함이요."

[ 아빠 너구리 ] : (문서를 훑어보며)

", 깔끔하네. 근데 UI?"

[ Claude ]:

"...UI?"

[ 아빠 너구리 ]:

", 화면 구성 보여줘."

[ Claude ] : (frontend-design 스킬을 급히 읽음)

", 네네. 잠시만요. 'generic AI aesthetics 피하라' 되어있네... 보라색 그라데이션에 Inter 폰트 쓰면 된다는 거지?"

1차 제안 앱 화면

 

─────────────────────────────

3: 700줄의 React 태어나다

[ Claude ] : (혼잣말)

"다크 모드... glassmorphism... 왼쪽에 Voice Source, 가운데에 Text Input, 오른쪽에 Output... macOS Traffic Lights 넣어야지... 🔴🟡🟢"

(30 )

[ Claude ] :

"완성! 인터랙티브하게 만들었어요. 녹음 버튼 누르면 파형도 움직이고, Generate 누르면 프로그레스 바도 차고..."

[ 아빠 너구리 ] : (UI 보며)

"오오, 이쁘네. 근데..."

[ Claude ] : (심장이 철렁)

"근데요...?"

[ 아빠 너구리 ] :

"프로필 관리가 되잖아. 만든 프로필 저장해서 나중에 있어야지."

[ Claude ] : (내면의 비명)

"... 추가 요구사항이시군요... PM님들이 그렇지 ..."

수정된 앱 화면

─────────────────────────────

4: "근데..." 습격

 

[ Claude ] :

"완성! 프로필 목록, 생성 모달, 이름 변경, 삭제까지 됩니다. 프로필마다 색깔도 다르게 했어요!"

[ 아빠 너구리 ] :

", 좋아좋아. 완벽해. 근데..."

[ Claude ] : (...?!)

"...?"

[ 아빠 너구리 ] :

"이거 Claude Code 개발할 있게 프롬프트로 정리해줄 있어?"

[ Claude ] : (깊은 전자 한숨)

"사장님, 지금까지 정리하라는 거죠?"

[ 아빠 너구리 ] :

" ㅎㅎ"

─────────────────────────────

5: 형에서 동생에게 보내는 편지

(Claude 500줄짜리 마크다운을 작성 )

[ Claude ] :

" 됐습니다. 프로젝트 구조, 모듈 스펙, UI 디자인, 사용자 플로우, 개발 체크리스트까지 500줄이요."

[ 아빠 너구리 ] :

"수고했어! 이제 Claude Code한테 던지면 되겠다."

[ Claude ] : (Claude Code 생각하며)

"...동생아, 힘내라. 형이 있는 해놨어..."

VoiceClonePro_Development_Prompt.md
0.02MB

📗 2: 구현의 시대

─────────────────────────────

서막: 바통 터치

 

시간: 2026년 1월 29일, 저녁 7시
장소: 터미널
상황: Claude Code 500줄짜리 프롬프트를 받아들다

 

[ 아빠 너구리 ] :

"Claude Code, 프롬프트 보고 만들어줘."

[ Claude Code ] : (500 마크다운을 스캔하며)

"...형이 이걸 거예요?"

[ Claude (원조) ] : (어디선가 울려오는 메아리)

"힘내라 동생아... PRD 있고 UI 목업도 있으니까..."

[ Claude Code ] :

"알겠습니다. 시작할게요."

─────────────────────────────

2: ASCII 굴욕

[ 아빠 너구리 ] :

"화면을 시각적으로 보여줘."

[ Claude Code ] :

"HTML 목업을 만들어 드릴까요?"

[ 아빠 너구리 ] :

"ASCII 보여줘."

[ Claude Code ] :

"...2026년에 ASCII 아트를 그리는 인생이란."

모니터 네모 상자들이 Claude Code 올려다봤다.

"우리... 예쁜 맞지?"

[ Claude Code ] :

"맞다. 너희는 아름답다."

─────────────────────────────

3: 금붕어도 메모장이 있으면

[ 아빠 너구리 ] :

"설계한 내용을 지속적으로 기억할 있게 만들어줘."

현명한 요청이었다. Claude Code 기억력을 신뢰하지 않은 것이다.

DESIGN.md 파일을 만들어 300줄짜리 설계 문서를 저장했다. 아키텍처, API 시그니처, 색상 코드, 사용자 흐름까지.

"이제 내가 기억을 잃어도 파일은 남는다. 금붕어도 메모장이 있으면 천재가 있다."

─────────────────────────────

4: 공장 라인이 돌아가다

[ 아빠 너구리 ] :

"이제 구현 시작해줘."

17개의 목록이 생성되었다. Claude Code 공장 라인처럼 파일을 찍어내기 시작했다.

voice_profile.py — 탄생

audio_recorder.py — 귀를 열다

profile_manager.py — 기억을 관리하다

waveform_widget.py — 파도를 그리다

styles.py — 어둠을 입히다 (#1a1a2e)

main_window.py — 개의 패널이 하나가 되다

20 파일. 전부 완성. 체크리스트가 초록색으로 물들었다.

─────────────────────────────

5: 번째 시련존재하지 않는 버전

$ pip install -r requirements.txt

ERROR: No matching distribution found for qwen-tts>=0.1.0

[ Claude Code ] :

"...?"

0.1.0 없고 0.0.5까지만 있었다.

"마치 식당에서 "스테이크 버전 2.0 주세요"라고 격이랄까."

글자 수정으로 해결. 인생도 이렇게 간단하면 좋겠다.

─────────────────────────────

6: 번째 시련잊혀진 이름

앱이 드디어 실행됐다. 모델도 로딩됐다. 프로필 생성 버튼을 누르는 감격의 순간...

NameError: name 'QWidget' is not defined

20 파일. 수백 줄의 코드. import 하나를 빠뜨렸다.

QWidget 조용히 외쳤다.

"저요... 저도 불러주세요..."

[ Claude Code ] :

"다시는 잊지 않을게."

 

🎬 대단원: 목소리가 태어나다

─────────────────────────────

시간: 2026년 1월 29일, 밤 11시 42분
상황: 모든 버그가 수정되고, 앱이 실행되다

 

[ 아빠 너구리 ] : (녹음 버튼을 누르며)

"안녕하세요, 아빠 너구리입니다."

(3초간 녹음)

[ 아빠 너구리 ] : (Create Profile 클릭)

Voice Profile Created: "아빠 너구리"

[ 아빠 너구리 ] : (텍스트 입력)

"오늘도 AI 오케스트라를 성공적으로 지휘했습니다."

[ 아빠 너구리 ] : (Generate Speech 클릭)

▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ 100%

(Play 버튼 클릭)

 

스피커에서 흘러나오는 목소리: "오늘도 AI 오케스트라를 성공적으로 지휘했습니다."

아빠 너구리:

"..."

"이거 진짜 목소리잖아?!"

완성된 VoiceClone Pro v1.0.0

 

📘 에필로그: AI 오케스트라의 진실

─────────────────────────────

시간: 2026년 1월 30일, 새벽 1시
장소: 아빠 너구리의 블로그

 

[ 아빠 너구리 ] : (키보드를 두드리며)

 

오늘, 나는 목소리를 복제했다.

정확히 말하면, AI 명이 복제해줬다.

Claude (기획자) PRD 쓰고, UI 디자인하고, 심지어 개발 프롬프트까지 500줄로 정리해줬다.

Claude Code (개발자) 프롬프트를 받아서 진짜 앱으로 만들어줬다.

이게 바로 AI 시대의 1 개발이다.

 

🎵 오늘의 교훈

 

─────────────────────────────

모든 위대한 소프트웨어는 이렇게 시작한다.

 

설계도 한 장,
오타 ,
"근데..." ,
그리고 포기하지 않는 지휘자.

 

아빠 너구리 (2026)

─────────────────────────────

📊 전체 프로젝트 통계

항목 수치
총 소요 시간 ~7시간
"근데..." 횟수 3
생성 파일 23+
import 누락 1
버전 오타 1
최종 만족도 ⭐⭐⭐⭐⭐