Today's

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

모바일 앱(안드로이드)

자기 성찰 타로 상담 앱기획 및 실행 문서

Billcorea 2026. 3. 19. 15:17

 

Android · Kotlin · Hilt · Room · Jetpack Compose

자기 성찰 타로 상담 앱
기획 및 실행 문서

이 문서는 자기 성찰과 마음 치유를 목표로 하는 안드로이드 앱의 실행계획, 앱 구조, 데이터베이스 설계, 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, 기록 습관, 공감형 메시지에 있습니다.

핵심 메시지: “예언이 아닌, 마음을 비추는 거울”
반응형