billcorea.com
빌코리아의 홈페이지 입니다.
2026/05/11
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
#스하리1000명프로젝트,
कभी-कभी विदेशी कामगारों से बात करना कठिन होता है, है ना?
मैंने एक सरल ऐप बनाया है जो मदद करता है! आप अपनी भाषा में लिखते हैं, और दूसरे इसे अपनी भाषा में देखते हैं।
यह सेटिंग्स के आधार पर स्वचालित अनुवाद करता है।
आसान चैट के लिए बहुत उपयोगी। जब मौका मिले तो देख लेना!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
오늘의 이야기
#billcorea #운동동아리관리앱
🏸 Schneedle, aplikasi mesti ada untuk kelab badminton!
👉 Main Perlawanan – Rekod Markah & Cari Lawan 🎉
Sesuai untuk mana-mana sahaja, bersendirian, bersama rakan-rakan atau dalam kelab! 🤝
Jika anda suka badminton, pasti mencubanya
Pergi ke aplikasi 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
오늘의 이야기
#스하리1000명프로젝트,
A volte è difficile parlare con i lavoratori stranieri, vero?
Ho realizzato una semplice app che aiuta! Scrivi nella tua lingua e gli altri lo vedono nella loro.
Si traduce automaticamente in base alle impostazioni.
Super pratico per chat facili. Dai un'occhiata quando ne hai la possibilità!
https://play.google.com/store/apps/details?id=com.billcoreatech.multichat416
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
#스하리1000명프로젝트
오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데,
내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이
있으면 수집하고, 카카오톡으로 친구에게 전달해 주는 기능을 구현해 줄꺼야. 📲
이번 패치에서는 하루 한번 지정한 시간에 나에게 알림(노티) 하도록 기능을 추가 했어. 🙏
한번 써보고 불편한 거 있으면 말해줘.
앱 바로가기
👉 https://play.google.com/store/apps/details?id=com.nari.notify2kakao
오늘의 이야기
자기 성찰 타로 상담 앱 실행 로드맵 (MVP 기준, AI 적용준비 포함)
1) 제품 방향
- 제품 한 줄 정의: 예언이 아니라, 사용자의 감정과 생각을 비추는 자기 성찰형 타로 상담 앱
- 앱 목표: 카드 해석, 상담형 질문, 저널 기록, 치유 메시지를 통해 감정 탐색과 정서적 안정을 돕는다.
- 핵심 사용자: 감정 정리가 필요한 사용자, 가벼운 셀프 상담을 원하는 사용자, 타로를 심리적 도구로 쓰고 싶은 사용자
- 핵심 가치: 자기 성찰, 정서적 안정, 기록 습관, 감정 탐색, 치유 경험
2) MVP 범위 (필수)
- 랜덤 카드 추출 (공정한 무작위 셔플)
- 스프레드: 1장 / 3장 우선 구현
- 해석 엔진: 카드 의미 + 사용자 질문 맥락 기반 상담 메시지 생성
- 저널링: 상담 내용 저장/조회, 회고 기록
- 세션 종료 치유 콘텐츠: 긍정 확언(Affirmation), 명상/호흡 메시지
3) 사용자 경험 흐름
- 홈에서 오늘의 질문 선택
- 스프레드 선택 후 카드 추출
- 카드 해석 + 공감형 상담 메시지 확인
- 후속 질문에 사용자 응답 입력
- 저널 저장
- 확언/명상 메시지 확인 후 세션 종료
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 -> ReadingDetailNavigation 기본 흐름 구현 - 앱 시작 시
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 순서)
- Route/인자 표 확정
- Draw/Reading 상태 모델 고정
- 리딩 결과 화면 최소 스펙(카드/요약/다음 액션) 잠금
- 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요소 고정: 선택 카드 썸네일, 요약 텍스트(2
4줄), 다음 액션 버튼(12개) - P1 이관 항목 분리: 심화 해석/부가 텍스트
- 빈 상태/오류 상태 문구 확정
- 필수 UI 3요소 고정: 선택 카드 썸네일, 요약 텍스트(2
- 산출물: 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도입으로TarotViewModelJVM 단위 테스트 가능 구조로 정리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.ktCardDetailBlock: 영문 카드명 중복 표시 버그 수정 →cardNameKo우선 주 타이틀, 영문명은 부제목으로 분리 -
TarotSummaryScreen.kt: 홈 화면 Journal 직접 이동 버튼 복원 (EditNote아이콘, 3 Card Spread 아래 배치) -
TarotSessionFlowScreens.kt: 미사용SimpleTodoScreen제거 -
TarotReadingScreens.kt: 미사용 privateDetailCard제거 -
TarotViewModel.kt: 미사용 publicobserveJournalDetail/clearSessionError제거 -
TarotViewModel.ktbuildReadingSummary: 카드명을cardNameKo우선 사용으로 리딩 요약 문구 한국어화
17) 온디바이스 AI Edge/MediaPipe LLM 적용 계획 (2026-03-20)
17-1) 요구사항 체크리스트 (사용자 요청 5개)
- Google AI Edge / MediaPipe LLM 적용
- 사용자가 입력한 오늘의 질문 이해(의도/주제 파악)
- 질문과 카드
keywords/meanings연관도 기반 카드 선택
- 질문과 카드
- 선택 카드 해석 메시지 생성
- 리딩 종료 후 선택 카드
meanings기반 확언 문장 생성
- 리딩 종료 후 선택 카드
17-2) 단계별 실행 (준비 -> 설계 -> 구현 -> 검증 -> 배포)
- 준비
- AI Edge/MediaPipe LLM 의존성/ABI/최소 기기 제약 확인
MainActivityIMMEDIATE 업데이트 플로우와 AI 초기화 순서 충돌 방지 정책 확정
- 설계
ai패키지에 엔진 인터페이스(TarotAiService) + 폴백 엔진 정의- 질문 분석 -> 카드 점수화 -> 해석 생성 -> 확언 생성 파이프라인 설계
- 구현
TarotViewModel.drawCards()에 질문 기반 카드 선택 적용- 리딩 요약/해석 메시지를 AI 서비스 출력으로 전환
- 명상 마무리 화면 확언을 AI 생성 결과 우선 사용
- 검증
- JVM 테스트: 질문-카드 매칭, 해석 문구, 확언 생성, AI 실패 시 폴백 회귀
- 성능 기준: 추론/생성 체감 지연과 로딩 UX 점검
- 배포
- 기능 플래그로 단계적 활성화(폴백 엔진 기본값 유지)
- IMMEDIATE 업데이트 취소/실패 시 AI 기능 안전 비활성화 시나리오 점검
17-3) 산출물
working_plan.mdAI 도입 계획 + 진행 체크리스트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) 사용자 경험 흐름
- 홈에서 오늘의 질문 선택
- 스프레드 선택 후 카드 추출
- 카드 해석 + 공감형 상담 메시지 확인
- 후속 질문에 사용자 응답 입력
- 저널 저장
- 확언/명상 메시지 확인 후 세션 종료
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 -> ReadingDetailNavigation 기본 흐름 구현 - 앱 시작 시
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 순서)
- Route/인자 표 확정
- Draw/Reading 상태 모델 고정
- 리딩 결과 화면 최소 스펙(카드/요약/다음 액션) 잠금
- 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요소 고정: 선택 카드 썸네일, 요약 텍스트(2
4줄), 다음 액션 버튼(12개) - P1 이관 항목 분리: 심화 해석/부가 텍스트
- 빈 상태/오류 상태 문구 확정
- 필수 UI 3요소 고정: 선택 카드 썸네일, 요약 텍스트(2
- 산출물: 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도입으로TarotViewModelJVM 단위 테스트 가능 구조로 정리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.ktCardDetailBlock: 영문 카드명 중복 표시 버그 수정 →cardNameKo우선 주 타이틀, 영문명은 부제목으로 분리 -
TarotSummaryScreen.kt: 홈 화면 Journal 직접 이동 버튼 복원 (EditNote아이콘, 3 Card Spread 아래 배치) -
TarotSessionFlowScreens.kt: 미사용SimpleTodoScreen제거 -
TarotReadingScreens.kt: 미사용 privateDetailCard제거 -
TarotViewModel.kt: 미사용 publicobserveJournalDetail/clearSessionError제거 -
TarotViewModel.ktbuildReadingSummary: 카드명을cardNameKo우선 사용으로 리딩 요약 문구 한국어화
17) 온디바이스 AI Edge/MediaPipe LLM 적용 계획 (2026-03-20)
17-1) 요구사항 체크리스트 (사용자 요청 5개)
- Google AI Edge / MediaPipe LLM 적용
- 사용자가 입력한 오늘의 질문 이해(의도/주제 파악)
- 질문과 카드
keywords/meanings연관도 기반 카드 선택
- 질문과 카드
- 선택 카드 해석 메시지 생성
- 리딩 종료 후 선택 카드
meanings기반 확언 문장 생성
- 리딩 종료 후 선택 카드
17-2) 단계별 실행 (준비 -> 설계 -> 구현 -> 검증 -> 배포)
- 준비
- AI Edge/MediaPipe LLM 의존성/ABI/최소 기기 제약 확인
MainActivityIMMEDIATE 업데이트 플로우와 AI 초기화 순서 충돌 방지 정책 확정
- 설계
ai패키지에 엔진 인터페이스(TarotAiService) + 폴백 엔진 정의- 질문 분석 -> 카드 점수화 -> 해석 생성 -> 확언 생성 파이프라인 설계
- 구현
TarotViewModel.drawCards()에 질문 기반 카드 선택 적용- 리딩 요약/해석 메시지를 AI 서비스 출력으로 전환
- 명상 마무리 화면 확언을 AI 생성 결과 우선 사용
- 검증
- JVM 테스트: 질문-카드 매칭, 해석 문구, 확언 생성, AI 실패 시 폴백 회귀
- 성능 기준: 추론/생성 체감 지연과 로딩 UX 점검
- 배포
- 기능 플래그로 단계적 활성화(폴백 엔진 기본값 유지)
- IMMEDIATE 업데이트 취소/실패 시 AI 기능 안전 비활성화 시나리오 점검
17-3) 산출물
working_plan.mdAI 도입 계획 + 진행 체크리스트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명프로젝트,
Perso in Corea? Anche se non parli coreano, questa app ti aiuta a muoverti facilmente.
Parla semplicemente la tua lingua: traduce, cerca e mostra i risultati nella tua lingua.
Ottimo per i viaggiatori! Supporta oltre 10 lingue tra cui inglese, giapponese, cinese, vietnamita e altre.
Provalo adesso!
https://play.google.com/store/apps/details?id=com.billcoreatech.opdgang1127
2026/05/10
오늘의 이야기
#스치니1000프로젝트 #재미 #행운기원 #Compose #Firebase
🎯 야 너 토요일마다 로또 확인하냐?
나도 맨날 “혹시나~” 하면서 봤거든 ㅋㅋ
근데 이제는 그냥 안 해
AI한테 맡겼어 🤖✨
그것도 구글 Gemini로다가!
그래서 앱 하나 만들었지
👉 “로또 예상번호 by Gemini” 🎱
AI가 분석해서 번호 딱! 뽑아줌
그냥 보고 참고만 하면 됨
재미로 해도 좋고…
혹시 모르는 거잖아? 😏
https://play.google.com/store/apps/details?id=com.billcorea.gptlotto1127
오늘의 이야기
1️⃣ 퇴근 후 30분, 안드로이드 앱으로 월 30만 원 만드는 사이드 프로젝트
2️⃣ 30일 안에 첫 수익 나는 안드로이드 앱 만들기
3️⃣ 직장인 안드로이드 개발자의 첫 수익 앱 출시 로드맵
4️⃣ 다운로드 1,000으로 월 30만 원 만드는 수익형 앱 구조
5️⃣ 개발자 부업: 안드로이드 앱으로 첫 온라인 수익 만들기
6️⃣ 90일 안에 수익형 앱 3개 만드는 1인 개발 전략
7️⃣ AI + Kotlin: 개발 시간 50% 줄이는 안드로이드 개발 워크플로
8️⃣ ChatGPT로 만드는 안드로이드 앱: 7일 MVP 제작법
9️⃣ 망하지 않는 앱 아이디어 찾는 7가지 방법 (1인 개발자 편)
🔟 개발자가 만드는 자동 수익 앱 포트폴리오 전략
1️⃣1️⃣ 퇴근 후 만드는 안드로이드 앱 비즈니스
1️⃣2️⃣ 개발자는 왜 앱으로 돈을 못 벌까? 수익 구조의 모든 것
1️⃣3️⃣ 첫 안드로이드 앱으로 수익 만드는 현실적인 방법
1️⃣4️⃣ 하루 40분으로 앱 출시까지 가는 Kotlin 사이드 프로젝트
1️⃣5️⃣ 직장인 개발자의 앱 수익화 실전 가이드
1️⃣6️⃣ 1인 개발자를 위한 돈 되는 앱 아이디어 30개
1️⃣7️⃣ 플레이스토어 다운로드 1,000 만드는 앱 출시 전략
1️⃣8️⃣ 광고 수익 나는 안드로이드 앱 설계 방법
1️⃣9️⃣ 개발자 부업: 앱 하나로 첫 온라인 매출 만들기
2️⃣0️⃣ 0에서 시작하는 수익형 안드로이드 앱 만들기
💡 전자책이 잘 팔리는 제목 공식 (개발자 분야)
대부분 잘 팔리는 제목은 아래 3가지 패턴 중 하나입니다.
1️⃣ 기간형
- 7일
- 30일
- 90일
예
→ 30일 안에 첫 수익 앱 만들기
2️⃣ 시간 절약형
- 하루 30분
- 퇴근 후
예
→ 퇴근 후 30분 앱 비즈니스
3️⃣ 결과형
- 월 30만 원
- 다운로드 1,000
예
→ 다운로드 1,000으로 월 30만 원
🔥 만약 전자책 판매 가능성 기준으로 딱 1개만 고르라면
제가 가장 추천하는 제목은 이것입니다.
“퇴근 후 30분, 안드로이드 앱으로 월 30만 원 만드는 사이드 프로젝트”
이유
- 타겟 명확 (직장인 개발자)
- 시간 부담 낮음 (30분)
- 현실적인 수익 (30만 원)
→ 전자책에서 가장 클릭 잘 나오는 구조입니다.
오늘의 이야기
#billcorea #운동동아리관리앱
🏸 Schneedle, un'app indispensabile per i club di badminton!
👉 Match Play: registra punteggi e trova avversari 🎉
Perfetto ovunque, da solo, con gli amici o in un club! 🤝
Se ti piace il badminton, provalo sicuramente
Vai all'app 👉 https://play.google.com/store/apps/details?id=com.billcorea.matchplay
오늘의 이야기
#스하리1000명프로젝트 오늘 내가 만든앱 하나 알려주고 싶어, 이 앱은 알림수집기 라고 이름을 붙였는 데, 내 폰에 표시 되는 알림을 읽어서 내가 지정한 단어가 들어 있고, 지출기록을 남겨야 하는 알림이 있으면 수집하고, 카카오톡으로 친구에게...
-
이전 글에서 정리할 것처럼 java에서 kotlin으로 이전을 했습니다. 그러고 나서 보기 시작했는 데, DefaultSharedPrefernces의 사용할 수 없는 환경으로 변경이 된 것을 알게 되었습니다. 이전 prefs = Prefere...