intentfinder-api / checklist.md
youngryong's picture
deploy: IntentFinder API (HF Docker Space)
21bdc64
|
Raw
History Blame Contribute Delete
4.09 kB
# checklist โ€” ๊ฒ€์ƒ‰ ์ธํ…ํŠธ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ
๋ชฉํ‘œ: ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ฒ€์ƒ‰ ์ธํ…ํŠธ๋ฅผ ๋ถ„์„ํ•˜๋Š” React ์›น ์„œ๋น„์Šค.
๋ฐฉ์‹: ์˜จ๋””๋งจ๋“œ + ์บ์‹ฑ. ๋ฐฑ์—”๋“œ Python(FastAPI), ํ”„๋ก ํŠธ React.
## 1๋‹จ๊ณ„ โ€” ๋ฐฑ์—”๋“œ ๊ณจ๊ฒฉ + ๋„ค์ด๋ฒ„ ์‹ค์‹œ๊ฐ„ (์™„๋ฃŒ)
- [x] `naver_collector.py` โ†’ `fetch_keywords()` ์žฌ์‚ฌ์šฉ (์‹œ๋“œ ํ•˜๋“œ์ฝ”๋”ฉ ์ œ๊ฑฐ)
- [x] `analyzer.py` โ€” ์›์‹œ df โ†’ Overview ์ง‘๊ณ„ (์ด๊ฒ€์ƒ‰๋Ÿ‰ยท๊ฒฝ์Ÿ๋ถ„ํฌยท์ค‘์•™๊ฐ’ยท์ƒ์œ„ ํ‚ค์›Œ๋“œ)
- [x] `cache.py` โ€” SQLite ์บ์‹œ (ํ‚ค์›Œ๋“œ+๋‚ ์งœ ๋‹จ์œ„, ์žฌ์กฐํšŒ ์ฆ‰์‹œ ๋ฐ˜ํ™˜)
- [x] `api.py` โ€” FastAPI `GET /analyze?keyword=` ์—”๋“œํฌ์ธํŠธ
- [x] ๋กœ์ปฌ ์‹คํ–‰ + ์ž„์˜ ํ‚ค์›Œ๋“œ ๊ฒ€์ฆ (๊ณจํ”„ 0.36s, ๊ฐ•์•„์ง€์‚ฌ๋ฃŒ 0.22s, ์บ์‹œ ์žฌ์กฐํšŒ 0.00s)
## 2๋‹จ๊ณ„ โ€” ์˜๋ฏธ ํด๋Ÿฌ์Šคํ„ฐ๋ง (์™„๋ฃŒ)
- [x] `sentence-transformers` + `umap-learn` + `hdbscan` ์„ค์น˜
- [x] S-BERT โ†’ UMAP(5D) โ†’ HDBSCAN(leaf) ํŒŒ์ดํ”„๋ผ์ธ (`clusterer.py`)
- [x] ๋…ธ์ด์ฆˆ(-1) ํ•„ํ„ฐ๋ง, ๊ทธ๋ฃน๋ณ„ ๊ฒ€์ƒ‰๋Ÿ‰ ์ง‘๊ณ„, `/analyze`์— ์—ฐ๊ฒฐ
- [x] ๊ฒ€์ฆ: ์บ ํ•‘์šฉํ’ˆ 37๊ฐœ ํด๋Ÿฌ์Šคํ„ฐ(์˜์ž/์ง€๊ฐ‘/์บ ํ•‘ํ…Œ์ด๋ธ”/์•ผ์ „์นจ๋Œ€/๋‚œ๋กœ๋ฅ˜ ๋“ฑ ์˜๋ฏธ ๊ตฐ์ง‘ํ™” ํ™•์ธ)
- [x] **2.5 ์‹œ๋“œ ๊ด€๋ จ์„ฑ ํ•„ํ„ฐ** (`filter_by_relevance`, ์ž„๊ณ„๊ฐ’ 0.35) โ€” ๊ณ„์‚ฐ๊ธฐ ๋“ฑ 197๊ฐœ ์ œ๊ฑฐ,
์ด ๊ฒ€์ƒ‰๋Ÿ‰ 4.13Mโ†’2.34M, ๋‹จ์ผ ๋…ธ์ด์ฆˆ ์ง€๋ฐฐ ํ•ด์†Œ. (์Šฌ๋ฆฌํผยท์ƒŒ๋“ค ๋“ฑ ๊ฒฝ๊ณ„์–ด๋Š” ์ž”์กด โ€” ํ›„์† ์ •์ œ ์—ฌ์ง€)
## 3๋‹จ๊ณ„ โ€” ์˜๋„ ๋ถ„๋ฅ˜ ๋ฌถ์Œ (Claude Haiku 4.5) โ€” ์™„๋ฃŒ
- [x] ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ์œ„ ์˜๋„ ๋ถ„๋ฅ˜(์ •๋ณด/๊ฑฐ๋ž˜/๋‚ด๋น„/ํ˜ผํ•ฉ) โ€” 1ํšŒ ํ˜ธ์ถœ๋กœ ๋ฌถ์Œ
- [x] ๋„๋„› ๋น„์ค‘ + ์˜๋„ ๋ฐฐ์ง€
- [x] ํ…Œ๋งˆํ˜• ๊ทธ๋ฃน๋ช… ์ƒ์„ฑ("์บ ํ•‘ ํ…ํŠธ"ยท"์•ผ์ „์นจ๋Œ€ ๋ฐ ์นจ๋‚ญ" ๋“ฑ)
- [x] SMB ๋งˆ์ผ€ํŒ… ์•ก์…˜ ์ œ์•ˆ ์ƒ์„ฑ (์ฐจ๋ฐ• ๋ฒˆ๋“ค ์ „๋žต ๋“ฑ ์‹ค๋ฐ์ดํ„ฐ ์ธ์‚ฌ์ดํŠธ)
- [x] ๊ฒ€์ฆ: ์บ ํ•‘์šฉํ’ˆ โ€” ๋„๋„›ยทํ…Œ๋งˆยท์ œ์•ˆ ๋ชจ๋‘ ์ถœ๋ ฅ, ๋น„์šฉ ํ‚ค์›Œ๋“œ๋‹น 11.7์›
- [x] **ํด๋Ÿฌ์Šคํ„ฐ ๋‹จ์œ„ ๊ด€๋ จ์„ฑ ํ•„ํ„ฐ(ํ‰๊ท  0.45 ์ปท)** โ€” ๋ฐฑํŒฉยท์ƒŒ๋“คยท๊ฐ€๋””๊ฑด ๋“ฑ ํŒจ์…˜ ๊ตฐ์ง‘ ์ œ๊ฑฐ.
ํšจ๊ณผ: ํด๋Ÿฌ์Šคํ„ฐ 27โ†’19, ๊ฑฐ๋ž˜ํ˜• ๋น„์ค‘ 1,021,575โ†’464,120, ์ƒ์œ„ ํ…Œ๋งˆ ์ „๋ถ€ ์บ ํ•‘ ์šฉํ’ˆ์œผ๋กœ ์ •ํ™”.
(๊ฐ€๋ฐฉ๋ฅ˜ 0.518๋Š” ์บ ํ•‘ ์ธ์ ‘์–ด๋ผ ์ž”์กด โ€” ์ž„๋ฒ ๋”ฉ์ƒ ์™„์ „ ๋ถ„๋ฆฌ๋Š” ๋ถˆ๊ฐ€, ํ—ˆ์šฉ)
## 4๋‹จ๊ณ„ โ€” React ํ”„๋ก ํŠธ ์—ฐ๋™ (์™„๋ฃŒ)
- [x] ๋ชฉ์—… HTML โ†’ React ๋‹จ์ผ ํŒŒ์ผ ์•ฑ(`dashboard.html`, ๋นŒ๋“œ ๋„๊ตฌ ์—†์Œ)
- [x] `/analyze` ์—ฐ๋™, ๋ถ„์„ ์‹คํ–‰ ๋ฒ„ํŠผ ์‹ค๋™์ž‘ (๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ ๊ฒ€์ฆ: ์นด๋“œ 3๊ฐœยทํด๋Ÿฌ์Šคํ„ฐ 18ํ–‰)
- [x] ๋กœ๋”ฉ/์—๋Ÿฌ/์บ์‹œ ์ƒํƒœ ์ฒ˜๋ฆฌ, ๋„๋„›ยท์ธ๊ตฌํ†ต๊ณ„ ๋ฏธ์ถฉ์กฑ ์‹œ ์•ˆ๋‚ด ์ž๋ฆฌ ํ‘œ์‹œ
- ๋น„๊ณ : Babel standalone ๊ธฐ๋ณธ์ด automatic JSX runtime์ด๋ผ `import` ๊ตฌ๋ฌธ์ด ๋ผ์–ด ๋ Œ๋”๊ฐ€ ์ฃฝ์Œ โ†’
classic runtime์„ ๋ช…์‹œ ์ง€์ •ํ•ด ์ปดํŒŒ์ผยท์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ
## ์‹คํ–‰ ๋ฐฉ๋ฒ•
1. ๋ฐฑ์—”๋“œ: `cd keyword && python -m uvicorn api:app --port 8000`
2. ํ”„๋ก ํŠธ: `cd keyword && python -m http.server 5500` โ†’ ๋ธŒ๋ผ์šฐ์ €์—์„œ http://127.0.0.1:5500/dashboard.html
## 5๋‹จ๊ณ„ โ€” ๋ณด์กฐ
- [x] ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ: **๋„ค์ด๋ฒ„ ์ž๋™์™„์„ฑ(์‹ค์ œ ๋™์‹œ๊ฒ€์ƒ‰) ์šฐ์„  + ์ž„๋ฒ ๋”ฉ ์ถ”์ • ํด๋ฐฑ** (`autocomplete.py` + `search_path.py`)
๊ฒ€์ฆ: ์บ ํ•‘์šฉํ’ˆโ†’์ž๋™์™„์„ฑ 14๋…ธ๋“œ("๋„ค์ด๋ฒ„ ์ž๋™์™„์„ฑ" ๋ฐฐ์ง€), ๊ฐ•์•„์ง€์‚ฌ๋ฃŒโ†’์ž„๋ฒ ๋”ฉ ํด๋ฐฑ 13๋…ธ๋“œ("์ž„๋ฒ ๋”ฉ ์ถ”์ •" ๋ฐฐ์ง€).
์ž๋™์™„์„ฑ์€ ๋น„๊ณต์‹ ์—”๋“œํฌ์ธํŠธ(๋นˆ์•ฝ/์ฐจ๋‹จ ๊ฐ€๋Šฅ) โ†’ 5๋…ธ๋“œ ๋ฏธ๋งŒ์ด๋ฉด ์ž„๋ฒ ๋”ฉ์œผ๋กœ graceful ๋Œ€์ฒด.
- [x] ์ธ๊ตฌํ†ต๊ณ„: ๋ฐ์ดํ„ฐ๋žฉ ๊ฒ€์ƒ‰ํŠธ๋ Œ๋“œ + ์•ต์ปค("๋‚ ์”จ") ์ •๊ทœํ™”๋กœ ์„ฑ๋ณ„ร—์—ฐ๋ น ์ถ”์ • ๋น„์ค‘ (`datalab.py` + ํ”„๋ก ํŠธ ๋ง‰๋Œ€)
**์‹ค๋ฐ์ดํ„ฐ ๊ฒ€์ฆ ์™„๋ฃŒ** โ€” ๊ฐ•์•„์ง€์‚ฌ๋ฃŒ: ์—ฌ์„ฑ>๋‚จ์„ฑยท๊ณ ์—ฐ๋ น>์ €์—ฐ๋ น ๋ถ„ํฌ๋กœ ์˜๋ฏธ ์žˆ๊ฒŒ ์ถœ๋ ฅ, ํ”„๋ก ํŠธ ๋ง‰๋Œ€ ๋ Œ๋” ํ™•์ธ.
- [x] **Supabase ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜** โ€” BI ํ”Œ๋žซ ํ…Œ์ด๋ธ” 3๊ฐœ(analysis_run/cluster/demographic)์— ์ ์žฌ
(`supabase_schema.sql` + `supabase_store.py`). SQLite๋Š” ๋น ๋ฅธ ์บ์‹œ ์œ ์ง€, Supabase๋Š” ํ†ตํ•ฉ ๋ถ„์„ ์ €์žฅ์†Œ.
๊ฒ€์ฆ ์™„๋ฃŒ: ์บ ํ•‘์šฉํ’ˆ ๋ถ„์„ โ†’ run 1ํ–‰ยทcluster 19ํ–‰ยทdemographic 8ํ–‰ ์ ์žฌ ํ™•์ธ. Tableau/Looker ์กฐํšŒ ๊ฐ€๋Šฅ.