ํ๋ก์ ํธ ์์
์ง์์
ํ๋ก์ ํธ๋ช
: TreeStudy (์๋ชฉ ํ์ฅ ์๋ณ/ํ์ต ๋๊ตฌ)
๋ชฉํ: ํ์ฅ์์ 10์ด ๋ด ํท๊ฐ๋ฆฌ๋ ์์ข
์ ๋น ๋ฅด๊ฒ ํ์ ํ ์ ์๋ ์คํ๋ผ์ธ ์ฐ์ ์ฑ
ํ์ฌ ๋จ๊ณ: Phase 1 ์งํ ์ค (์งํ๋ฅ 70%)
์๋ฃ ํญ๋ชฉ
- โ
ํ๋ก์ ํธ ์์ฑ (Android Studio, Kotlin, Min SDK 26)
- โ
Phase 1 ๋ฐ์ดํฐ ์์ฑ (species_phase1.json, 20์ข
)
- โ
assets ํด๋ ๊ตฌ์ฑ (lite ์ด๋ฏธ์ง 2์ฅ/์ข
)
- โ
๊ธฐ๋ณธ UI ํ๋ฆ (Home โ ๋ชฉ๋ก โ ์์ธ ํ๋ฉด)
- โ
JSON ํ์ฑ ๋ฐ ์์ข
ํ์ ์ ์ ๋์ ํ์ธ
- โ
๊ฒ์ ์๋์์ฑ ๊ตฌํ (์์ข
๋ช
/๋ณ์นญ/ID ๋งค์นญ + ์ ์ ๊ธฐ๋ฐ ์ ๋ ฌ, ์ต๋ 12๊ฐ)
- โ
โ์ต๊ทผ ๋ณธ(์ต๋ 10๊ฐ)โ ๊ธฐ๋ก/ํ์ ๊ธฐ๋ฅ ๊ตฌํ (RecentStore + collectAsState)
- โ
์นดํ
๊ณ ๋ฆฌ 4ํ์ผ(2x2) ๋ฉ์ธ UI ์ ์ฉ (๋ํ ์ด๋ฏธ์ง ์ค๋ฒ๋ ์ด + ๋ผ์ด๋ ์ฒ๋ฆฌ)
- โ
Category enum/๋ชจ๋ธ ํ์
์ถฉ๋ ์ด์ ํด๊ฒฐ (Category? โ String ๋น๊ต ์ค๋ฅ ์ ๋ฆฌ ์๋ฃ)
- โ
์นดํ
๊ณ ๋ฆฌ ํ์ผ ์ด๋ฏธ์ง ๋ฆฌ์์ค ์ฐ๋ ์๋ฃ (res/drawable + ํ์ผ๋ช
๊ท์น ์ ์ฉ)
- โ
๋คํฌ/๋ผ์ดํธ ํ
๋ง ์ ํ UX ๊ฐ์ (ํด/๋ฌ ์์ด์ฝ ์ ์ฉ, ์ ํ ์ดํํธ ์ด์ง๊ฐ ์ํ)
- โ
์นดํ
๊ณ ๋ฆฌ ์นด๋ ํ
์คํธ ์ฒ๋ฆฌ ๋ณ๊ฒฝ (๋ฐํฌ๋ช
์นฉ ์ ๊ฑฐ โ ํฐ ํ
์คํธ + Shadow๋ก ๊ฐ๋
์ฑ ํ๋ณด)
- โ
์นดํ
๊ณ ๋ฆฌ ์นด๋ ํ๋จ ์คํฌ๋ฆผ(๊ทธ๋ผ๋ฐ์ด์
) ๋ณด๊ฐ์ผ๋ก ํ
์คํธ ๊ฐ๋
์ฑ ์์ ํ
- โ
์นดํ
๊ณ ๋ฆฌ ์นด๋ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ์ผ๋ถ ๊ต์ฒด ์๋ฃ (ํ์ฝ ๊ต๋ชฉ / ๊ด๋ชฉยท์กฐ๊ฒฝ)
- โ
์นดํ
๊ณ ๋ฆฌ ํ๋ฉด ์๋จ ํ์ดํ ํ
์คํธ ์ ๊ฑฐ/์ ๋ฆฌ(TopAppBar title ๊ณต๋ฐฑ ์ฒ๋ฆฌ)
- โ
์นดํ
๊ณ ๋ฆฌ ๋ฐฐ๋ ์ด๋ฏธ์ง ํ์ ์ ์ฉ(์นดํ
๊ณ ๋ฆฌ๋ณ R.drawable webp ๋งคํ + ์ค๋ฒ๋ ์ด ์ ์ฉ)
- โ
์ธ๊ทธ๋จผํธ UI ์ ๋ฆฌ(์ ์ฒด ์ธ๊ณฝ ํ
๋๋ฆฌ ์ ๊ฑฐ, ์ฒดํฌ ์์ด์ฝ ์ ๊ฑฐ, ๋ฒํผ ๊ฒฝ๊ณ๋ง ์ ์ง)
- โ
์ปดํฌ์ ๋ธ ์์น ์ ๋ฆฌ ๋ฐ ์ฐธ์กฐ ์ค๋ฅ ํด๊ฒฐ(CategoryBanner/CategorySegment๋ฅผ CategoryScreen.kt์ ๊ณ ์ , R import๋ก drawable ์ฐธ์กฐ ์ค๋ฅ ํด์)
- โ
์นดํ
๊ณ ๋ฆฌ ํ๋ฉด ๋ ์ด์์/์ฌ๋ฐฑ 1์ฐจ ์ ๋(๋ฐฐ๋+์ธ๊ทธ๋จผํธ+๋ฆฌ์คํธ ํ๋ฆ ์์ ํ)
// ------------------------------------------ //
// ------------------------------------------ //
1. ํ๋ก์ ํธ ๊ฐ์
ํต์ฌ ๊ฐ์น
- ์คํ๋ผ์ธ์์ ๋น ๋ฅด๊ฒ ๋์ (๋ก๋ฉ/๊ฒ์ ์ต์ํ)
- ์ผ์ธ ๊ฐ๋
์ฑ ์ฐ์ (ํฐ ๊ธ์จ/ํฐ ๋ฒํผ/๊ณ ๋๋น)
- ์ต์ ์ ๋ณด๋ก ํ๋ณ ์ง์ (์นดํ
๊ณ ๋ฆฌ โ ๊ฒ์ โ ์์ธ โ ๋น๊ต)
์ฑ๊ณต ๊ธฐ์ค (Phase 1)
- Lite ์ฑ 50MB ์ดํ (์ข
๋น ์ด๋ฏธ์ง 2์ฅ๋ง ๋ด์ฅ)
- ์คํ๋ผ์ธ ์ํ์์ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ
- ํต์ฌ ํ๋ณ ํฌ์ธํธ๋ก 10์ด ๋ด ์ข
ํ์ ๊ฐ๋ฅ
๊ธ์ง ์ฌํญ
- ์กฐ์ฌ ๋ชฉ๋ก ๋ณ๋ ์ ์ฅ/๋ด๋ณด๋ด๊ธฐ ๊ธฐ๋ฅ (์ค๋ฌด ํ๋ซํผ๊ณผ ์ค๋ณต, ํ๋ฆ ์
ํ)
- Pro ์ ๋์ฉ ๋ธ๋ฌ/๊ฐ๋ฆผ UI (๋์ UI ๊ธ์ง)
- localStorage/sessionStorage ์ฌ์ฉ (์ง์ ์ ๋จ)
// ------------------------------------------ //
// ------------------------------------------ //
2. Phase ๊ตฌ๋ถ ๋ฐ ์งํ ์ํฉ
Phase 1 (ํ์ฌ ์งํ ์ค)
๋ชฉํ
- Top 20 ์์ข
ํ์ฌ
- Lite(2์ฅ/์ข
) + Fullํฉ ๋ค์ด๋ก๋ ๊ตฌ์กฐ
- ๊ธฐ๋ณธ ๊ฒ์(์์ข
๋ช
/๋ณ์นญ), ์นดํ
๊ณ ๋ฆฌ, ์์ธ, ๋น๊ต, ์ต๊ทผ๋ณธ
์งํ ์ค ์์
- ํ๊ธ๋ช
ํ์ (name_ko ํ๋ ์ถ๊ฐ)
- ๊ฒ์ ๊ธฐ๋ฅ ๊ตฌํ (์๋์์ฑ)
- ๋น๊ต ํ๋ฉด (2์ข
๊ณ ์ )
๋ธ๋ก์ปค/์ด์
- JSON ์ฃผ์ ํ์ฑ ์คํจ โ ํด๊ฒฐ ์๋ฃ (์ฃผ์ ์ ๊ฑฐ)
- ์๋ ์์ข
๋ฐ์ดํฐ PASS ์ฒ๋ฆฌ ํ์
Phase 2 (์์ )
์ถ๊ฐ ๊ธฐ๋ฅ
- Top 50 ์์ข
ํ๋
- ๋น๊ต์ ํ์ฅ (์นจ์ฝ/๊ณผ์ค/๊ด๋ชฉ ํผ๋๊ตฐ)
- ์ฑํฌ ์คํฌ๋กค ๋น๊ต (์ข์ฐ ๋๊ธฐํ)
- ํํ ํํฐ ์นฉ (ํ๊ทธ ํ์ง ๊ฒ์ฆ ํ)
Phase 3 (๊ณํ)
๊ณ ๊ธ ๊ธฐ๋ฅ
- ๋ด ์ฌ์ง ์ดฌ์ ํ ๋๊ฐ ์ฌ์ง๊ณผ ๋๋ํ ๋น๊ต
- ๋ฆฌํฌํธ ๋ด๋ณด๋ด๊ธฐ (PDF/Excel)
- ๊ด๊ณ /ํ์/ํ๋ก๋ชจ์
์ ๊ตํ
// ------------------------------------------ //
// ------------------------------------------ //
3. ๊ฐ๋ฐ ์คํ
ํ์ ํ๋ฉด 5๊ฐ
1) Splash
2) Home
- ์๋จ: ํฐ ๊ฒ์๋ฐ (๊ณ ์ )
- ๋ณธ๋ฌธ: ์นดํ
๊ณ ๋ฆฌ ์นด๋ (์นจ์ฝยท์๋ก / ๊ณผ์คยท์ด๋งค / ํ์ฝ ๊ต๋ชฉ / ๊ด๋ชฉยท์กฐ๊ฒฝ)
- ์น์
: ์ต๊ทผ ๋ณธ (์ต๋ 10๊ฐ, 30์ผ ๋ณด๊ด)
3) Category List
- ์นด๋/๋ฆฌ์คํธ: ์ธ๋ค์ผ + ์์ข
๋ช
(ํฐ ๊ธ์จ)
- ์ ๋ ฌ: ๋น์ถ์ (rank ๊ธฐ์ค)
4) Species Detail
- ์๋จ: ๋ํ ์ฌ์ง (habit)
- ํต์ฌ ํ๋ณ ํฌ์ธํธ 3~5์ค
- ์ฌ์ง ์น์
: habit / leaf / bark / fruit (ํญ/๊ทธ๋ฆฌ๋)
- Lite๋ 2์ฅ๋ง, ๋๋จธ์ง๋ "Full ํฉ ํ์" ์ฌ๋กฏ ํ์
- ๋ฒํผ: [์ ์ฌ์ข
๋น๊ต] [์ฆ๊ฒจ์ฐพ๊ธฐ]
- ์ด๋ฏธ์ง ๋ทฐ์ด: ํ์น ์ค ํ์
5) Compare (2์ข
๋น๊ต)
- A vs B ๊ณ ์
- ๊ฒฐ์ ํ 1์ค + ํํธ๋ณ ์ฐจ์ด ํฌ์ธํธ
- ์ฌ์ง ํญ๋ชฉ๋ณ ๋๋ํ ํ์
- ํ๋จ: "์ด๊ฒ๋ ๋น์ทํด์" ์นฉ (3~5๊ฐ, ์ํด๋ฆญ ๊ต์ฒด)
๋ฐ์ดํฐ ์คํค๋ง
species.json
[
{
"id": "persimmon",
"name_ko": "๊ฐ๋๋ฌด",
"aliases": ["๊ฐ", "๊ฐ๋๋ฌด"],
"category": "FRUIT_TREE",
"rank": 1,
"key_points": [
"ํ๋ณํฌ์ธํธ 1",
"ํ๋ณํฌ์ธํธ 2",
"ํ๋ณํฌ์ธํธ 3"
],
"similar_ids": ["jujube"],
"images": {
"thumb": "thumbs/persimmon.webp",
"lite": {
"habit": "habit.webp",
"detail": "detail.webp"
},
"full": {
"habit": ["packs/full/persimmon/habit_01.webp"],
"leaf": ["packs/full/persimmon/leaf_01.webp"],
"bark": ["packs/full/persimmon/bark_01.webp"],
"fruit": ["packs/full/persimmon/fruit_01.webp"]
}
}
}
]
๊ฒฝ๋ก ๊ท์น:
- Android assets ๋ด๋ถ์์๋ assets/ ์ ๋์ด ์์ด ์ ๊ทผ
- lite ์ด๋ฏธ์ง๋ ํ์ผ๋ช
๋ง ์ ์ฅ (์ฑ์์ lite/${id}/${ํ์ผ๋ช
} ์กฐํฉ)
- thumb๋ thumbs/${id}.webp ๊ฒฝ๋ก
- JSON์ ํ์ค JSON๋ง ํ์ฉ (์ฃผ์/ํธ๋ ์ผ๋ง ์ฝค๋ง ๊ธ์ง)
- ID๋ ํด๋๋ช
๊ณผ 100% ๋์ผํด์ผ ํจ (๋์๋ฌธ์ ํฌํจ)
- ๋ฌธ์ ํ/JSON/ํด๋๋ช
3๊ฐ ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด PASS ์ฒ๋ฆฌ
comparisons.json
[
{
"id": "thuja_vs_juniper",
"a": "thuja",
"b": "juniper",
"title": "์ธก๋ฐฑ๋๋ฌด vs ํฅ๋๋ฌด",
"decisive": "๊ฒฐ์ ํ 1์ค ์ค๋ช
",
"points": {
"leaf": ["์ฐจ์ด์ 1", "์ฐจ์ด์ 2"],
"bark": ["์ฐจ์ด์ 1"],
"fruit": ["์ฐจ์ด์ 1"],
"habit": ["์ฐจ์ด์ 1"]
}
}
]
๋น๊ต ์นด๋ ๋
ธ์ถ ๊ท์น:
- a์ b ์์ข
์ด ๋ ๋ค ์กด์ฌํ ๋๋ง ๋
ธ์ถ
- ํ๋๋ผ๋ ์์ผ๋ฉด ์๋ ์จ๊น (Phase 2์์ ์ข
์ถ๊ฐ ์ ์๋ ํ์ฑํ)
ํด๋ ๊ตฌ์กฐ
Lite (์ฑ ๋ด์ฅ)
app/src/main/assets/
โโโ data/
โ โโโ species_phase1.json
โโโ lite/
โ โโโ <species_id>/
โ โโโ habit.webp
โ โโโ detail.webp
โโโ thumbs/
โโโ <species_id>.webp
Full Pack (๋ค์ด๋ก๋/์คํ๋ผ์ธ)
packs/full/<species_id>/
โโโ habit_01.webp
โโโ leaf_01.webp
โโโ bark_01.webp
โโโ fruit_01.webp
์นดํ
๊ณ ๋ฆฌ Enum (๊ณ ์ ํค)
CONIFER_EVERGREEN - ์นจ์ฝยท์๋ก
FRUIT_TREE - ๊ณผ์คยท์ด๋งค
BROADLEAF_TREE - ํ์ฝ ๊ต๋ชฉ
SHRUB_LANDSCAPE - ๊ด๋ชฉยท์กฐ๊ฒฝ
์ปดํฌ๋ํธ ์ฐ์ ์์
P0 (ํ์)
- ๋ก์ปฌ ๋ฐ์ดํฐ ๋ก๋ฉ (JSON)
- ๊ฒ์ (์์ข
๋ช
+ ๋ณ์นญ) + ์๋์์ฑ
- ์ต๊ทผ ๋ณธ ๊ธฐ๋ก (๋ก์ปฌ ์ ์ฅ, ์ต๋ 10๊ฐ, 30์ผ ๋ณด๊ด)
- ์์ธ ํ์ด์ง ์ด๋ฏธ์ง ํ์น ์ค (๊ตฌํ: Transformable ๊ธฐ๋ณธ ์ฐ์ )
- ๋น๊ต ๊ธฐ๋ฅ (2์ข
) + ์กฐ๊ฑด๋ถ ๋
ธ์ถ
- Lite/Full ํฉ ๊ฒฝ๋ก ๋ถ๋ฆฌ + ์ฌ๋กฏ ํ์
P1 (๊ถ์ฅ)
- ์ฆ๊ฒจ์ฐพ๊ธฐ (๋ก์ปฌ)
- ๋ค์ด๋ก๋ ํฉ UI (Wi-Fi ๊ถ์ฅ/์ฉ๋ ํ์/์งํ๋ฅ /์ฌ์๋)
P2 (ํ์์)
- ์ฑํฌ ์คํฌ๋กค ๋น๊ต
- ํํ ํํฐ ์นฉ
- ๋ด ์ฌ์ง ์ดฌ์ ๋น๊ต
- ๋ฆฌํฌํธ ๋ด๋ณด๋ด๊ธฐ
๋ฐ์ดํฐ ์๋ํ ์คํฌ๋ฆฝํธ ์๊ตฌ์ฌํญ
์
๋ ฅ ํด๋ (์๋ณธ)
raw/<species_id>/
โโโ habit/*.jpg
โโโ leaf/*.jpg
โโโ bark/*.jpg
โโโ fruit/*.jpg
์ถ๋ ฅ
- Lite ์ด๋ฏธ์ง (2์ฅ/์ข
) + ์ธ๋ค์ผ ์์ฑ
- Full ์ด๋ฏธ์ง WebP ๋ณํ
- species.json ๊ฒฝ๋ก ์๋ ๊ฐฑ์
- Validator ๋ฆฌํฌํธ (๋๋ฝ/์คํ/๊ท์น ์๋ฐ)
Validator ํ์ ์ฒดํฌ ํญ๋ชฉ
- species.json id โ ํด๋ ์กด์ฌ ์ฌ๋ถ ์ผ์น
- Lite ํ์ 2์ฅ (habit + detail) ๋๋ฝ ํ์ง
- ํ์ผ๋ช
๊ท์น ์๋ฐ ํ์ง
- ์ค๋ณต/0๋ฐ์ดํธ/์์ ํ์ผ ์ฒดํฌ
- EXIF ์ ๊ฑฐ ์ฌ๋ถ ํ์ธ
// ------------------------------------------ //
// ------------------------------------------ //
4. ์์
๋ก๊ทธ (์ต์ ์)
2026-02-15
์๋ฃ
- Android Studio ์ ํ๋ก์ ํธ ์์ฑ
- App: TreeStudy
- Package: com.reuno.treestudy
- Min SDK: 26, Kotlin DSL
- ์ค๊ธฐ๊ธฐ(A33) Run ํ์ธ OK
- Phase 1 ๋ฐ์ดํฐ ์์ฑ (PC)
- species_phase1.json ์์ฑ
- assets/lite// ์ด๋ฏธ์ง 2์ฅ ์ธํธ ๊ตฌ์ฑ
- ์ฑ assets ๊ตฌ์ฑ (Android)
- ๊ฒฝ๋ก: app/src/main/assets/
- data/species_phase1.json
- lite//
- MVP UI ํ๋ฆ ์๋ฃ
- Home: Phase 1 ์์ข
๋ชฉ๋ก ํ์
- ๋ชฉ๋ก โ ์์ธ ์ง์
- ์์ธ: habit 1์ฅ + detail 1์ฅ ํ์ ์ฑ๊ณต
์์
- JSON ์ฃผ์ ์ ๊ฑฐ
- ์์ธ: species_phase1.json ์๋จ // ์ฃผ์์ผ๋ก ํ์ฑ ์คํจ
- ์กฐ์น: ์ฃผ์ ์ ๊ฑฐ โ ์ ์ ๋ก๋ฉ
Next
- ํ๊ธ๋ช
ํ์ ํ๋ ์ถ๊ฐ (name_ko)
- ๊ฒ์ ๊ธฐ๋ฅ (์๋์์ฑ) 1์ฐจ ๊ตฌํ
- ๋น๊ต ๊ธฐ๋ฅ (comparisons_phase1.json ํฌ๋งท ํ์ )
- ์ธ๋ค์ผ ์ ์ฉ ๊ฒํ
// ------------------------------------------ //
// ------------------------------------------ //
5. ๋ถ๋ก
Top 20 ์์ข
(Phase 1)
| ์์ |
ํ๊ธ๋ช
|
ID (์๋ฌธ) |
์นดํ
๊ณ ๋ฆฌ |
| 1 |
๊ฐ๋๋ฌด |
persimmon |
FRUIT_TREE |
| 2 |
์๋๋ฌด |
pine |
CONIFER_EVERGREEN |
| 3 |
๋์ถ๋๋ฌด |
jujube |
FRUIT_TREE |
| 4 |
๋จํ๋๋ฌด |
maple |
BROADLEAF_TREE |
| 5 |
๋งค์ค๋๋ฌด |
maesil_plum |
FRUIT_TREE |
| 6 |
๋ฐฐ๋๋ฌด |
pear |
FRUIT_TREE |
| 7 |
๋ณต์ญ์๋๋ฌด |
peach |
FRUIT_TREE |
| 8 |
์ฌ์ฒ ๋๋ฌด |
euonymus_japonicus |
SHRUB_LANDSCAPE |
| 9 |
์๋๋๋ฌด |
plum |
FRUIT_TREE |
| 10 |
๋ฝ๋๋ฌด |
mulberry |
FRUIT_TREE |
| 11 |
์์ฐํ |
azalea_youngsan |
SHRUB_LANDSCAPE |
| 12 |
์ฌ๊ณผ๋๋ฌด |
apple |
FRUIT_TREE |
| 13 |
๋ฌด๊ถํ |
rose_of_sharon |
SHRUB_LANDSCAPE |
| 14 |
์๋ก๋์ |
aronia |
FRUIT_TREE |
| 15 |
์ฃผ๋ชฉ |
yew |
CONIFER_EVERGREEN |
| 16 |
ํฅ๋๋ฌด |
juniper |
CONIFER_EVERGREEN |
| 17 |
๋๋ฆ
๋๋ฌด |
angelica_tree |
BROADLEAF_TREE |
| 18 |
์ธก๋ฐฑ๋๋ฌด |
thuja |
CONIFER_EVERGREEN |
| 19 |
์ฅ๋ฏธ |
rose |
SHRUB_LANDSCAPE |
| 20 |
ํฌ๋๋๋ฌด |
grapevine |
FRUIT_TREE |
Top 50 ์์ข
(Phase 2 ํ์ฅ)
A) ๊ณผ์คยท์ด๋งค (17์ข
)
- ๊ฐ๋๋ฌด (1122)
- ๋์ถ๋๋ฌด (1038)
- ๋งค์ค๋๋ฌด (752)
- ๋ฐฐ๋๋ฌด (740)
- ๋ณต์ญ์๋๋ฌด (674)
- ์๋๋๋ฌด (474)
- ๋ฝ๋๋ฌด (470)
- ์ฌ๊ณผ๋๋ฌด (445)
- ์๋ก๋์ (394)
- ํฌ๋๋๋ฌด (338)
- ์ต๋๋๋ฌด (292)
- ๋ณด๋ฆฌ์ (306)
- ์ค๊ฐํผ (272)
- ๋ชจ๊ณผ (270)
- ์ด๊ตฌ๋๋ฌด (253)
- ๋ธ๋ฃจ๋ฒ ๋ฆฌ (238)
- ํธ๋๋๋ฌด (207)
B) ์นจ์ฝยท์๋ก (10์ข
)
- ์๋๋ฌด (1043)
- ์ฃผ๋ชฉ (370)
- ํฅ๋๋ฌด (361)
- ์ธก๋ฐฑ๋๋ฌด (339)
- ์ํ๋๋ฌด (282)
- ๋ฐ์ก (272)
- ์๋ฉ๋๋๊ทธ๋ฆฐ (209)
- ๋
ธ๊ฐ์ฃผ๋๋ฌด (์ถ๊ฐ/๊ต์ฒด)
- ํธ๋ฐฑ๋๋ฌด (์ถ๊ฐ/๊ต์ฒด)
- ์ ๋๋ฌด (์ถ๊ฐ/๊ต์ฒด)
C) ํ์ฝ ๊ต๋ชฉ (8์ข
)
- ๋จํ๋๋ฌด (772)
- ๋๋ฆ
๋๋ฌด (359)
- ๋๋ฆ
๋๋ฌด (266)
- ์ป๋๋ฌด (238)
- ๋ํฐ๋๋ฌด (222)
- ๊ฐ์ฃฝ๋๋ฌด (211)
- ์ฐ์์ (206)
- ๋ฒ๋๋๋ฌด (157)
D) ๊ด๋ชฉยท์กฐ๊ฒฝยทํ๋ชฉ (12์ข
)
- ์ฌ์ฒ ๋๋ฌด (479)
- ์์ฐํ (461)
- ๋ฌด๊ถํ (431)
- ์ฅ๋ฏธ (338)
- ํ์๋ชฉ (318)
- ๋จ์ฒ (281)
- ํ์ด๋๋ฌด (209)
- ๋ผ์ผ๋ฝ (205)
- ์ฒ ์ญ (205)
- ์ฐ๋ธ๋๋ฌด (์ถ๊ฐ/๊ต์ฒด)
- ๊ฝ๊ฝ๋๋ฌด (์ถ๊ฐ/๊ต์ฒด)
- ํด๋นํ (113, 2์ฐจ ํ๋ณด)
// ------------------------------------------ //
๋น๊ต์ 10๊ฐ (Phase 1 ์ฐ์ )
Phase 1 ์ฆ์ ๋
ธ์ถ 5์ (Top 20 ๋ด ์์ชฝ ์กด์ฌ)
1. ์ธก๋ฐฑ๋๋ฌด vs ํฅ๋๋ฌด
2. ๋งค์ค๋๋ฌด vs ์๋๋๋ฌด
3. ์๋๋๋ฌด vs ๋ณต์ญ์๋๋ฌด
4. ์ฌ๊ณผ๋๋ฌด vs ๋ฐฐ๋๋ฌด
5. ๊ฐ๋๋ฌด vs ๋์ถ๋๋ฌด
Phase 2 ์ข
ํ์ (๋ฐ์ดํฐ๋ง ์ค๋น, ์๋ ์จ๊น)
6. ํฅ๋๋ฌด vs ๋
ธ๊ฐ์ฃผ๋๋ฌด
7. ์ฃผ๋ชฉ vs ๋
ธ๊ฐ์ฃผ๋๋ฌด
8. ์ธก๋ฐฑ๋๋ฌด vs ์๋ฉ๋๋๊ทธ๋ฆฐ
9. ์ ๋๋ฌด vs ๋
์ผ๊ฐ๋ฌธ๋น๋๋ฌด
10. ๋งค์ค๋๋ฌด vs ์ด๊ตฌ๋๋ฌด
๋
ธ์ถ ๊ท์น: Phase 1์์๋ ์ฆ์ ๋
ธ์ถ 5์๋ง ํ์ฑํ, ๋๋จธ์ง๋ ์ข
์ถ๊ฐ ์ ์๋ ํ์ฑํ
๋น๊ต์ 20๊ฐ ์ ์ฒด (ํ์ฅ)
์นจ์ฝ/์๋ก ํต์ฌ (9์)
- ์ธก๋ฐฑ๋๋ฌด vs ํฅ๋๋ฌด
- ํฅ๋๋ฌด vs ๋
ธ๊ฐ์ฃผ๋๋ฌด
- ์ธก๋ฐฑ๋๋ฌด vs ์๋ฉ๋๋๊ทธ๋ฆฐ
- ํฅ๋๋ฌด vs ์๋ฉ๋๋๊ทธ๋ฆฐ
- ์ฃผ๋ชฉ vs ํฅ๋๋ฌด
- ์ฃผ๋ชฉ vs ์ธก๋ฐฑ๋๋ฌด
- ์๋๋ฌด vs ๋ฐ์ก
- ์๋๋ฌด vs ์ฃ๋๋ฌด
- ์ ๋๋ฌด vs ํธ๋ฐฑ๋๋ฌด
๊ทธ๋ฃน: ์ธก๋ฐฑ/ํฅ๋๋ฌด/๋
ธ๊ฐ์ฃผ/์๋ฉ๋๋๊ทธ๋ฆฐ/์ฃผ๋ชฉ (2๊ฐ ์ ํ ๋น๊ต)
๊ณผ์คยท์ฅ๋ฏธ๊ณผ ํผ๋๊ตฐ (6์)
- ๋งค์ค๋๋ฌด vs ์ด๊ตฌ๋๋ฌด
- ๋งค์ค๋๋ฌด vs ์๋๋๋ฌด
- ์๋๋๋ฌด vs ๋ณต์ญ์๋๋ฌด
- ์ฒด๋ฆฌ๋๋ฌด vs ์ต๋๋๋ฌด
- ๊ฐ๋๋ฌด vs ๋์ถ๋๋ฌด
- ๋ฐฐ๋๋ฌด vs ํฅ๋ฐฐ๋๋ฌด
๊ด๋ชฉ/์กฐ๊ฒฝ ํผ๋๊ตฐ (5์)
- ํ์๋ชฉ vs ๊ฝ๊ฝ๋๋ฌด
- ์ฐ์์ vs ์ฐ๋ธ๋๋ฌด
- ์์ฐํ vs ์ฒ ์ญ
- ๋จ์ฒ vs ํ์ด๋๋ฌด
- ์ฌ๊ณผ๋๋ฌด vs ๋ฐฐ๋๋ฌด
// ------------------------------------------ //
// ------------------------------------------ //
๋ค์ด๋ก๋ํฉ ๊ตฌ์กฐ (์ ๋ฃํ ๋๋น)
๊ธฐ๋ณธ ์์น
- ํฉ์ ๋จ์ผ zip + manifest.json + ํด์(sha256)
- ๋ค์ด๋ก๋ โ ๊ฒ์ฆ โ ์์ถํด์ โ ์ค์น ์๋ฃ ๋งํน
- ๊ฒ์ฆ ์คํจ ์: ์ค์น ์ ๋จ ์ฒ๋ฆฌ (์์/๋ถ๋ถ ์ค์น ๋ฐฉ์ง)
ํฉ ๋จ์ (๊ถ์ฅ)
- Phase 1: Full Pack 1๊ฐ๋ก ์์
- Phase 2: ์นดํ
๊ณ ๋ฆฌ๋ณ ํฉ (์นจ์ฝยท์๋กํฉ / ๊ณผ์คํฉ / ์กฐ๊ฒฝยท๊ด๋ชฉํฉ)
- ๋ด๋ถ ๊ตฌ์กฐ๋ ๋ค์ค ํฉ ํ์ฅ ๊ฐ๋ฅํ๊ฒ ์ค๊ณ
์ ๋ฃ(Pro) ๊ตฌ์ฑ (์: 3,900์)
Lite (๋ฌด๋ฃ)
- ์ข
๋น 2~3์ฅ (habit + detail + fruit)
- ๋น๊ต ๊ธฐ๋ฅ ๋์ผ ์ ๊ณต
- ์คํ๋ผ์ธ์ Lite๋ง ๋ณด์ฅ
Pro (์ ๋ฃ)
- Full ์ฌ์งํฉ ์คํ๋ผ์ธ ์ ๊ณต
- ์ฌ์ง ์ ํ์ฅ (ํํธ๋ณ ๋ค์ฅ) + ์ค ์ต์ ํ
- ํฉ ์ค์น/์
๋ฐ์ดํธ/๋ณต๊ตฌ UX
- (Phase 2) ์ฑํฌ ์คํฌ๋กค ๋น๊ต ์ ์ฉ
// ------------------------------------------ //
// ------------------------------------------ //
๋ฌธ์ ์ด๋ ฅ
- v2.4 (2026-02-17): ํ ๊ฒ์๋ฐ ๐ท ์ฌ์ง์ธ์ ๋์
๊ธฐํ ํ์ (์ธ๋ถ ์ฌํญ์ ๊ฐ๋ณ Photo Recognition ๋ฌธ์ ์ฐธ์กฐ)
- v2.3 (2026-02-15): ์นดํ
๊ณ ๋ฆฌ ํ๋ฉด UI ์ ๋ฆฌ(TopAppBar ํ์ดํ ์ ๊ฑฐ/์ ๋ฆฌ), ์นดํ
๊ณ ๋ฆฌ ๋ฐฐ๋ ์ด๋ฏธ์ง(R.drawable.webp) ์ฐ๋ ๋ฐ ํ์ ์ ์ํ, ์ธ๊ทธ๋จผํธ ์ฒดํฌ ์์ด์ฝ ์ ๊ฑฐ ๋ฐ ์ธ๊ณฝ ํ
๋๋ฆฌ ์ ๊ฑฐ(๋ฒํผ ๊ฒฝ๊ณ๋ง ์ ์ง), CategoryBanner/CategorySegment ์์น ์ ๋ฆฌ(CategoryScreen.kt๋ก ์ ์ฐฉ), R.drawable ์ฐธ์กฐ/์ํฌํธ ์ด์ ํด๊ฒฐ
- v2.2 (2026-02-15): ๋คํฌ/๋ผ์ดํธ ํ
๋ง ์ ํ UX ์ ๋ฆฌ(ํด/๋ฌ ์์ด์ฝ), ์ ํ ์ดํํธ ์ด์ง๊ฐ ๊ฐ์ , ์นดํ
๊ณ ๋ฆฌ ์นด๋ ํ
์คํธ ์นฉ ์ ๊ฑฐ(ํ
์คํธ+์๋์ฐ๋ก ๋์ฒด), ์นด๋ ํ๋จ ์คํฌ๋ฆผ ๋ณด๊ฐ, ํ์ฝ/์กฐ๊ฒฝ ์นดํ
๊ณ ๋ฆฌ ๋ฐฐ๊ฒฝ ์ด๋ฏธ์ง ๊ต์ฒด
- v2.1 (2026-02-15): ๊ฒฝ๋ก ํ๊ธฐ ํต์ผ, ID/ํด๋๋ช
๊ท์น ๋ช
์, Phase1 ๋น๊ต 5์ ์ฐ์ ์์ ๋ช
ํํ
- v2.0 (2026-02-15): 5๊ฐ ์น์
์ฌ๊ตฌ์กฐํ, ์์ด์ฝ ์ต์ํ, ์ํ์ ๊ตฌ๋ถ ์ถ๊ฐ
- v1.0 (2026-02-14): ์ด์ ์์ฑ (ํฉ์/๋ณด๋ฅ/ํ๊ธฐ ๋ก๊ทธ ํฌํจ)