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

AI한테 기능 추천 받았다가 "그거 안 돼요"라는 답변을 듣기까지의 여정

어느 개발자와 AI의 솔직한 대화록

 

기획부터 현실 직면까지, 감정의 롤러코스터를 함께 타봅시다.

 

1. 기능 고도화 구상

"앱 좀 분석해봐"

 

지난 이야기에서 VoiceClone Pro — Qwen3-TTS AI 모델을 써서 목소리를 복제하고, 텍스트를 음성으로 바꿔주는 macOS 데스크톱 앱을 만들었다.

https://sunnydevdays.tistory.com/11

VoiceClone Pro v1.0

앱은 완성되어 있었다. 잘 돌아갔다. 하지만 개발자의 본능이 속삭였다.

"이거... 뭔가 더 붙이면 좋겠는데."

 

그래서 AI에게 물었다.

"이 앱 분석해서 Best 3 기능 추천해줘."

 

AI는 성실하게 앱의 코드를 20개 넘는 파일을 훑으며 분석했다. 꼼꼼하게 파악하면서도 칭찬은 안 했다. 오히려 그래서 신뢰가 갔다.

▲  AI 가  20 개 넘는 파일을 꼼꼼하게 분석했다

 

Best 3 받다

AI가 자신 있게 내놓은 추천 목록:

순위 기능 한 줄 요약
1 음성 스타일 컨트롤 같은 목소리로 기쁨, 슬픔, 분노를 표현!
2 장문 오디오북 생성기 소설 한 권을 통째로 음성으로!
3 다화자 대화 시뮬레이션 영희와 철수가 번갈아 대화하는 드라마를!

 

솔직히 감동했다. 특히 1. 감정 조절이 되는 음성 복제라니. AI가 그려준 미래는 아름다웠다.

나는 흥분했다. "UI도 보여줘!"라고 말했다.

▲  2026 년에  ASCII  아트라니 ! Figma  구독료 절약 !

 

현실의

흥분이 가라앉고 나서 냉정한 질문을 던졌다.

"추천한 기능이 기술적으로 진짜 가능한 거 맞아?"

 

이 질문이 판도를 바꿨다. AI는 웹 검색을 하고, 모델 문서를 뒤지고, 기술 보고서까지 읽었다. 그리고 돌아왔다.

 

AI가 내놓은 결과:

  • Base 모델음성 복제 O, 감정 제어 X
  • CustomVoice 모델음성 복제 X, 감정 제어 O
  • VoiceDesign 모델음성 복제 X, 감정 제어 O

 

우리가 쓰는 건 Base 모델이다. 음성 복제는 되는데 감정 제어가 안 된다고?

"음성 복제 + 감정 제어를 동시에 지원하는 모델은 없습니다."

Best 31번 기능이 통째로 날아갔다.

▲  부정  →  분노  →  타협  →  우울  →  수용

 

2. 설계

✔ 최종 기능 결정

1번 기능(감정 제어)은 포기하고, 실현 가능한 2번과 3번을 선택했다:

  • F2: 장문 오디오북 생성기텍스트를 청크로 나누고 순차 생성
  • F3: 다화자 대화 시뮬레이션화자별로 목소리를 바꿔가며 생성

AI AI 위한 설계서를 쓰다

AI는 이 두 기능에 대한 완전한 설계서를 만들었다.

 

이 설계서의 분량:

  • 신규 파일 8개의 전체 내용
  • 수정 파일 4개의 변경 계획
  • 7단계 구현 순서 가이드

12개 파일, 700, 한 치의 모호함 없이.

이 설계서의 목적? 다른 AI 세션에서 이 파일을 읽고 바로 구현에 들어갈 수 있게 하는 것이다.

AIAI를 위한 설계서를 쓰는 시대. 인간인 나는 그걸 시키는 역할이다.

▲ AI 가  AI 를 위해  700 줄짜리 설계서를 작성했다

 

 설계 단계의 교훈

1. 추천 받기 전에 "진짜 되는지" 물어봐라

멋진 기능을 추천해주는 건 쉽다. 그게 현재 기술 스택에서 가능한지 확인하는 건 다른 문제다.

 

2. 모델 문서를 읽어라

같은 이름의 AI 모델이 하나인 줄 알았다. 3종류였다. 마치 "김철수"가 한국에 수만 명 있는 것처럼.

 

3. 실패한 기획도 가치가 있다

감정 제어 기능은 못 만들지만, 그 과정에서 모델의 한계를 명확히 알게 됐다. 그리고 더 현실적인 기능을 찾아냈다.

 

3. 구현

✔ 어둠에서 빛으로

"다크모드에서 라이트모드로 바꿔줘."

 

이 한 마디가 308줄의 대규모 색상 전환을 일으켰다. 앱의 분위기가 완전히 바뀌었다. 다크 카페에서 밝은 스튜디오로 이사한 느낌.

그리고 이 색상 변경이 나중에 예상치 못한 복수를 하게 된다...

▲   다크모드  →   라이트모드 ,  분위기 완전 변경 !

 

✔ 흰색의 복수

"버튼에 마우스를 올리면 텍스트가 안 보여."

 

라이트모드로 전환한 그 색상이... 여기서 복수를 했다.

앱의 글로벌 스타일에는 "버튼에 마우스를 올리면 보라색 배경에 흰색 글자"라는 규칙이 있다. 그런데 특정 화면에 "배경을 흰색으로"라는 규칙이 추가되어 있었다.

 

버튼에 마우스를 올리면?

  • 글로벌 스타일: "텍스트를 흰색으로!"
  • 화면 스타일: "배경을 흰색으로!"
  • 결과: 흰색 배경 위에 흰색 텍스트 = 투명 인간 버튼 🫥

▲ " 버튼이 ...  사라졌다 ?"

 💡 교훈: UI 스타일의 범위를 지정하지 않으면 핵폭탄이다. 모든 하위 요소에 무차별 적용된다.

 

✔ 빌드의 가지 공포

공포 1: 무한 루프 지옥

macOS에서 특정 조합의 라이브러리를 쓰면 프로세스가 무한 증식한다. 해결책은 시작 부분에 딱 한 줄의 보호 코드를 넣는 것. 이걸 안 지키면 맥북이 전자레인지가 된다.

 

공포 2: 즉사

앱을 패키징하면 파일 경로가 완전히 달라진다. 아이콘 파일? 없다. 설정 파일? 경로가 틀렸다. 앱은 "뭐가 어딨는지 모르겠어요" 하고 조용히 퇴장한다.

 

4. 마무리

✔ 숫자로 보는 여정

항목 수치
총 프로그램 파일 33
총 코드 라인 3,824
주요 기능 3
지원 언어 12
최종 빌드 크기 848MB
무한 증식 방지에 필요한 코드 1

 

AI 함께 개발한다는

이 프로젝트에서 AI(Claude)는 설계부터 구현, 디버깅, 빌드까지 전 과정에 참여했다.

 

잘한 것들:

  • 300줄짜리 설계 문서를 파일로 저장한 판단
  • 20개 파일을 일관된 구조로 작성
  • 빌드 과정의 함정들을 사전에 방지

 

삽질한 것들:

  • 존재하지 않는 패키지 버전을 요청
  • 필수 연결을 하나 빠뜨림
  • 자막 생성기를 세 번이나 고침
  • 스타일 규칙의 범위 지정을 간과

 

▲ 24시간 잠 안 자고 작업하는 AI

✔ 끝맺음

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

 

설계도 한 장, 오타 두 개, 버그 열 개,

그리고 포기하지 않는 개발자.

 

[ 최종 앱 모습 ]

Singles TTS
Audiobook Mode
Dialogue Mode