자기 성찰 타로 상담 앱
기획 및 실행 문서
이 문서는 자기 성찰과 마음 치유를 목표로 하는 안드로이드 앱의 실행계획, 앱 구조, 데이터베이스 설계, UI 설계, 타로 해석 엔진, 그리고 PRD(Product Requirements Document)를 한 번에 정리한 개발 기준 문서입니다.
1. 프로젝트 개요
| 항목 | 내용 |
|---|---|
| 앱 목표 | 사용자가 카드를 통해 자신의 감정과 상황을 돌아보고, 상담형 질문과 기록 기능을 통해 마음 치유를 경험하도록 돕는다. |
| 핵심 사용자 | 감정 정리가 필요한 사용자, 가벼운 셀프 상담을 원하는 사용자, 타로를 심리적 도구로 활용하고 싶은 사용자 |
| 핵심 가치 | 자기 성찰, 정서적 안정, 기록 습관, 감정 탐색, 치유 경험 |
| 개발 환경 | Kotlin, Jetpack Compose, Hilt, Room Database, Coroutines, Navigation |
2. 앱 구조 설계 (Clean Architecture)
유지보수성과 확장성을 고려해 Presentation / Domain / Data 레이어로 분리합니다. 추후 AI 상담, 서버 연동, 커뮤니티 기능이 추가되더라도 구조를 유지할 수 있도록 설계합니다.
Presentation
Compose UI, ViewModel, UI State, Navigation 담당
Domain
UseCase, TarotEngine, 비즈니스 규칙, 카드 조합 해석 로직 담당
Data
Repository, Room DAO, Local DataSource, 추후 Remote API 연동 담당
권장 패키지 구조
com.example.tarothealing
├─ core
│ ├─ ui
│ ├─ util
│ └─ common
├─ data
│ ├─ local
│ │ ├─ dao
│ │ ├─ entity
│ │ └─ database
│ ├─ repository
│ └─ mapper
├─ domain
│ ├─ model
│ ├─ repository
│ └─ usecase
├─ feature
│ ├─ home
│ ├─ draw
│ ├─ reading
│ ├─ counseling
│ ├─ journal
│ └─ meditation
├─ navigation
└─ di
3. Room Database 설계
최소 MVP에서는 카드 정보와 저널 기록이 핵심입니다. 이후 스프레드 결과 저장, 감정 태그, 즐겨찾기, 사용자 세션 기록까지 확장할 수 있습니다.
핵심 엔티티
| Entity | 필드 | 설명 |
|---|---|---|
| CardEntity | id, nameKo, nameEn, arcanaType, suit, number, imageAsset, uprightMeaning, reversedMeaning, affirmation, meditationMessage, keywords | 타로 카드 기본 정보 저장 |
| JournalEntity | id, spreadType, userQuestion, selectedCardIds, interpretationSummary, counselingMessage, userReflection, emotionTag, createdAt | 사용자 상담/기록 저장 |
| SessionEntity | id, mode, startedAt, endedAt | 상담 세션 단위 관리용 (선택) |
예시 Entity 코드
@Entity(tableName = "cards")
data class CardEntity(
@PrimaryKey val id: Int,
val nameKo: String,
val nameEn: String,
val arcanaType: String,
val suit: String?,
val number: Int?,
val imageAsset: String,
val uprightMeaning: String,
val reversedMeaning: String,
val affirmation: String,
val meditationMessage: String,
val keywords: String
)
@Entity(tableName = "journals")
data class JournalEntity(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val spreadType: String,
val userQuestion: String,
val selectedCardIds: String,
val interpretationSummary: String,
val counselingMessage: String,
val userReflection: String,
val emotionTag: String?,
val createdAt: Long
)
4. Jetpack Compose UI 설계
UI는 전통적 미학과 심리적 안정감을 동시에 전달해야 합니다. 전체 흐름은 카드 뽑기 → 해석 → 상담 질문 → 기록 → 치유 메시지로 이어집니다.
| 화면 | 역할 | 핵심 요소 |
|---|---|---|
| HomeScreen | 앱 진입 및 오늘의 질문 선택 | 오늘의 카드, 시작 버튼, 최근 기록 |
| DrawCardScreen | 카드 셔플 및 추출 | 덱 애니메이션, 스프레드 선택 |
| ReadingScreen | 카드 해석 제공 | 카드 이미지, 키워드, 해석 문장 |
| CounselingScreen | 상담형 질문/응답 | 질문 카드, 사용자 입력창, 다음 질문 |
| JournalScreen | 상담 내용 저장/조회 | 기록 리스트, 상세 보기, 감정 태그 |
| MeditationScreen | 상담 후 치유 콘텐츠 제공 | 호흡 문구, 확언, 명상 메시지 |
UI 흐름
HomeScreen
→ SpreadSelectBottomSheet
→ DrawCardScreen
→ ReadingScreen
→ CounselingScreen
→ JournalSaveDialog
→ MeditationScreen
디자인 가이드
- 조선풍 타로 카드 일러스트, 한복, 금박 패턴, 먹과 수채화 느낌 반영
- 차분한 남색, 아이보리, 금색 포인트 컬러 사용
- 부드러운 페이드/슬라이드 애니메이션 적용
- 카드 해석은 정보 전달보다 감정적 공감에 초점
5. 타로 해석 엔진 설계
해석 엔진은 단순히 카드 뜻을 보여주는 수준이 아니라, 사용자 질문 맥락 + 카드 조합 + 상담형 톤을 합쳐 결과를 생성해야 합니다.
입력 요소
예: “지금 내가 가장 먼저 돌봐야 할 감정은 무엇일까?”
예: The Hermit, Strength, The Star
개인용 / 상담 모드
처리 단계
| 단계 | 설명 |
|---|---|
| 1. 카드 의미 추출 | 각 카드의 핵심 키워드, 감정적 메시지, 회복 포인트를 정리 |
| 2. 질문 맥락 분석 | 사용자의 질문이 감정, 관계, 진로, 회복 중 어느 범주인지 분류 |
| 3. 조합 해석 | 카드 간 공통 주제와 대비되는 메시지를 연결 |
| 4. 상담 메시지 생성 | 부드럽고 공감적인 문장으로 해석 결과 생성 |
| 5. 후속 질문 생성 | 사용자가 감정을 기록할 수 있는 질문 제공 |
예시 알고리즘
fun generateReading(
question: String,
cards: List<TarotCard>,
mode: CounselingMode
): ReadingResult {
val themes = cards.flatMap { it.keywords }.groupBy { it }
val dominantThemes = themes.entries.sortedByDescending { it.value.size }.take(3)
val interpretation = buildInterpretation(question, cards, dominantThemes)
val counselingQuestion = buildFollowUpQuestion(question, dominantThemes)
val affirmation = cards.firstOrNull()?.affirmation ?: "나는 지금의 나를 있는 그대로 받아들입니다."
return ReadingResult(
interpretation = interpretation,
counselingQuestion = counselingQuestion,
affirmation = affirmation
)
}
6. PRD (Product Requirements Document)
6-1. 제품 목표
사용자가 타로 카드를 통해 자신의 감정을 안전하게 탐색하고, 기록과 치유 경험까지 이어지는 모바일 셀프 상담 경험을 제공한다.
6-2. 주요 기능
| 기능 | 설명 | MVP 포함 여부 |
|---|---|---|
| 랜덤 카드 추출 | 공정한 무작위 셔플 및 카드 선택 | 포함 |
| 스프레드 기능 | 1장, 3장, 5장, 켈틱 크로스 등 확장 가능한 구조 | 1장/3장 우선 |
| 해석 엔진 | 카드 의미 + 질문 맥락 기반 상담 메시지 생성 | 포함 |
| 저널링 | 상담 내용 저장 및 회고 기록 | 포함 |
| 긍정 확언 / 명상 | 세션 종료 후 감정 안정용 메시지 제공 | 포함 |
| AI 맞춤형 상담 | 추후 사용자 성향 기반 대화 강화 | 추후 |
6-3. 사용자 시나리오
1) 사용자가 홈 화면에서 오늘의 질문을 선택한다.
2) 3장 스프레드를 선택해 카드를 뽑는다.
3) 앱은 카드 해석과 함께 공감형 상담 메시지를 보여준다.
4) 앱은 “지금 당신이 가장 먼저 돌봐야 할 감정은 무엇인가요?” 같은 질문을 제시한다.
5) 사용자는 자신의 생각을 입력하고 저장한다.
6) 마지막으로 확언/명상 문구를 보고 세션을 종료한다.
6-4. 비기능 요구사항
- 오프라인 환경에서도 핵심 카드/저널 기능 동작
- 첫 화면 진입 속도 2초 내 목표
- 다크한 감성보다 안정감 있는 UX 유지
- 모든 상담 문구는 비판적 표현 없이 중립적/공감적 어조 사용
6-5. 개발 일정 예시
| 주차 | 작업 내용 |
|---|---|
| 1주차 | 기획 확정, 와이어프레임, DB 스키마 설계 |
| 2주차 | Room, Hilt, Navigation 기본 세팅 |
| 3주차 | 카드 셔플/추출 기능 구현 |
| 4주차 | 카드 해석 화면 및 엔진 연결 |
| 5주차 | 상담 질문/기록 UI 구현 |
| 6주차 | 저널 저장/조회, 명상/확언 화면 구현 |
| 7주차 | 디자인 보완, QA, 문구 튜닝 |
| 8주차 | MVP 배포 및 베타 피드백 수집 |
7. 결론
이 앱의 본질은 단순한 타로 앱이 아니라, 감정 회복과 자기 성찰을 위한 상담형 저널 앱입니다. 따라서 성공 포인트는 카드의 점술성보다도, 사용자가 스스로를 돌아보게 만드는 질문 설계, 부드러운 UX, 기록 습관, 공감형 메시지에 있습니다.
'모바일 앱(안드로이드)' 카테고리의 다른 글
| Han Tarot 다음 개발 스텝 정리 (HomeScreen 이후) (0) | 2026.03.23 |
|---|---|
| Han Tarot 앱 개발 기획안 (수정버전) (0) | 2026.03.21 |
| BillingManager Billing Library 8.3.0 호환성 수정 - 완료 보고서 (0) | 2026.03.17 |
| In-App Update 기능 구현 완료 보고서 (0) | 2026.03.12 |
| 휴게시간 앱 현대화 결과 보기. (2) | 2026.03.10 |