2026/05/11

오늘의 이야기

자기 성찰 타로 상담 앱 실행 로드맵 (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 교체





댓글 없음:

댓글 쓰기

오늘의 이야기

#스하리1000명프로젝트 오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데, 내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이 있으면 수집하고, 카카오톡으로 친구에게...