Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

자기 성찰 타로 상담 앱 실행 로드맵 (MVP 기준, AI 적용준비 포함)

Billcorea 2026. 3. 29. 15:45

자기 성찰 타로 상담 앱 실행 로드맵 (MVP 기준, AI 적용준비 포함)

1) 제품 방향

  • 제품 한 줄 정의: 예언이 아니라, 사용자의 감정과 생각을 비추는 자기 성찰형 타로 상담 앱
  • 앱 목표: 카드 해석, 상담형 질문, 저널 기록, 치유 메시지를 통해 감정 탐색과 정서적 안정을 돕는다.
  • 핵심 사용자: 감정 정리가 필요한 사용자, 가벼운 셀프 상담을 원하는 사용자, 타로를 심리적 도구로 쓰고 싶은 사용자
  • 핵심 가치: 자기 성찰, 정서적 안정, 기록 습관, 감정 탐색, 치유 경험

2) MVP 범위 (필수)

  • 랜덤 카드 추출 (공정한 무작위 셔플)
  • 스프레드: 1장 / 3장 우선 구현
  • 해석 엔진: 카드 의미 + 사용자 질문 맥락 기반 상담 메시지 생성
  • 저널링: 상담 내용 저장/조회, 회고 기록
  • 세션 종료 치유 콘텐츠: 긍정 확언(Affirmation), 명상/호흡 메시지

3) 사용자 경험 흐름

  1. 홈에서 오늘의 질문 선택
  2. 스프레드 선택 후 카드 추출
  3. 카드 해석 + 공감형 상담 메시지 확인
  4. 후속 질문에 사용자 응답 입력
  5. 저널 저장
  6. 확언/명상 메시지 확인 후 세션 종료

4) 기능 설계 요약

4-1. 콘텐츠/데이터

  • 카드 정보: 카드명, 키워드, 정/역방향 의미, 확언, 명상 문구
  • 저널 정보: 질문, 선택 카드, 해석 요약, 상담 메시지, 사용자 회고, 감정 태그, 생성 시각

4-2. 해석 엔진 원칙

  • 입력: 사용자 질문 + 선택 카드 + 모드(개인용/상담 모드)
  • 처리: 카드 의미 추출 -> 질문 맥락 분류 -> 조합 해석 -> 상담 메시지 -> 후속 질문 생성
  • 출력: 해석 결과, 후속 질문, 확언 문구
  • 중요 가이드: 미래 예언형 문장 금지, 감정 탐색/자기 이해 중심 어조 유지

4-3. UI/UX

  • 기본 플로우: 카드 뽑기 -> 해석 -> 상담 질문 -> 기록 -> 치유 메시지
  • 화면 후보: Home, DrawCard, Reading, Counseling, Journal, Meditation
  • 디자인 방향: 안정감 있는 색감, 부드러운 애니메이션, 공감형 문구 중심

5) 기술/구조 계획

  • 기술 스택: Kotlin, Jetpack Compose, Coroutines, Navigation
  • 로컬 데이터: Room 기반 카드/저널 저장
  • DI: Hilt 도입 검토(MVP 초기에는 단순 구조 우선, 복잡도 증가 시 적용)
  • 아키텍처: 현재 단순 Compose 구조 유지, 이후 Presentation/Domain/Data 레이어로 점진 분리

6) 비기능 요구사항

  • 오프라인에서도 카드 조회/저널 저장 동작
  • 첫 화면 진입 속도 목표: 2초 내
  • 문구 품질: 비판적 표현 없이 중립적/공감적 톤 유지
  • UX 품질: 불안 조장 표현 지양, 안정감 있는 경험 유지

7) 8주 실행 일정(초안)

  • 1주차: 기획 확정, 와이어프레임, DB 스키마 정의
  • 2주차: Navigation/데이터 계층 기초, Room 세팅
  • 3주차: 카드 셔플/추출 + 1장/3장 스프레드
  • 4주차: 해석 화면 + 해석 엔진 1차 연결
  • 5주차: 상담 질문 흐름 + 사용자 입력 UI
  • 6주차: 저널 저장/조회 + 확언/명상 화면
  • 7주차: 디자인 보정, 문구 튜닝, QA
  • 8주차: MVP 배포 및 베타 피드백 수집

8) 출시 후 확장 백로그

  • 스프레드 확장: 5장, 켈틱 크로스
  • 감정 태그 기반 개인화 리포트
  • AI 기반 맞춤형 상담 강화
  • 커뮤니티 기능(경험 공유)
  • 전문가/상담가 연계 세션

9) 핵심 메시지

"예언이 아닌, 마음을 비추는 거울"

10) 현재 구현 상태 점검 (코드 기준, 2026-03-16)

  • 홈 화면 기본 구성(브랜드/히어로/메뉴/상단 앱바) 구현
  • Home -> ReadingList -> ReadingDetail Navigation 기본 흐름 구현
  • 앱 시작 시 raw/hanbok_prompt.txt 기반 Room 초기 적재 구현
  • raw/tarot_app_cards_ko.json 기반 카드 한글명/키워드/의미 보강 로직 구현
  • 리딩 목록에서 카드 이미지 + 한글 프롬프트 요약 + 상세 이동 구현
  • 리딩 상세에서 한글/영문 프롬프트, 키워드, 의미 전체 스크롤 조회 구현
  • 스프레드 선택(1장/3장) 전용 화면/상태 모델 고정
  • 카드 드로우(중복 없는 랜덤 선택) 세션 플로우 구현
  • 상담 입력(Counseling) 화면 및 후속 질문 플로우 구현
  • Journal Entity/DAO/저장-목록-상세 흐름 구현
  • 세션 종료용 확언/명상(Meditation) 화면 구현

11) Home 이후 실행 체크리스트 (우선순위 + DoD)

P0 (이번 스프린트 필수)

  • 스프레드 선택 흐름 고정 (1장, 3장)
  • 카드 추출(셔플/중복 없는 랜덤 선택) 완료
  • 리딩 결과 화면에서 선택 카드 + 질문 + 해석 요약 표시
  • 홈 -> 스프레드 -> 드로우 -> 리딩 단일 플로우 완성

완료 기준(DoD)

  • 홈에서 시작해 리딩 결과까지 한 번에 이동 가능
  • 시스템 뒤로가기 시 흐름이 깨지지 않음

P1 (P0 직후)

  • 상담 질문 1~2개 입력 화면 연결
  • 세션 결과를 Journal로 저장
  • Journal 목록/상세 조회 연결
  • 상세 화면에서 한글 데이터/카드 이미지/본문 전체 확인 가능

완료 기준(DoD)

  • 리딩 -> 상담 입력 -> 저널 저장 -> 목록/상세 조회까지 끊김 없음

P2 (품질/마무리)

  • 세션 종료용 확언/명상 화면 연결
  • 빈 상태/오류 상태 문구 정리
  • 오탈자/한국어 톤(자연스러운 번역) 최종 점검
  • 릴리즈 전 QA 체크리스트 정리

12) 2주 스프린트 실행안

Week 1: 핵심 플로우 고정

  • Route/인자 규칙 확정 (spreadType, sessionId)
  • Draw + Reading 구현 마무리
  • ViewModel 세션 상태(spreadType, selectedCardIds, userQuestion) 고정
  • 더미 문구 제거 및 실제 데이터 연결

반영 메모 (2026-03-17)

  • Reading 요약이 카드 DB의 keywords / meanings / 사용자 질문을 기반으로 생성되도록 연결
  • Meditation 마무리 문구와 확언이 선택 카드/감정 태그 기반 파생 문구를 사용하도록 전환
  • 최근 기록 카드가 날짜/감정 태그뿐 아니라 실제 질문/요약/선택 카드명을 노출하도록 보강

Week 2: 세션 완결 + QA

  • Counseling 입력 흐름 연결
  • Journal 저장/목록/상세 완성
  • Meditation(확언/명상) 종료 화면 연결
  • 리소스 매핑/오류 처리/빈 상태/문구 톤 최종 점검

13) 오늘 바로 시작할 작업 (1 -> 2 순서)

  1. Route/인자 표 확정
  2. Draw/Reading 상태 모델 고정
  3. 리딩 결과 화면 최소 스펙(카드/요약/다음 액션) 잠금
  4. Journal 저장 스키마 + DAO 쿼리 확정

13-1) Route/인자 표 확정

  • 목표: Navigation 계약을 먼저 고정해 화면 연결 재작업을 줄인다.
  • 세부 작업
    • 라우트 후보 확정: Home, SpreadSelect, Draw, Reading, Counseling, JournalList, JournalDetail, Meditation
    • 인자 분류: 필수/선택/없음 (spreadType, sessionId, journalId)
    • 뒤로가기/딥링크 대응 기준 정리
  • 산출물: Route/인자 표 v1 + TarotNavRoutes 반영 기준
  • 완료 기준(DoD): 모든 화면의 인자 규칙이 문서와 코드에서 동일
  • 예상 소요: 1.5 ~ 2시간
route 인자 타입 필수 예시
home - - - home
draw/{spreadType} spreadType String Y draw/three_card
reading/{sessionId} sessionId Long Y reading/1710572400000
counseling/{sessionId} sessionId Long Y counseling/1710572400000
journal/detail/{journalId} journalId Long Y journal/detail/42
meditation?sessionId={sessionId} sessionId Long N meditation?sessionId=1710572400000

13-2) Draw/Reading 상태 모델 고정

  • 목표: ViewModel 단일 상태원천(SSOT)으로 Draw와 Reading을 일관되게 연결한다.
  • 세부 작업
    • TarotViewModel에 세션 상태 필드 정의
    • 이벤트 목록 확정 (onSpreadSelected, onQuestionChanged, drawCards, clearSession)
    • UI 로컬 상태와 ViewModel 상태 경계 명시
  • 산출물: SessionState 필드 표 v1 + 이벤트 계약
  • 완료 기준(DoD): Draw/Reading이 동일 상태 모델을 참조하고 상태 전달이 끊기지 않음
  • 예상 소요: 2 ~ 3시간
필드명 타입 용도 갱신 시점
sessionId Long? 세션 식별자 스프레드 시작 시 생성
spreadType String one_card/three_card 구분 스프레드 선택 시
userQuestion String 사용자 질문 원문 홈/상담 입력 시
selectedCardIds List 중복 없는 카드 번호 Draw 완료 시
readingSummary String 리딩 요약 Reading 계산 후
nextAction String 다음 CTA 분기 Reading 진입 시
isLoading Boolean 로딩 상태 Draw/저장 중
errorMessage String? 에러 노출 실패 시

13-3) 리딩 결과 화면 최소 스펙 잠금

  • 목표: P0 범위를 고정해 과도한 화면 확장을 방지한다.
  • 세부 작업
    • 필수 UI 3요소 고정: 선택 카드 썸네일, 요약 텍스트(24줄), 다음 액션 버튼(12개)
    • P1 이관 항목 분리: 심화 해석/부가 텍스트
    • 빈 상태/오류 상태 문구 확정
  • 산출물: Reading 최소 스펙 체크리스트
  • 완료 기준(DoD): 리딩 진입 시 필수 3요소가 항상 보이고 다음 화면 이동이 일관됨
  • 예상 소요: 1.5 ~ 2.5시간

13-4) Journal 저장 스키마 + DAO 쿼리 확정

  • 목표: 세션 저장/조회의 DB 계약을 먼저 고정한다.
  • 세부 작업
    • JournalEntity 필드 확정 (질문, 카드목록, 요약, 상담응답, 감정태그, 생성시각)
    • JournalDao 최소 쿼리 확정 (insert, list, detail, recent)
    • TarotDatabase 버전 업 및 마이그레이션 정책 결정
  • 산출물: JournalEntity/JournalDao 설계표 v1
  • 완료 기준(DoD): 저장 1건/목록 조회/상세 조회를 커버하는 쿼리 셋 정의 완료
  • 예상 소요: 2 ~ 3시간

추가 반영 메모 (2026-03-17)

  • TarotRepositoryDataSource 도입으로 TarotViewModel JVM 단위 테스트 가능 구조로 정리
  • MainDispatcherRule, TarotViewModelTest 추가로 리딩 요약 생성 / Journal 저장 회귀 검증 자동화
  • JournalDaoTest 추가로 최신순 목록 / 상세 조회 / DB 재오픈 후 데이터 유지 검증
  • MIGRATION_4_5 명시적 Room 마이그레이션 추가
  • DB 정책: 4 -> 5는 비파괴 마이그레이션 적용, 1~3 구버전은 destructive fallback 유지

14) QA 체크리스트 문서

  • MVP QA 체크리스트 작성: documents/qa_checklist_mvp.md

15) QA/테스트/마이그레이션 진행 상태 (2026-03-17)

  • TarotViewModel 최소 회귀 테스트 추가
  • JournalDao 저장/조회/재오픈 테스트 추가
  • TarotDatabase 4 -> 5 마이그레이션 정책 코드 반영 및 테스트 추가
  • 시스템 뒤로가기 동작을 BackHandler로 세션/저널/프롬프트 화면에 명시적 반영
  • 명상/확언 문구 톤을 차분한 반성형 문장으로 보강하고 테스트 추가
  • 기본 테마를 medium contrast 색상표와 surfaceContainer* 계열 배경으로 조정해 다크/라이트 대비 보강

16) 코드 품질 정리 (2026-03-17)

  • JournalScreens.kt CardDetailBlock: 영문 카드명 중복 표시 버그 수정 → cardNameKo 우선 주 타이틀, 영문명은 부제목으로 분리
  • TarotSummaryScreen.kt: 홈 화면 Journal 직접 이동 버튼 복원 (EditNote 아이콘, 3 Card Spread 아래 배치)
  • TarotSessionFlowScreens.kt: 미사용 SimpleTodoScreen 제거
  • TarotReadingScreens.kt: 미사용 private DetailCard 제거
  • TarotViewModel.kt: 미사용 public observeJournalDetail / clearSessionError 제거
  • TarotViewModel.kt buildReadingSummary: 카드명을 cardNameKo 우선 사용으로 리딩 요약 문구 한국어화

17) 온디바이스 AI Edge/MediaPipe LLM 적용 계획 (2026-03-20)

17-1) 요구사항 체크리스트 (사용자 요청 5개)

    1. Google AI Edge / MediaPipe LLM 적용
    1. 사용자가 입력한 오늘의 질문 이해(의도/주제 파악)
    1. 질문과 카드 keywords/meanings 연관도 기반 카드 선택
    1. 선택 카드 해석 메시지 생성
    1. 리딩 종료 후 선택 카드 meanings 기반 확언 문장 생성

17-2) 단계별 실행 (준비 -> 설계 -> 구현 -> 검증 -> 배포)

  1. 준비
    • AI Edge/MediaPipe LLM 의존성/ABI/최소 기기 제약 확인
    • MainActivity IMMEDIATE 업데이트 플로우와 AI 초기화 순서 충돌 방지 정책 확정
  2. 설계
    • ai 패키지에 엔진 인터페이스(TarotAiService) + 폴백 엔진 정의
    • 질문 분석 -> 카드 점수화 -> 해석 생성 -> 확언 생성 파이프라인 설계
  3. 구현
    • TarotViewModel.drawCards()에 질문 기반 카드 선택 적용
    • 리딩 요약/해석 메시지를 AI 서비스 출력으로 전환
    • 명상 마무리 화면 확언을 AI 생성 결과 우선 사용
  4. 검증
    • JVM 테스트: 질문-카드 매칭, 해석 문구, 확언 생성, AI 실패 시 폴백 회귀
    • 성능 기준: 추론/생성 체감 지연과 로딩 UX 점검
  5. 배포
    • 기능 플래그로 단계적 활성화(폴백 엔진 기본값 유지)
    • IMMEDIATE 업데이트 취소/실패 시 AI 기능 안전 비활성화 시나리오 점검

17-3) 산출물

  • working_plan.md AI 도입 계획 + 진행 체크리스트
  • app/src/main/java/com/billcorea/koreantarot0312/ai/ AI 서비스 계층
  • TarotViewModel 질문 기반 카드 선택/해석/확언 통합
  • app/src/test 회귀 테스트(질문 이해/카드 선택/확언)

17-4) 리스크 및 완화

  • 리스크: 온디바이스 LLM 초기화 지연 -> 완화: 규칙 기반 즉시 폴백 유지
  • 리스크: 생성 문장 편차 -> 완화: 톤 가드레일 + 템플릿 후처리
  • 리스크: 업데이트 플로우와 동시 초기화 충돌 -> 완화: 업데이트 체크 이후 AI 지연 초기화
  • 리스크: 앱 용량 증가 -> 완화: 경량 모델 우선 + 단계적 배포

17-5) 오늘 바로 시작할 작업 (착수)

  • working_plan.md에 AI 5요구 실행 계획 반영
  • ai 패키지에 TarotAiService + 규칙 기반 기본 구현 추가
  • TarotViewModel에 질문 기반 카드 선택/해석/확언 연결 시작
  • 명상 화면에서 AI 확언 우선 노출 연결
  • AI Edge/MediaPipe LLM 실제 엔진 어댑터 추가 및 Hilt 교체

    자기 성찰 타로 상담 앱 실행 로드맵 (MVP 기준)

1) 제품 방향

  • 제품 한 줄 정의: 예언이 아니라, 사용자의 감정과 생각을 비추는 자기 성찰형 타로 상담 앱
  • 앱 목표: 카드 해석, 상담형 질문, 저널 기록, 치유 메시지를 통해 감정 탐색과 정서적 안정을 돕는다.
  • 핵심 사용자: 감정 정리가 필요한 사용자, 가벼운 셀프 상담을 원하는 사용자, 타로를 심리적 도구로 쓰고 싶은 사용자
  • 핵심 가치: 자기 성찰, 정서적 안정, 기록 습관, 감정 탐색, 치유 경험

2) MVP 범위 (필수)

  • 랜덤 카드 추출 (공정한 무작위 셔플)
  • 스프레드: 1장 / 3장 우선 구현
  • 해석 엔진: 카드 의미 + 사용자 질문 맥락 기반 상담 메시지 생성
  • 저널링: 상담 내용 저장/조회, 회고 기록
  • 세션 종료 치유 콘텐츠: 긍정 확언(Affirmation), 명상/호흡 메시지

3) 사용자 경험 흐름

  1. 홈에서 오늘의 질문 선택
  2. 스프레드 선택 후 카드 추출
  3. 카드 해석 + 공감형 상담 메시지 확인
  4. 후속 질문에 사용자 응답 입력
  5. 저널 저장
  6. 확언/명상 메시지 확인 후 세션 종료

4) 기능 설계 요약

4-1. 콘텐츠/데이터

  • 카드 정보: 카드명, 키워드, 정/역방향 의미, 확언, 명상 문구
  • 저널 정보: 질문, 선택 카드, 해석 요약, 상담 메시지, 사용자 회고, 감정 태그, 생성 시각

4-2. 해석 엔진 원칙

  • 입력: 사용자 질문 + 선택 카드 + 모드(개인용/상담 모드)
  • 처리: 카드 의미 추출 -> 질문 맥락 분류 -> 조합 해석 -> 상담 메시지 -> 후속 질문 생성
  • 출력: 해석 결과, 후속 질문, 확언 문구
  • 중요 가이드: 미래 예언형 문장 금지, 감정 탐색/자기 이해 중심 어조 유지

4-3. UI/UX

  • 기본 플로우: 카드 뽑기 -> 해석 -> 상담 질문 -> 기록 -> 치유 메시지
  • 화면 후보: Home, DrawCard, Reading, Counseling, Journal, Meditation
  • 디자인 방향: 안정감 있는 색감, 부드러운 애니메이션, 공감형 문구 중심

5) 기술/구조 계획

  • 기술 스택: Kotlin, Jetpack Compose, Coroutines, Navigation
  • 로컬 데이터: Room 기반 카드/저널 저장
  • DI: Hilt 도입 검토(MVP 초기에는 단순 구조 우선, 복잡도 증가 시 적용)
  • 아키텍처: 현재 단순 Compose 구조 유지, 이후 Presentation/Domain/Data 레이어로 점진 분리

6) 비기능 요구사항

  • 오프라인에서도 카드 조회/저널 저장 동작
  • 첫 화면 진입 속도 목표: 2초 내
  • 문구 품질: 비판적 표현 없이 중립적/공감적 톤 유지
  • UX 품질: 불안 조장 표현 지양, 안정감 있는 경험 유지

7) 8주 실행 일정(초안)

  • 1주차: 기획 확정, 와이어프레임, DB 스키마 정의
  • 2주차: Navigation/데이터 계층 기초, Room 세팅
  • 3주차: 카드 셔플/추출 + 1장/3장 스프레드
  • 4주차: 해석 화면 + 해석 엔진 1차 연결
  • 5주차: 상담 질문 흐름 + 사용자 입력 UI
  • 6주차: 저널 저장/조회 + 확언/명상 화면
  • 7주차: 디자인 보정, 문구 튜닝, QA
  • 8주차: MVP 배포 및 베타 피드백 수집

8) 출시 후 확장 백로그

  • 스프레드 확장: 5장, 켈틱 크로스
  • 감정 태그 기반 개인화 리포트
  • AI 기반 맞춤형 상담 강화
  • 커뮤니티 기능(경험 공유)
  • 전문가/상담가 연계 세션

9) 핵심 메시지

"예언이 아닌, 마음을 비추는 거울"

10) 현재 구현 상태 점검 (코드 기준, 2026-03-16)

  • 홈 화면 기본 구성(브랜드/히어로/메뉴/상단 앱바) 구현
  • Home -> ReadingList -> ReadingDetail Navigation 기본 흐름 구현
  • 앱 시작 시 raw/hanbok_prompt.txt 기반 Room 초기 적재 구현
  • raw/tarot_app_cards_ko.json 기반 카드 한글명/키워드/의미 보강 로직 구현
  • 리딩 목록에서 카드 이미지 + 한글 프롬프트 요약 + 상세 이동 구현
  • 리딩 상세에서 한글/영문 프롬프트, 키워드, 의미 전체 스크롤 조회 구현
  • 스프레드 선택(1장/3장) 전용 화면/상태 모델 고정
  • 카드 드로우(중복 없는 랜덤 선택) 세션 플로우 구현
  • 상담 입력(Counseling) 화면 및 후속 질문 플로우 구현
  • Journal Entity/DAO/저장-목록-상세 흐름 구현
  • 세션 종료용 확언/명상(Meditation) 화면 구현

11) Home 이후 실행 체크리스트 (우선순위 + DoD)

P0 (이번 스프린트 필수)

  • 스프레드 선택 흐름 고정 (1장, 3장)
  • 카드 추출(셔플/중복 없는 랜덤 선택) 완료
  • 리딩 결과 화면에서 선택 카드 + 질문 + 해석 요약 표시
  • 홈 -> 스프레드 -> 드로우 -> 리딩 단일 플로우 완성

완료 기준(DoD)

  • 홈에서 시작해 리딩 결과까지 한 번에 이동 가능
  • 시스템 뒤로가기 시 흐름이 깨지지 않음

P1 (P0 직후)

  • 상담 질문 1~2개 입력 화면 연결
  • 세션 결과를 Journal로 저장
  • Journal 목록/상세 조회 연결
  • 상세 화면에서 한글 데이터/카드 이미지/본문 전체 확인 가능

완료 기준(DoD)

  • 리딩 -> 상담 입력 -> 저널 저장 -> 목록/상세 조회까지 끊김 없음

P2 (품질/마무리)

  • 세션 종료용 확언/명상 화면 연결
  • 빈 상태/오류 상태 문구 정리
  • 오탈자/한국어 톤(자연스러운 번역) 최종 점검
  • 릴리즈 전 QA 체크리스트 정리

12) 2주 스프린트 실행안

Week 1: 핵심 플로우 고정

  • Route/인자 규칙 확정 (spreadType, sessionId)
  • Draw + Reading 구현 마무리
  • ViewModel 세션 상태(spreadType, selectedCardIds, userQuestion) 고정
  • 더미 문구 제거 및 실제 데이터 연결

반영 메모 (2026-03-17)

  • Reading 요약이 카드 DB의 keywords / meanings / 사용자 질문을 기반으로 생성되도록 연결
  • Meditation 마무리 문구와 확언이 선택 카드/감정 태그 기반 파생 문구를 사용하도록 전환
  • 최근 기록 카드가 날짜/감정 태그뿐 아니라 실제 질문/요약/선택 카드명을 노출하도록 보강

Week 2: 세션 완결 + QA

  • Counseling 입력 흐름 연결
  • Journal 저장/목록/상세 완성
  • Meditation(확언/명상) 종료 화면 연결
  • 리소스 매핑/오류 처리/빈 상태/문구 톤 최종 점검

13) 오늘 바로 시작할 작업 (1 -> 2 순서)

  1. Route/인자 표 확정
  2. Draw/Reading 상태 모델 고정
  3. 리딩 결과 화면 최소 스펙(카드/요약/다음 액션) 잠금
  4. Journal 저장 스키마 + DAO 쿼리 확정

13-1) Route/인자 표 확정

  • 목표: Navigation 계약을 먼저 고정해 화면 연결 재작업을 줄인다.
  • 세부 작업
    • 라우트 후보 확정: Home, SpreadSelect, Draw, Reading, Counseling, JournalList, JournalDetail, Meditation
    • 인자 분류: 필수/선택/없음 (spreadType, sessionId, journalId)
    • 뒤로가기/딥링크 대응 기준 정리
  • 산출물: Route/인자 표 v1 + TarotNavRoutes 반영 기준
  • 완료 기준(DoD): 모든 화면의 인자 규칙이 문서와 코드에서 동일
  • 예상 소요: 1.5 ~ 2시간
route 인자 타입 필수 예시
home - - - home
draw/{spreadType} spreadType String Y draw/three_card
reading/{sessionId} sessionId Long Y reading/1710572400000
counseling/{sessionId} sessionId Long Y counseling/1710572400000
journal/detail/{journalId} journalId Long Y journal/detail/42
meditation?sessionId={sessionId} sessionId Long N meditation?sessionId=1710572400000

13-2) Draw/Reading 상태 모델 고정

  • 목표: ViewModel 단일 상태원천(SSOT)으로 Draw와 Reading을 일관되게 연결한다.
  • 세부 작업
    • TarotViewModel에 세션 상태 필드 정의
    • 이벤트 목록 확정 (onSpreadSelected, onQuestionChanged, drawCards, clearSession)
    • UI 로컬 상태와 ViewModel 상태 경계 명시
  • 산출물: SessionState 필드 표 v1 + 이벤트 계약
  • 완료 기준(DoD): Draw/Reading이 동일 상태 모델을 참조하고 상태 전달이 끊기지 않음
  • 예상 소요: 2 ~ 3시간
필드명 타입 용도 갱신 시점
sessionId Long? 세션 식별자 스프레드 시작 시 생성
spreadType String one_card/three_card 구분 스프레드 선택 시
userQuestion String 사용자 질문 원문 홈/상담 입력 시
selectedCardIds List 중복 없는 카드 번호 Draw 완료 시
readingSummary String 리딩 요약 Reading 계산 후
nextAction String 다음 CTA 분기 Reading 진입 시
isLoading Boolean 로딩 상태 Draw/저장 중
errorMessage String? 에러 노출 실패 시

13-3) 리딩 결과 화면 최소 스펙 잠금

  • 목표: P0 범위를 고정해 과도한 화면 확장을 방지한다.
  • 세부 작업
    • 필수 UI 3요소 고정: 선택 카드 썸네일, 요약 텍스트(24줄), 다음 액션 버튼(12개)
    • P1 이관 항목 분리: 심화 해석/부가 텍스트
    • 빈 상태/오류 상태 문구 확정
  • 산출물: Reading 최소 스펙 체크리스트
  • 완료 기준(DoD): 리딩 진입 시 필수 3요소가 항상 보이고 다음 화면 이동이 일관됨
  • 예상 소요: 1.5 ~ 2.5시간

13-4) Journal 저장 스키마 + DAO 쿼리 확정

  • 목표: 세션 저장/조회의 DB 계약을 먼저 고정한다.
  • 세부 작업
    • JournalEntity 필드 확정 (질문, 카드목록, 요약, 상담응답, 감정태그, 생성시각)
    • JournalDao 최소 쿼리 확정 (insert, list, detail, recent)
    • TarotDatabase 버전 업 및 마이그레이션 정책 결정
  • 산출물: JournalEntity/JournalDao 설계표 v1
  • 완료 기준(DoD): 저장 1건/목록 조회/상세 조회를 커버하는 쿼리 셋 정의 완료
  • 예상 소요: 2 ~ 3시간

추가 반영 메모 (2026-03-17)

  • TarotRepositoryDataSource 도입으로 TarotViewModel JVM 단위 테스트 가능 구조로 정리
  • MainDispatcherRule, TarotViewModelTest 추가로 리딩 요약 생성 / Journal 저장 회귀 검증 자동화
  • JournalDaoTest 추가로 최신순 목록 / 상세 조회 / DB 재오픈 후 데이터 유지 검증
  • MIGRATION_4_5 명시적 Room 마이그레이션 추가
  • DB 정책: 4 -> 5는 비파괴 마이그레이션 적용, 1~3 구버전은 destructive fallback 유지

14) QA 체크리스트 문서

  • MVP QA 체크리스트 작성: documents/qa_checklist_mvp.md

15) QA/테스트/마이그레이션 진행 상태 (2026-03-17)

  • TarotViewModel 최소 회귀 테스트 추가
  • JournalDao 저장/조회/재오픈 테스트 추가
  • TarotDatabase 4 -> 5 마이그레이션 정책 코드 반영 및 테스트 추가
  • 시스템 뒤로가기 동작을 BackHandler로 세션/저널/프롬프트 화면에 명시적 반영
  • 명상/확언 문구 톤을 차분한 반성형 문장으로 보강하고 테스트 추가
  • 기본 테마를 medium contrast 색상표와 surfaceContainer* 계열 배경으로 조정해 다크/라이트 대비 보강

16) 코드 품질 정리 (2026-03-17)

  • JournalScreens.kt CardDetailBlock: 영문 카드명 중복 표시 버그 수정 → cardNameKo 우선 주 타이틀, 영문명은 부제목으로 분리
  • TarotSummaryScreen.kt: 홈 화면 Journal 직접 이동 버튼 복원 (EditNote 아이콘, 3 Card Spread 아래 배치)
  • TarotSessionFlowScreens.kt: 미사용 SimpleTodoScreen 제거
  • TarotReadingScreens.kt: 미사용 private DetailCard 제거
  • TarotViewModel.kt: 미사용 public observeJournalDetail / clearSessionError 제거
  • TarotViewModel.kt buildReadingSummary: 카드명을 cardNameKo 우선 사용으로 리딩 요약 문구 한국어화

17) 온디바이스 AI Edge/MediaPipe LLM 적용 계획 (2026-03-20)

17-1) 요구사항 체크리스트 (사용자 요청 5개)

    1. Google AI Edge / MediaPipe LLM 적용
    1. 사용자가 입력한 오늘의 질문 이해(의도/주제 파악)
    1. 질문과 카드 keywords/meanings 연관도 기반 카드 선택
    1. 선택 카드 해석 메시지 생성
    1. 리딩 종료 후 선택 카드 meanings 기반 확언 문장 생성

17-2) 단계별 실행 (준비 -> 설계 -> 구현 -> 검증 -> 배포)

  1. 준비
    • AI Edge/MediaPipe LLM 의존성/ABI/최소 기기 제약 확인
    • MainActivity IMMEDIATE 업데이트 플로우와 AI 초기화 순서 충돌 방지 정책 확정
  2. 설계
    • ai 패키지에 엔진 인터페이스(TarotAiService) + 폴백 엔진 정의
    • 질문 분석 -> 카드 점수화 -> 해석 생성 -> 확언 생성 파이프라인 설계
  3. 구현
    • TarotViewModel.drawCards()에 질문 기반 카드 선택 적용
    • 리딩 요약/해석 메시지를 AI 서비스 출력으로 전환
    • 명상 마무리 화면 확언을 AI 생성 결과 우선 사용
  4. 검증
    • JVM 테스트: 질문-카드 매칭, 해석 문구, 확언 생성, AI 실패 시 폴백 회귀
    • 성능 기준: 추론/생성 체감 지연과 로딩 UX 점검
  5. 배포
    • 기능 플래그로 단계적 활성화(폴백 엔진 기본값 유지)
    • IMMEDIATE 업데이트 취소/실패 시 AI 기능 안전 비활성화 시나리오 점검

17-3) 산출물

  • working_plan.md AI 도입 계획 + 진행 체크리스트
  • app/src/main/java/com/billcorea/koreantarot0312/ai/ AI 서비스 계층
  • TarotViewModel 질문 기반 카드 선택/해석/확언 통합
  • app/src/test 회귀 테스트(질문 이해/카드 선택/확언)

17-4) 리스크 및 완화

  • 리스크: 온디바이스 LLM 초기화 지연 -> 완화: 규칙 기반 즉시 폴백 유지
  • 리스크: 생성 문장 편차 -> 완화: 톤 가드레일 + 템플릿 후처리
  • 리스크: 업데이트 플로우와 동시 초기화 충돌 -> 완화: 업데이트 체크 이후 AI 지연 초기화
  • 리스크: 앱 용량 증가 -> 완화: 경량 모델 우선 + 단계적 배포

17-5) 오늘 바로 시작할 작업 (착수)

  • working_plan.md에 AI 5요구 실행 계획 반영
  • ai 패키지에 TarotAiService + 규칙 기반 기본 구현 추가
  • TarotViewModel에 질문 기반 카드 선택/해석/확언 연결 시작
  • 명상 화면에서 AI 확언 우선 노출 연결
  • AI Edge/MediaPipe LLM 실제 엔진 어댑터 추가 및 Hilt 교체
반응형