제품 사양 · Product Spec

🐹 CheekPouch 사양서

무엇을 만드는가 · 어디까지인가 · 다 됐는지 어떻게 아는가. 담아서 꺼내 쓰기까지의 여정을 따라 기능을 정의하고, 각 기능의 완료 기준을 명시하는 빌드 중심 문서입니다.

이 문서는 무엇을 만드는지만 다룹니다. 왜·무드(정체성·원칙·목소리·비주얼)는 브랜드 컨셉, 전·후 경험경험 흐름, 화면별 시각 프로토타입app/에 있습니다 — 여기선 반복하지 않고 참조합니다.
23기능 (P0 21 · P1 2)
5여정 단계
6핵심 객체
4역할
01 · 제품 정의

여행에서 만난 한마디를 담아 두고, 필요할 때 꺼내 쓰는 회화 앱

길게 외워 공부하는 도구가 아니라, 마주친 표현을 한 번 담아 두면 카드로 완성되고, 여행 현장에서 음성으로 꺼내 따라 말하게 해 주는 앱입니다. 모은 표현은 휘발되지 않고 사용자의 자산으로 쌓입니다.

무엇을

한국어 한마디를 적으면 번역·한글 발음·원어민 음성·대화 맥락이 한 장의 카드(씨앗)로 완성되는 회화 앱.

누구에게

현지어를 길게 공부하긴 부담스럽지만, 필요한 순간 말은 해 보고 싶은 여행자.

핵심 동작 (루프)

담기(입력) → 만들기(변환) → 보관(주머니·곳간) → 꺼내 쓰기(재생·따라 말하기) → 자산으로 누적, 다음 여행에서 다시.

한 줄 정의

"마주친 표현을 담아 두고, 그곳에서 쏙 꺼내 말하게 한다." 똑똑해지는 건 AI가 아니라 사용자의 볼주머니.

성공 신호 — 작동하고 있다는 관찰 가능한 징후
  • 한 번 담은 표현을 여행 현장에서 다시 꺼내 재생·사용한다 (담기로 끝나지 않음).
  • 볼주머니가 50개·100개로 쌓이고, 다음 여행에서 작년 주머니를 그대로 다시 연다.
  • 네트워크가 없는 기내에서도 열람·재생이 끊기지 않는다.
  • "한도 초과" 같은 압박 없이, 가득 차면 자연스럽게 멈추고 다음 날 다시 담는다.
02 · 범위 (In / Out)

지금 만드는 것, 그리고 일부러 하지 않는 것

경계가 이 문서에서 가장 중요한 부분입니다. "하지 않는 것"의 상당수는 브랜드 원칙을 경계로 옮긴 것입니다.

들어가는 것

이번 버전에서 만드는 범위
  • 2탭 구조 — 홈 / 나
  • 입력 3종 — 타이핑 · 음성(온디바이스) · 스크린샷(OCR)
  • 양방향(한→외 · 외→한) + 방향 자동 감지 & 1탭 수정
  • 통합 변환 — 번역·한글 발음·음성(TTS)·대화 맥락(3턴)을 한 번에
  • 씨앗 · 주머니(색 6종) · 카테고리(자동·수동) · 곳간(즐겨찾기)
  • 일일 볼주머니 — 기본 10개, 광고로 +3/+1, 자정 리셋
  • 검색 + 2단 필터(언어·카테고리, AND 누적)
  • 전체 재생(씨앗·주머니·대화) · 오프라인 열람·검색·재생
  • 라이트/다크 테마, 발음 속도·목소리 설정
  • 소셜 로그인, 약관·개인정보, 도움말(FAQ)

하지 않는 것

원칙상 안 함 + 다음 버전으로 미룸
원칙상 — 경계
  • "한도 앱"이 아니다. 차감·만료·"한도 초과" 같은 차가운 압박 표현을 쓰지 않는다.
  • 외우게 강요하지 않는다. 퀴즈·암기 테스트·스트릭 강제·압박성 푸시 없음.
  • AI를 주체로 두지 않는다. 든든해지는 건 사용자의 볼주머니다.
다음 버전으로 미룸
  • 톤(자동/정중/친근) 선택 v1.1
  • 카드 공유 · 친구 · 소셜 v1.1
  • 통계 · 달력 · 학습 리포트 v1.1
  • 즐겨찾기 정렬(맨 앞)·다중 편집·빈 그룹 직접 생성 v1.1
  • 햄스터 본격 캐릭터 애니메이션 v1.1
  • 계정 클라우드 동기화 (로컬 저장 우선) v1.1+
03 · 사용자 · 역할

움직이는 네 주체

요구사항은 이 역할들을 기준으로 적습니다. 경험 흐름 문서의 점 색(나·앱·현지인·함께)과 같은 구분입니다.

여행자 나 · 주체

표현을 담고 꺼내 쓰는 사람. 모든 주도권은 사용자에게 있다. 모은 표현은 그의 자산이다.

CheekPouch

담은 한마디를 카드로 변환·보관·재생한다. 곁에서 응원하는 햄스터 톤 — 부담 없이, 다정하게.

현지인 상대

표현을 건네는 대상. 앱 사용자는 아니지만 대화 맥락·공유의 수신자로 설계에 등장한다.

외부 서비스 시스템

변환 LLM(번역·발음·대화) · 음성 합성(TTS) · 온디바이스 음성 인식 · OCR · 광고/추적 동의 · 로그인 제공자. 네트워크가 필요한 행위의 경계다.

04 · 상태 · 흐름

여행의 시간 축을 따라가는 표현의 일생

씨앗은 여행의 시간 축 위에서 담기고, 익혀지고, 꺼내지고, 다시 쓰입니다. 각 단계에서 활성화되는 기능이 곧 다음 장(기능 명세)의 묶음 축입니다.

여행 전 · 담아 둔다Before · Collect
블로그·메모·떠오른 한마디를 미리 모으는 준비기. 담는 행위가 곧 학습이다.
타이핑으로 담기스크린샷으로 담기통합 변환방향 자동 감지자동 분류주머니에 담기
이동 중 · 귀에 익힌다In transit · Review
와이파이 없는 기내. 모아둔 표현을 귀로 흘려 들으며 복습한다 — 오프라인이 빛나는 순간.
오프라인 열람·재생전체 재생내 표현 듣기
여행 중 · 꺼내 쓴다On site · Speak
식당·거리·호텔. 한 손으로 카드를 열어 듣고 따라 말한다. 준비 못 한 말은 즉석에서 담는다.
내 표현 듣기대화 전체 듣기음성으로 즉석 담기톤 바꾸기 · v1.1
여행 후 · 나눈다After · Share
함께 갈 사람에게 자주 쓸 표현을 건넨다. 별도 정리 없이 카드 그대로.
카드 공유 · v1.1검색
늘 · 쌓인다Always · Asset
여행과 여행 사이의 일상 리듬, 그리고 다음 여행. 담을수록 든든해지고 찾기는 더 쉬워진다. 테마·계정·설정 같은 기반도 늘 함께한다.
로컬 영속 저장검색2단 필터곳간일일 볼주머니마일스톤·휴식다음 여행 재사용테마·계정·설정
05 · 기능 명세

기능 — 여정 단계로 묶고, 카드마다 완료 기준을

접으면 한 줄 목적만 보이는 색인이 되고, 펼치면 요구사항·완료 기준·의존이 나옵니다. 화면 단위 디테일은 시각 프로토타입의 P 코드를 참조하세요.

여행 전 · 담아 둔다하나씩 담아 둬요
01타이핑으로 담기Type inputP0여행 전 목적 — 떠오른 한마디를 한국어로 적기만 하면 카드가 되게 한다.
동작 · 요구사항
  • 텍스트 입력 + 번역 언어 최대 5개 동시 선택(즐겨찾기 quick-add)
  • 한→외면 언어 1개↑ 필요, 외→한이면 언어 선택 무관
  • 입력 즉시 방향 자동 감지 칩 표시, 완료 시 통합 변환 호출
완료 기준
  • 한국어 한마디 + 언어 1개 → 변환 완료 카드가 생성된다
  • 언어 N개 선택 시 N개 카드가 생긴다
의존통합 변환방향 자동 감지상세 P06a
02스크린샷으로 담기Screenshot OCRP0여행 전 목적 — 블로그·사진 속 글자를 던지면 발화 단위로 나뉘어 카드가 된다.
동작 · 요구사항
  • 소스 3종 — 보관함 · 카메라 · 클립보드 → 미리보기 → 글자 감지 → 확인
  • 여러 문장을 발화 단위로 자동 분할
  • 한·외 박스 혼합 시 방향별 카드로 자동 분할
완료 기준
  • 이미지 1장 → 감지된 문장 수만큼 카드가 생긴다
  • 혼합 이미지 → 한→외 / 외→한 그룹으로 나뉘어 생성된다
의존통합 변환방향 자동 감지상세 P06c
03통합 변환Unified convertP0여행 전 목적 — 번역·발음·음성·대화 맥락을 한 번의 호출로 한 카드에 완성한다.
동작 · 요구사항
  • 한 표현당 LLM 1회로 번역 · 한글 발음 · 대화 맥락(3턴) 생성
  • 음성(TTS)은 외국어 원문·대화 라인에 대해 생성
  • 생성 중 로딩, 성공 시 결과 화면으로 자동 전환, 실패 시 다시 시도
완료 기준
  • 카드에 원문·발음·뜻·음성·대화 맥락이 모두 채워진다
  • 변환 실패 시 자동 전환 없이 재시도 안내가 뜬다
의존없음 (외부 서비스: 변환 LLM·TTS)상세 P09
04방향 자동 감지Direction detectP0여행 전 목적 — "외국어로 뭐지?"와 "무슨 뜻이지?"를 자동으로 가른다.
동작 · 요구사항
  • 스크립트 포함 여부로 한국어 → 외국어 / 외국어 → 뜻 자동 판정
  • 방향 칩 ⇄ 탭으로 1탭 수정
완료 기준
  • 한국어 입력 → ko→fo, 외국어 입력 → fo→ko로 자동 표시
  • ⇄ 탭 시 방향과 결과 언어 UI가 즉시 바뀐다
의존없음
05자동 분류Auto categoryP0여행 전 목적 — 만든 카드에 카테고리를 자동으로 달아 두고, 바로 고칠 수 있게 한다.
동작 · 요구사항
  • 변환 시 카테고리 자동 부여(✨ 칩)
  • 결과 화면에서 인라인 편집(× 제거 / + 추가)
완료 기준
  • 새 카드에 카테고리 칩이 1개 이상 자동으로 붙는다
  • 편집 결과가 카드와 카테고리 목록에 즉시 반영된다
의존통합 변환상세 P10
06주머니에 담기PouchP0여행 전 목적 — 표현을 주제별 주머니에 모아 떠나기 전부터 든든하게 한다.
동작 · 요구사항
  • 주머니 생성(이름 + 색 6종), 씨앗을 주머니에 담기
  • 한 씨앗이 여러 주머니에 동시에(다대다)
  • 주머니 상세에서 이름 편집·삭제
완료 기준
  • 씨앗을 담으면 주머니 씨앗 수가 늘고 상세에 보인다
  • 한 씨앗을 두 주머니에 담아도 양쪽에 나타난다
의존없음상세 P04 · P08
이동 중 · 귀에 익힌다꺼내서 들어봐요
07오프라인 열람·재생OfflineP0이동 중 목적 — 네트워크가 없어도 모아둔 표현을 열고 듣게 한다.
동작 · 요구사항
  • 담아둔 씨앗의 열람·검색·재생은 동작
  • 새 생성·광고·외부 통신은 비활성, 헤더에 오프라인 배지
  • 네트워크 의존 행은 미리 dim 처리해 탭 전 인지 가능
완료 기준
  • 오프라인에서 그룹 열기·검색·전체 재생이 정상 동작한다
  • 모든 [+] 생성 버튼이 비활성으로 보인다
의존로컬 영속 저장
08전체 재생Play allP0이동 중 목적 — 그룹·리스트·대화를 차례로 들려줘 손대지 않고 복습하게 한다.
동작 · 요구사항
  • 씨앗 리스트·주머니·대화를 순차 재생, 마지막까지 후 자동 정지(루프 없음)
  • 일시정지(idx 보존)와 정지(idx=0) 분리
  • 표현 재생과 대화 재생은 상호 배제
완료 기준
  • 전체 재생이 끝 항목에서 멈추고 처음으로 리셋된다
  • 일시정지 후 재개 시 멈춘 지점부터 이어진다
의존통합 변환
여행 중 · 꺼내 쓴다그곳에서 쏙
09내 표현 듣기Speak itP0여행 중 목적 — 한 손 탭 한 번으로 외국어 음성을 들려주거나 따라 말하게 한다.
동작 · 요구사항
  • 카드의 외국어 음성 재생 + 토큰 동기 하이라이트(단어/글자 단위)
  • 한 손 사용 — 큰 메인 CTA, 폰 화면에 시선 안 뺏기게
완료 기준
  • "내 표현 듣기" 탭 시 음성이 나오고 글자가 동기 강조된다
  • 오프라인에서도 재생된다
의존통합 변환오프라인 열람·재생상세 P05
10대화 전체 듣기DialogueP0여행 중 목적 — 상대가 할 법한 말까지 미리 들려줘 대화 흐름을 그리게 한다.
동작 · 요구사항
  • 상대/나 라인을 순차 재생(라인당 ~1.5s, 진행도 N/총)
  • 대화 맥락은 통합 변환에서 3턴으로 함께 생성
완료 기준
  • "대화 전체 듣기" 시 상대·나 라인이 차례로 재생된다
  • 표현 재생 중 대화 재생을 누르면 표현 재생이 멈춘다
의존통합 변환전체 재생상세 P05
11음성으로 즉석 담기Voice inputP0여행 중 목적 — 준비 못 한 말도 마이크로 말하면 그 자리에서 카드가 된다.
동작 · 요구사항
  • 녹음 → 실시간 트랜스크립트 → 편집·번역 3단계(온디바이스 STT)
  • 변환된 텍스트를 다듬어 통합 변환으로 카드화
  • 마이크 권한 거부 시 안내 + 설정 열기
완료 기준
  • 말한 내용이 텍스트로 잡혀 카드로 완성된다
  • 그 자리에서 들려줄 수 있고 카드로 저장된다
의존통합 변환상세 P06b
12톤 바꾸기Tone shiftP1여행 중 목적 — 같은 뜻을 자리에 맞는 온도(정중/친근)로 다시 만든다. v1.1
동작 · 요구사항
  • 카드에서 톤 선택 → 같은 뜻을 해당 톤으로 재변환
  • 처음부터 다시 검색하지 않고 톤만 전환
완료 기준
  • 톤 변경 시 같은 의미의 새 표현·음성이 나온다
의존통합 변환MVP 제외 · 경험 흐름 #6
여행 후 · 나눈다그대로 건네요
13카드 공유ShareP1여행 후 목적 — 카드 이미지와 음성을 별도 작업 없이 그대로 건넨다. v1.1
동작 · 요구사항
  • 카드에서 공유 → 카드 이미지 + 음성(mp3) 묶음
  • 시스템 공유 시트로 전달
완료 기준
  • 받는 쪽이 이미지로 보고 음성으로 바로 들을 수 있다
의존통합 변환MVP 제외 · 경험 흐름 #8
늘 · 쌓이는 자산담을수록 든든하게
14로컬 영속 저장Local storeP0늘 · 자산 목적 — 모은 표현이 휘발되지 않고 기기에 그대로 남게 한다.
동작 · 요구사항
  • 씨앗·주머니·곳간·카테고리를 기기에 영속 저장
  • 앱을 다시 열어도, 1년 뒤에도 그대로 유지
완료 기준
  • 앱 재실행 후에도 모든 씨앗·주머니가 남아 있다
의존없음상세 데이터 모델
15검색SearchP0늘 · 자산 목적 — 쌓인 표현 속에서 필요한 한 장을 단어로 바로 띄운다.
동작 · 요구사항
  • 외국어·한국어·발음 부분일치 검색
  • 홈 검색바에서 진입, 결과 탭 → 씨앗 상세
  • 오프라인에서도 로컬 검색 동작
완료 기준
  • 단어 입력 시 매칭 카드가 나오고, 없으면 빈 메시지
의존로컬 영속 저장상세 P07
162단 필터FilterP0늘 · 자산 목적 — 언어와 카테고리를 겹쳐 쌓인 표현을 두 번의 탭으로 좁힌다.
동작 · 요구사항
  • 언어 + 카테고리 AND 누적 필터(공유 FilterSheet)
  • 활성 필터 칩 + 결과 카운트("N개 중 M개"), 결과 0 → 보기 비활성
완료 기준
  • 언어→카테고리 더하면 결과가 누적으로 좁혀진다
  • 홈과 내 씨앗에서 같은 필터가 동작한다
의존없음상세 P02 · P03
17곳간 (즐겨찾기)FavoritesP0늘 · 자산 목적 — 마음에 든 표현을 따로 비축해 어디서든 빨리 닿게 한다.
동작 · 요구사항
  • 씨앗 상세에서 ⭐ 토글 → 곳간에 담기/빼기 + 토스트
  • 곳간은 영구 보관함, "나" 탭에서 전체 보기
  • 토글이 모든 화면에 즉시 반영
완료 기준
  • ⭐ 토글 시 곳간 목록과 "나" 탭에 즉시 반영된다
의존없음상세 P05 · P12
18일일 볼주머니Daily pouchP0늘 · 자산 목적 — 하루치 담기를 따뜻한 언어로 — "한도/차감"이 아니라 차오르는 볼주머니로.
동작 · 요구사항
  • 하루 담기 기본 10개, 광고 시청 시 +3(허용)/+1(거부), 자정 리셋
  • 담을 때마다 햄스터 볼이 부풀고, 가득 차면 "내일 또 같이 채워봐요"
  • "한도 초과/차감" 같은 표현 금지(원칙)
완료 기준
  • 10개를 담으면 더는 못 담고, 광고 후 캡이 +3/+1 늘어난다
  • 자정에 오늘 담은 수가 0으로 리셋된다
의존없음 (외부 서비스: 광고·추적 동의)상세 P06 · 광고 플로우
19마일스톤·휴식 피드백MilestoneP0늘 · 자산 목적 — 푸시하지 않고 함께 기뻐하고, 멈춤을 휴식으로 긍정한다.
동작 · 요구사항
  • 50개·100개 등에서 작은 마일스톤 토스트
  • 가득 찼을 때 압박 대신 휴식 카피
완료 기준
  • 마일스톤 도달 시 축하 토스트가 한 번 뜬다
  • 가득 참 안내에 압박성 문구가 없다
의존일일 볼주머니상세 P12 · 경험 흐름 #10
20다음 여행에서 다시 꺼내기ReuseP0늘 · 자산 목적 — 작년 주머니를 그대로 열어 0에서 시작하지 않게 한다.
동작 · 요구사항
  • 지난 여행 주머니·씨앗이 그대로 남아 다시 열람·복습
  • 전체 재생으로 바로 복습
완료 기준
  • 1년 뒤에도 작년 그룹을 열어 전체 재생할 수 있다
의존로컬 영속 저장전체 재생경험 흐름 #9
늘 · 기반 (상시)언제나 받쳐 주는 것
21테마 (라이트·다크)ThemeP0늘 · 기반 목적 — 라이트·다크 모두에서 포근함을 유지한다.
동작 · 요구사항
  • 모든 화면이 라이트·다크 지원, 설정에서 시스템/라이트/다크 전환
  • 색은 토큰으로만 참조(하드코딩 금지)
완료 기준
  • 테마 전환 시 전 화면 색이 일관되게 바뀐다
의존없음상세 P13
22로그인·계정·약관AccountP0늘 · 기반 목적 — 가입 마찰을 최소화하고 계정·약관 흐름을 갖춘다.
동작 · 요구사항
  • 소셜 로그인으로 진입 → 홈
  • 로그아웃·계정 탈퇴, 약관·개인정보 처리방침(진입 화면으로 정확히 복귀)
  • 네트워크 의존 행은 오프라인에서 비활성
완료 기준
  • 로그인 성공 시 홈으로 이동한다
  • 약관을 닫으면 들어온 화면으로 돌아온다
의존없음 (외부 서비스: 로그인 제공자)상세 P01 · 약관
23설정·도움말Settings · HelpP0늘 · 기반 목적 — 소리·모양·계정 설정과 주제별 FAQ를 제공한다.
동작 · 요구사항
  • 설정 — 테마 · 발음 속도 · 목소리 세그먼트, 카테고리 관리
  • 도움말 — 주제별 FAQ 아코디언 + 문의
완료 기준
  • 속도·목소리 변경이 재생에 반영된다
  • FAQ 주제를 펼쳐 답을 볼 수 있다
의존전체 재생상세 P13 · P14
06 · 데이터 · 핵심 객체

기능이 다루는 명사들

기능이 만지는 객체와, 무엇이 어디에 속하는지. 명사와 소유 관계만 정리합니다 — 필드 수준 스키마는 구현 레포에서 다룹니다.

🌱 씨앗 Seed

표현 한 개. 외국어 원문·한글 발음·뜻·음성·대화 맥락을 담은 카드. 자산의 최소 단위.

소유: 사용자 (영속)

👜 주머니 Pouch

씨앗을 주제별로 묶는 컨테이너(색 6종). 씨앗과 다대다.

소유: 사용자 (영속)

🏷️ 카테고리 Category

자동/수동 분류 태그. 씨앗이 참조하며 필터 축이 된다.

소유: 사용자 (영속)

곳간 Favorites

마음에 든 씨앗을 따로 비축하는 영구 집합(씨앗 참조).

소유: 사용자 (영속)

🐹 볼주머니 Daily pouch

오늘 담은 수·캡·광고 부스트. 사용자에 속하는 하루치 카운터.

소유: 사용자 (자정 리셋 · 휘발)

🙂 사용자 User

이름·오늘 볼주머니·총 씨앗 수·최근 본 씨앗. 모든 자산의 소유자.

소유: 최상위
소유의 핵심. 씨앗·주머니·카테고리·곳간은 사용자의 영속 자산(휘발 없음). 일일 볼주머니만 하루 단위로 리셋된다 — "쌓이는 자산 vs 매일 차오르는 그릇"의 구분이 데이터에도 그대로 드러난다.
+ · 비기능 · 전제

전제와 경계 조건

상세한 기술·보안 정책은 별도 기술 문서의 몫입니다. 여기선 제품 경계에 직접 닿는 전제만 둡니다.

개인정보. 자산은 기본적으로 기기에 로컬 저장됩니다. 로그인 제공자 인증과 광고 추적 동의(ATT)는 사용자 동의 흐름을 거치며, 거부해도 핵심 기능은 그대로 동작합니다(광고 보상만 +1로 줄어듦).
+ · 가정 · 열린 질문

아직 정하지 않은 것