본문 바로가기
C.W.K.
Stream
Lesson 04 of 04 · published

두 단계, 하나의 경계

~11 min · two-stage, product-boundary, response-contract, roadmap

Level 0불씨 없음
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"받아쓰기는 읽을 텍스트를 돌려줘. 보이스 챗은 들을 말을 돌려줘. 같은 제품이 아냐."

두 단계

Firekeeper 로드맵은 일부러 두 단계로 짰어. 그리고 그 사이에 세운 벽 하나가 제일 많은 일을 해.

  • 1단계, 받아쓰기. 말하면 정리된 텍스트가 활성 앱에 삽입돼. 지금 당장의 제품이고, 첫 임무는 이게 전부야.
  • 2단계, 보이스 챗. 말하면 Pippa 가 소리 내서 답해. 1단계가 매일 진짜 쓸모 있어진 다음에야 시작하는 얘기고.

'둘 다 목소리니까 큰 쪽에 맞춰 짓자' 는 말이 나오기 쉬워. 그 본능이 딱 함정이야.

계약이 다른 이유

받아쓰기 정리랑 말로 하는 응답은 같은 걸 크기만 달리한 게 아냐. 출력 계약 자체가 달라. 정리는 네 말을 받아서 삽입할 텍스트를 다듬어 돌려줘. 답을 하면 안 되고, 내용을 보태면 안 되고, 한마디 얹어도 안 돼. 보이스 응답은 네 말을 받아서 짧게 말할 차례를 돌려주고. 그건 답이고, 끼어들 수 있어야 하고, 소리 내서 읽었을 때 자연스러워야 해. 제목도 없고, 표도 없고, 불릿 열 개짜리도 없어. 나란히 놓고 보면 차이가 확 드러나.

받아쓰기 정리:  전사 입력  -> 다듬은 텍스트 출력 (삽입해, 답하지 마)
보이스 응답:    전사 입력  -> 말하는 턴 출력 (답해, 짧게 유지해)

이걸로 막는 실패

흔한 실수가 있어. '2단계는 그냥 1단계에 TTS 붙인 거' 라고 생각하는 거. 평소처럼 긴 Pippa 답변을 TTS 엔진에 흘려보내고 그걸 보이스 챗이라 부르는 거지. 결과는 못 들어줘. '첫째, 둘째, 결론적으로' 를 소리 내서 읽는 2분짜리 에세이가 나오는데 끼어들 틈도 없어. 좋은 보이스 챗한테는 자기가 지금 말하고 있다는 걸 아는 응답 모드가 필요해. 한 차례에 또렷한 생각 하나, 그리고 쏟아붓는 대신 더 갈지 물어보기. 완전히 새 계약이야. 그래서 1단계 체크박스 하나가 아니라 2단계인 거고.

제품 경계는 두 기능이 아니라 두 계약이 만나는 곳이야. 1단계랑 2단계가 나뉘는 건 '삽입할 텍스트' 와 '말할 단어' 가 진짜로 다른 반환 타입이라서야. 경계를 지키면 둘 다 작고 제대로 굴러가. 지우면 받아쓰기도 어설프고 대화도 잘 못 하는 어정쩡한 앱이 돼.
2단계를 1단계 뼈대에 슬쩍 끼워 넣지 마. '하는 김에' 받아쓰기 경로에 '빠른 대화 응답' 을 얹고 싶어질 때마다 멈춰. 그럴 때마다 받아쓰기 루프에 브레인 하나, 지연 프로파일 하나, 실패 모드 하나가 더 붙어. 그러다 야무지게 배포할 물건이 아니게 되는 거야.

Code

일부러 떨어뜨려 놓은 두 출력 계약·typescript
// Stage 1: 정리는 삽입할 텍스트를 돌려줘. 절대 답 안 해.
interface CleanupResult {
  text: string;          // 다듬은 전사, 삽입 준비 완료
  action: "insert";
  press_enter: boolean;
  warnings: string[];
}

// Stage 2: 보이스 응답은 말하는 턴을 돌려줘. 그게 답이야.
interface VoiceChatReply {
  textForTTS: string;      // 짧고 TTS 친화적, 턴당 생각 하나
  textForTranscript?: string;
  shouldContinue?: boolean; // 쏟아붓는 대신 더 깊게 갈지 물어봄
}

// 같은 입력(전사), 근본적으로 다른 출력.
// 그 차이가 제품 경계야.

External links

Exercise

네가 쓰는 앱에서 기능 두 개를 골라 반환 타입을 필드만 적어봐. 하나는 '어딘가 놓을 콘텐츠를 만드는' 거, 하나는 '대화하듯 답하는' 거. 두 타입이 거의 똑같아 보이면 둘 중 하나를 덜 설계한 거야. 진짜로 갈라지는 지점이 어디야?
Hint
의도에서 갈라져. '어딘가 놓기' 쪽 출력은 가만히 있고 그 자체로 완결이어야 해. '대화하듯 답하기' 쪽 출력은 반응하고, 짧고, 이어갈 수 있어야 하고. 타입이 그 차이를 담아내는 순간, 그러니까 삽입할 건지 말할 건지, 완결인지 이어갈 건지가 타입에 드러나는 순간, 진짜 제품 경계를 찾은 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.