CheekPouch — 제품 명세

v1.0 MVP 프로토타입 동기화 기준 · 최신 갱신: 2026-05

이 문서는 시각 프로토타입을 진실의 소스로 하여 다시 작성된 명세입니다. 초안 단계의 "여행 가방" 메타포는 "볼주머니(CheekPouch) + 씨앗"으로, 단일 그룹은 다대다 컬렉션으로 진화했습니다.

1. 제품 개요

한 줄 정의: 해외 여행자가 현지인에게 자신있게 말을 걸 수 있도록, 표현을 입력 → 번역 → 발음 → 음성까지 한 앱에서 처리하고, 모은 표현(씨앗)을 볼주머니에 담아 꺼내 쓰는 iOS 도구.

MVP 핵심 가치

  1. 외국어 워크플로우(번역기 / TTS / 발음 검색)를 외부 앱 없이 이 앱 하나로 닫는다.
  2. 모은 씨앗이 사용자 자산으로 쌓여, 시간이 갈수록 가치가 증가한다.
  3. 여행 전 / 비행기 학습 / 현장 모든 시점에서 같은 자산을 활용.

해결하는 페인

  • Gemini로 번역+한글 발음을 받고, 각 문장을 파파고에 복붙해 음성을 듣는 워크플로 → 도구 전환·복붙 노동
  • 모은 표현이 휘발되어 매번 새로 검색

2. 메타포 — 볼주머니와 씨앗

햄스터가 볼주머니에 먹이를 모으듯, 사용자는 표현을 차곡차곡 담는다. 모든 UI 카피·시각 디자인은 이 메타포를 따른다.

🐹 볼주머니 (CheekPouch)

하루에 담을 수 있는 씨앗의 양. 일일 한도 10개(시작값). 볼주머니 인디케이터는 0/10/30/50/70/100%로 차오르는 6프레임 시각 표현. 자정에 자동 비워짐.

🌱 씨앗 (Seed)

하나의 표현 카드. 외국어·한글 발음·한국어·대화 맥락·TTS·카테고리·톤을 가진다. 여러 주머니에 동시에 담길 수 있다(다대다).

👜 주머니 (Collection)

씨앗을 분류해 담는 컨테이너. 여행지·테마·자동 그룹 등. 색상·표지·언어 라벨을 가진다. "전체 씨앗" 자동 주머니 항상 존재.

📅 누적 자산

담은 씨앗 총 개수 + 연속 학습일(스트라이크). 마일스톤(50/100/500)에 격려 카피.

상세 카피·금지어는 tone.html 참조.

3. 타겟·시나리오

페르소나: 해외 여행 중, 현지인에게 말을 걸고 싶지만 자신이 없어 미리 표현을 준비하고 현장에서 꺼내 쓰고 싶은 한국어 사용자. 여러 나라를 다니며 언어가 섞이는 경우 포함.

사용 시점

  • 여행 전: 책상/숙소에서 표현 모으기 (블로그 캡처, 직접 입력)
  • 비행기 안: 오프라인 전체 재생으로 복습
  • 여행 현장: 식당·택시·길거리에서 즉시 꺼내 보고 듣기, 음성으로 즉석 추가

주요 시나리오 7가지

  1. 출국 전 블로그 스크린샷 일괄 변환 → 한 주머니로 담기
  2. 라멘 가게에서 주머니 열고 한 손 재생
  3. 호텔에서 즉석 타이핑 또는 음성 입력
  4. 비상 상황에서 정중 톤으로 재변환
  5. 누적된 씨앗을 2단 필터(언어 + 카테고리)로 찾기
  6. 친구·가족에게 주머니 단위로 공유
  7. 1년 뒤 재방문 시 자산으로 누적된 씨앗 재사용

4. 기능 명세 (MVP v1.0)

4.1 입력 (3종)

방식구현UX
타이핑텍스트 필드 (멀티라인)한국어로 직접 입력. 여러 문장 가능.
스크린샷iOS PHPicker + 카메라 + 클립보드다단계 플로우: Source Sheet → Detect(OCR) → Confirm
음성iOS SFSpeechRecognizer (온디바이스, 무료)마이크 큰 버튼 누르고 말하기. 결과 텍스트 편집 가능

스크린샷 입력의 다단계 플로우

  1. Source Sheet — 최근 스크린샷 그리드(텍스트 감지 배지 표시) + 사진 보관함 / 카메라 / 클립보드
  2. Detect — 어두운 뷰어에 OCR 오버레이. 영역별 토글로 담을 문장만 선택. "전체 선택/해제" 지원
  3. Confirm — 담을 씨앗 미리보기. 언어·톤·카테고리 일괄 설정. 항목별 삭제 가능

입력된 한국어는 자동으로 발화 단위(utterance)로 분할 (멀티모달 LLM이 처리).

4.2 처리 (백엔드 단일 호출 POST /translate)

LLM 1회 호출로 다음을 한 번에 받음:

  • 자연스러운 외국어 번역 (직역 X)
  • 한글 발음 표기 (현지 발음 들리는 그대로)
  • 카테고리 추천 (다중 선택 가능)
  • (입력 컨텍스트에서 추론, 기본 정중) — 씨앗 생성 시 확정, 추후 변경 시 새 씨앗으로 재생성
  • 대화 맥락 (상대 → 나 → 상대 응답, 각 줄에 외국어 + 한국어 + 발음)

이어서 TTS API 3회 호출:

  • 내 표현 mp3
  • 대화 상대 첫 줄 mp3
  • 대화 상대 두 번째 줄 mp3

응답: 모든 텍스트 + 3개 mp3(base64)가 하나의 JSON으로.

카테고리 (자동 추천)

식당/카페 교통/길찾기 숙소 쇼핑 관광/구경 인사/사교 응급/의료 일상/기타

한 씨앗에 여러 카테고리 동시 부여 가능 (다중 분류). 사용자가 추가·해제 가능.

자동 (LLM 추론) 정중하게 친근하게

4.3 데이터 모델

위치: iOS 로컬 (SwiftData 또는 Core Data + FileManager). 사용자 데이터는 폰에만.

Card (씨앗) 모델

Card {
  id: UUID
  languageCode: String        // "ja", "es", "en", ...
  langLabel: String           // "일본어"

  korean: String              // 한국어 원문
  foreign: String             // 외국어 번역
  pronunciation: String       // 한글 발음

  categories: [String]        // 다중 분류 (예: ["식당/카페", "관광/구경"])
  tone: Tone                  // .auto | .polite | .friendly (생성 시 확정)

  dialogue: Dialogue?         // 3턴 대화 (상대-나-상대)

  mp3Mine: URL                // 내 표현 mp3 파일 경로
  mp3DialogueBefore: URL?
  mp3DialogueAfter: URL?

  createdAt: Date
  // 컬렉션 소속은 Collection.cardIDs로 관리 (다대다)
}

Dialogue {
  before: Line                // {speaker, foreign, pronunciation, korean}
  self:   Line
  after:  Line
}

Collection (주머니) 모델

Collection {
  id: UUID
  name: String                // 가변 (예: "도쿄 식당 표현")
  color: Color                // 6가지 팔레트 중
  cover: Cover                // .auto | .icon(SF) | .photo(URL)
  isUserCreated: Bool
  isShared: Bool              // 공유받은 주머니는 읽기 전용
  cardIDs: [UUID]             // 다대다 — 한 카드가 여러 주머니에 들어감
  createdAt: Date
  latestActivityAt: Date
}

"전체 씨앗"은 항상 존재하는 자동 주머니. 모든 카드를 포함. 다른 주머니에서 카드 제거 시 카드 자체는 삭제되지 않음 (전체 씨앗에는 남음).

다대다 관계

spec v0.3의 단일 groupId 모델은 폐기. 한 씨앗은 0개 이상의 주머니에 동시 소속 가능. UI에서 "주머니에 담기" 시트로 토글.

4.4 화면 구성 (요약)

상세 와이어프레임·메뉴 트리는 ux.html, 실제 스크린샷은 screen-catalog.html.

주요 화면

  • Login — Apple / Google / Kakao / 이메일
  • Home — 검색바, 최근 본 씨앗, 내 주머니 그리드, 공유받은 주머니, 볼주머니 인디케이터
  • Collection Detail — 한 주머니의 씨앗 목록, 전체 재생, 정렬/뷰 토글
  • Card Detail — 외국어/발음/한국어 + 내 표현 듣기 / 대화 전체 듣기 + 카테고리 / 톤 / 주머니 소속
  • Input (Typing / Voice / Screenshot 3-step)
  • Search — 외국어 · 발음 · 한국어 · 주머니 이름 매칭
  • Friends — 친구 목록, 받은 주머니, 공유 요청
  • Me — 프로필, 누적 통계, 학습 달력, 일일 볼주머니 위젯
  • Settings / Help / Info

4.5 씨앗·주머니 관리

기능UX버전
카테고리 변경 (다중)카테고리 칩 탭 → 시트 → 토글v1.0
톤 변경씨앗 ⋯ → 톤 선택 → 새 씨앗으로 재생성 (원본 보존 또는 교체 옵션)v1.0
주머니 이름 변경주머니 헤더 탭 → 인라인 편집v1.0
주머니 삭제⋯ → 확인. 씨앗은 "전체 씨앗"에 남음v1.0
씨앗 주머니 이동 (다대다 토글)씨앗 ⋯ → "주머니에 담기" 시트 → 다중 체크v1.0
새 주머니 생성홈 + → "주머니 만들기" → 이름·색·표지v1.0
다중 카드 선택 편집편집 모드 → 다중 선택 → 하단 액션v1.1

4.6 재생

  • 내 표현 듣기 — 단일 mp3 재생 (AVAudioPlayer). 재생 중 단어별 시각 하이라이트(현재 토큰 강조).
  • 대화 전체 듣기 — 3개 mp3 순차 재생 (delegate 체인, 사이 ~0.8초). 현재 줄 강조 + 좌측 인디케이터 + 재생 중 배지.
  • 전체 재생 — 주머니 또는 필터 결과의 모든 씨앗을 순차 재생 (씨앗당 내 표현, 사이 간격).
  • 속도 — 설정에서 느리게 / 보통 / 빠르게
  • 목소리 — 설정에서 여성 / 남성

4.7 검색·필터

  • 2단 필터 — 언어 칩 + 카테고리 칩 (AND 누적, 같은 칩 재탭 시 해제, "초기화" 버튼)
  • 전역 검색 — 외국어 / 한글 발음 / 한국어 / 주머니 이름 매칭
  • 정렬 — 최신 활동순 · 가나다 · 씨앗 많은 순
  • 뷰 토글 — 컴팩트 리스트 ↔ 2열 그리드

4.8 공유 · 친구

개별 씨앗 공유 (Level 2)

  • 씨앗 ⋯ → "공유" → iOS 시스템 공유 시트
  • 페이로드: 씨앗 렌더링 이미지 + mp3 파일 (내 표현)
  • 백엔드 불필요 (로컬 데이터)

주머니 공유 (Level 3, v1.1)

  • 주머니 ⋯ → "친구에게 보내기" → 친구 선택
  • 받는 사람의 Friends 탭에 "받은 주머니" 카드가 도착
  • 받은 주머니는 읽기 전용 (재생·복사만)

친구 (Friends)

  • 친구 목록 (햄스터 아바타, 마지막 활동, 공유 주머니 개수)
  • 받은 주머니 / 보낸 요청 / 대기 요청
  • 초대 시 일일 볼주머니 +1 (보너스, 무료 사용자 한정)

4.9 일일 볼주머니 (Daily Cheek Pouch)

여행자가 매일 볼주머니에 씨앗을 담는 메타포. "한도, 차감" 같은 차가운 언어는 절대 사용하지 않는다 (tone.html 참조).

  • 무료: 하루 10개 (시작값)
  • 가득 차면: "오늘 볼주머니가 가득 찼어요. 내일 또 같이 채워봐요"
  • 자정 리셋 (사용자 로컬 시간 기준)
  • 친구 초대 보너스: 1명 초대 = +1 (영구, v1.0)

비주얼 인디케이터 (v1.0)

  • 홈 + Me 화면의 볼주머니 위젯 (햄스터 마스코트)
  • 6단계 채움: 0% → 10% → 30% → 50% → 70% → 100%
  • 10개 슬롯 점(dot)으로 정확한 수 표시
  • 가득 차면 색 변화 + 메시지
  • 탭 시 반응 버블(윙크·반짝거림 등 5종 랜덤)

4.10 누적 마일스톤

  • 50, 100, 500개 누적 시 토스트 메시지 + 가벼운 햅틱 + 가방 아이콘 흔들림
  • 새 언어 추가 시: "○○어도 시작했어요! 이제 N개 언어 동반자네요"
  • 연속 학습일(스트라이크): Me 화면에 "N일 째" 표시

카피 전문은 tone.html 참조.

5. 비기능 요구사항

항목목표
변환 응답 시간1입력 기준 3초 이내 (LLM + TTS×3)
로컬 카드 로딩1초 이내
사용자당 월 변동비$0.05~0.10 (Haiku + TTS Standard)
보안API 키 서버에만 · 사용자 데이터 폰에만 · 백엔드 stateless
접근성VoiceOver, 동적 타입 (S/M/L 3단계 토글 + iOS Dynamic Type)
오프라인저장된 씨앗의 모든 기능 정상 (재생·필터·검색·공유)
UI 언어한국어
다크 모드system / light / dark 토글
마이크 권한음성 입력 사용 시 요청, 거부 시 타이핑 fallback

6. 기술 스택

6.1 클라이언트

  • iOS 네이티브 (Swift, SwiftUI, iOS 16+)
  • 저장: SwiftData (또는 Core Data) + FileManager
  • 음성 입력: SFSpeechRecognizer
  • 오디오 재생: AVAudioPlayer (단일 + delegate 체인으로 순차 재생)
  • 공유: UIActivityViewController / ShareLink

6.2 백엔드 (서버리스)

  • 런타임: Cloudflare Workers 또는 Vercel Edge Functions (TBD)
  • 형태: stateless 프록시, 단일 엔드포인트 POST /translate
  • 입력: 텍스트 또는 이미지(base64) + 타겟 언어 + 톤 옵션
  • 출력: JSON (모든 텍스트 + 3개 mp3 base64)
  • 사용자 데이터 저장 없음

6.3 외부 API

  • LLM: Claude Haiku 또는 Gemini Flash (멀티모달, 저비용)
  • TTS: Google Cloud TTS Standard
  • OCR: 멀티모달 LLM에 직접 처리 (별도 OCR 불필요)
  • STT: iOS SFSpeechRecognizer (온디바이스, 무료)

7. 화면 흐름 (요약)

  • Login → Tabs
    • Home → Card Detail (재생 / 시트들)
      • + → Input → Processing → Card Detail / Collection Detail
      • Search → Card Detail
      • Collection 헤더 탭 → Collection Detail → Card Detail
    • Collections → Collection Detail → Card Detail
    • Friends → Received Pouch → 읽기 전용 Collection Detail
    • Me → 볼주머니 위젯 · 학습 달력
    • Settings → Help · Info · Tweaks

상세 인터랙티브 트리는 ux.html.

8. 범위 (v1.0 / v1.1 / v1.5 / v2+)

v1.0 MVP 출시 목표

  • 입력 3종 (타이핑 / 스크린샷 3단계 / 음성)
  • LLM 통합 처리 5종 (번역 / 발음 / 카테고리 / 톤 / 대화 맥락)
  • TTS 3개 + 두 재생 버튼 + 전체 재생
  • 주머니 + 다대다 소속 + 카테고리 다중 + 톤 (생성 시 확정)
  • 2단 필터 + 전역 검색
  • 다언어 동시 지원
  • 오프라인 정상 동작
  • 씨앗 공유 (이미지 + mp3)
  • 일일 볼주머니 10개 (볼주머니 메타포 + 비주얼 + 마일스톤 격려)
  • 친구 (목록 + 받은 주머니 읽기)
  • Me 화면 (프로필 + 통계 + 학습 달력)
  • 설정 (테마 / 글자 크기 / 음성 속도·목소리 / 데이터 동기화·내보내기)

v1.1 출시 후 1-2주 follow-up

  • 다중 선택 편집 모드 (씨앗 일괄 이동·삭제)
  • 주머니 공유 (친구에게 보내기, 받은 주머니 정식 임포트)
  • 대화 음성 차별화 (상대/나 다른 voice ID)
  • 즐겨찾기 (☆)
  • 재생 중 시각 피드백 강화 (현재 줄 강조 ✓ 완료, 단어 강조 ✓ 완료, 추가 인터랙션)
  • 개별 대화 줄 탭 → 그 줄만 재생
  • 마스코트 캐릭터 + 마일스톤 애니메이션 확장

v1.5 — 수익 검증 후

  • 볼주머니 팩 IAP (50/200/500 추가 슬롯, App Store Consumable)
  • 가격: $1.99 / $4.99 / $9.99 가이드라인
  • 마진 95%+ (Haiku + TTS Standard 기준)

v2+ 이후 로드맵

  • 클라우드 동기화 + 계정 + 가족 공유 (현재는 iCloud 동기화만)
  • 사용자 정의 카테고리 / 자유 태그
  • 플래시카드 모드 / 간격 반복 학습
  • 발음 녹음 비교 (내 발음 vs 원어민)
  • Lifetime unlock 검토
  • Android
  • 대화 전체 통합 mp3 (서버에서 합쳐 보내기)
  • 비슷한 표현 추천 / 문화 노트

9. 운영 모델

  • 출시: 무료 앱 (App Store)
  • 일일 볼주머니: 씨앗 10개 (시작값)
  • 수익화: v1.5에서 볼주머니 팩 IAP (구독 X, 소진형 consumable)
  • 비용 추정: 활성 사용자 1,000명 ≈ 월 $50~100 · 1만 명 ≈ 월 $500~1,000
  • IAP 도입 트리거: 사용자 규모 + 볼주머니 가득 비율 데이터로 결정

10. 미결 결정사항

  1. iOS 최소 버전: 16+ vs 17+ (17+면 Apple Translation 프레임워크 옵션 가능)
  2. 서버리스 플랫폼: Cloudflare Workers vs Vercel Edge
  3. LLM 선택: Claude Haiku vs Gemini Flash (한국어 품질 + 스크린샷 처리 + 비용)
  4. 일일 볼주머니 정확한 숫자: 10이 적절한지 시뮬레이션
  5. 톤 변경 동작: 새 씨앗 생성 vs 원본 교체 (현재 안: 새로 생성, 일일 볼주머니 +1 소비)
  6. 주머니 자동 생성 규칙: 입력 시 자동 분류 vs 사용자 선택
  7. 다중 편집 모드 진입: 길게 누르기 vs "편집" 버튼 (v1.1)
  8. 검색 범위: 현재 필터 결과 내 vs 전역 (현재 안: 전역)
  9. 대화 맥락 fallback: 단순 인사처럼 대화가 안 만들어지는 경우
  10. 음성 입력 길이 제한
  11. 마일스톤 임계값: 50/100/500 외 추가 지점 (10, 25, 1000?)
  12. 친구 시스템: 별도 계정 시스템 도입 시점 (v1.0 시작 가능?)
  13. 받은 주머니 임포트 정책: 복사본 vs 참조 (현재 안: 복사본, 출처 표시)