Spaces:
Running
Running
checklist โ ๊ฒ์ ์ธํ ํธ ๋ถ์ ๋์๋ณด๋
๋ชฉํ: ์ฌ์ฉ์๊ฐ ํค์๋๋ฅผ ์ ๋ ฅํ๋ฉด ์ค์๊ฐ์ผ๋ก ๊ฒ์ ์ธํ ํธ๋ฅผ ๋ถ์ํ๋ React ์น ์๋น์ค. ๋ฐฉ์: ์จ๋๋งจ๋ + ์บ์ฑ. ๋ฐฑ์๋ Python(FastAPI), ํ๋ก ํธ React.
1๋จ๊ณ โ ๋ฐฑ์๋ ๊ณจ๊ฒฉ + ๋ค์ด๋ฒ ์ค์๊ฐ (์๋ฃ)
-
naver_collector.pyโfetch_keywords()์ฌ์ฌ์ฉ (์๋ ํ๋์ฝ๋ฉ ์ ๊ฑฐ) -
analyzer.pyโ ์์ df โ Overview ์ง๊ณ (์ด๊ฒ์๋ยท๊ฒฝ์๋ถํฌยท์ค์๊ฐยท์์ ํค์๋) -
cache.pyโ SQLite ์บ์ (ํค์๋+๋ ์ง ๋จ์, ์ฌ์กฐํ ์ฆ์ ๋ฐํ) -
api.pyโ FastAPIGET /analyze?keyword=์๋ํฌ์ธํธ - ๋ก์ปฌ ์คํ + ์์ ํค์๋ ๊ฒ์ฆ (๊ณจํ 0.36s, ๊ฐ์์ง์ฌ๋ฃ 0.22s, ์บ์ ์ฌ์กฐํ 0.00s)
2๋จ๊ณ โ ์๋ฏธ ํด๋ฌ์คํฐ๋ง (์๋ฃ)
-
sentence-transformers+umap-learn+hdbscan์ค์น - S-BERT โ UMAP(5D) โ HDBSCAN(leaf) ํ์ดํ๋ผ์ธ (
clusterer.py) - ๋
ธ์ด์ฆ(-1) ํํฐ๋ง, ๊ทธ๋ฃน๋ณ ๊ฒ์๋ ์ง๊ณ,
/analyze์ ์ฐ๊ฒฐ - ๊ฒ์ฆ: ์บ ํ์ฉํ 37๊ฐ ํด๋ฌ์คํฐ(์์/์ง๊ฐ/์บ ํํ ์ด๋ธ/์ผ์ ์นจ๋/๋๋ก๋ฅ ๋ฑ ์๋ฏธ ๊ตฐ์งํ ํ์ธ)
- 2.5 ์๋ ๊ด๋ จ์ฑ ํํฐ (
filter_by_relevance, ์๊ณ๊ฐ 0.35) โ ๊ณ์ฐ๊ธฐ ๋ฑ 197๊ฐ ์ ๊ฑฐ, ์ด ๊ฒ์๋ 4.13Mโ2.34M, ๋จ์ผ ๋ ธ์ด์ฆ ์ง๋ฐฐ ํด์. (์ฌ๋ฆฌํผยท์๋ค ๋ฑ ๊ฒฝ๊ณ์ด๋ ์์กด โ ํ์ ์ ์ ์ฌ์ง)
3๋จ๊ณ โ ์๋ ๋ถ๋ฅ ๋ฌถ์ (Claude Haiku 4.5) โ ์๋ฃ
- ํด๋ฌ์คํฐ ๋จ์ ์๋ ๋ถ๋ฅ(์ ๋ณด/๊ฑฐ๋/๋ด๋น/ํผํฉ) โ 1ํ ํธ์ถ๋ก ๋ฌถ์
- ๋๋ ๋น์ค + ์๋ ๋ฐฐ์ง
- ํ ๋งํ ๊ทธ๋ฃน๋ช ์์ฑ("์บ ํ ํ ํธ"ยท"์ผ์ ์นจ๋ ๋ฐ ์นจ๋ญ" ๋ฑ)
- SMB ๋ง์ผํ ์ก์ ์ ์ ์์ฑ (์ฐจ๋ฐ ๋ฒ๋ค ์ ๋ต ๋ฑ ์ค๋ฐ์ดํฐ ์ธ์ฌ์ดํธ)
- ๊ฒ์ฆ: ์บ ํ์ฉํ โ ๋๋ยทํ ๋งยท์ ์ ๋ชจ๋ ์ถ๋ ฅ, ๋น์ฉ ํค์๋๋น 11.7์
- ํด๋ฌ์คํฐ ๋จ์ ๊ด๋ จ์ฑ ํํฐ(ํ๊ท 0.45 ์ปท) โ ๋ฐฑํฉยท์๋คยท๊ฐ๋๊ฑด ๋ฑ ํจ์ ๊ตฐ์ง ์ ๊ฑฐ. ํจ๊ณผ: ํด๋ฌ์คํฐ 27โ19, ๊ฑฐ๋ํ ๋น์ค 1,021,575โ464,120, ์์ ํ ๋ง ์ ๋ถ ์บ ํ ์ฉํ์ผ๋ก ์ ํ. (๊ฐ๋ฐฉ๋ฅ 0.518๋ ์บ ํ ์ธ์ ์ด๋ผ ์์กด โ ์๋ฒ ๋ฉ์ ์์ ๋ถ๋ฆฌ๋ ๋ถ๊ฐ, ํ์ฉ)
4๋จ๊ณ โ React ํ๋ก ํธ ์ฐ๋ (์๋ฃ)
- ๋ชฉ์
HTML โ React ๋จ์ผ ํ์ผ ์ฑ(
dashboard.html, ๋น๋ ๋๊ตฌ ์์) -
/analyze์ฐ๋, ๋ถ์ ์คํ ๋ฒํผ ์ค๋์ (๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ๊ฒ์ฆ: ์นด๋ 3๊ฐยทํด๋ฌ์คํฐ 18ํ) - ๋ก๋ฉ/์๋ฌ/์บ์ ์ํ ์ฒ๋ฆฌ, ๋๋ยท์ธ๊ตฌํต๊ณ ๋ฏธ์ถฉ์กฑ ์ ์๋ด ์๋ฆฌ ํ์
- ๋น๊ณ : Babel standalone ๊ธฐ๋ณธ์ด automatic JSX runtime์ด๋ผ
import๊ตฌ๋ฌธ์ด ๋ผ์ด ๋ ๋๊ฐ ์ฃฝ์ โ classic runtime์ ๋ช ์ ์ง์ ํด ์ปดํ์ผยท์คํํ๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ
์คํ ๋ฐฉ๋ฒ
- ๋ฐฑ์๋:
cd keyword && python -m uvicorn api:app --port 8000 - ํ๋ก ํธ:
cd keyword && python -m http.server 5500โ ๋ธ๋ผ์ฐ์ ์์ http://127.0.0.1:5500/dashboard.html
5๋จ๊ณ โ ๋ณด์กฐ
- ๊ฒ์ ๊ฒฝ๋ก: ๋ค์ด๋ฒ ์๋์์ฑ(์ค์ ๋์๊ฒ์) ์ฐ์ + ์๋ฒ ๋ฉ ์ถ์ ํด๋ฐฑ (
autocomplete.py+search_path.py) ๊ฒ์ฆ: ์บ ํ์ฉํโ์๋์์ฑ 14๋ ธ๋("๋ค์ด๋ฒ ์๋์์ฑ" ๋ฐฐ์ง), ๊ฐ์์ง์ฌ๋ฃโ์๋ฒ ๋ฉ ํด๋ฐฑ 13๋ ธ๋("์๋ฒ ๋ฉ ์ถ์ " ๋ฐฐ์ง). ์๋์์ฑ์ ๋น๊ณต์ ์๋ํฌ์ธํธ(๋น์ฝ/์ฐจ๋จ ๊ฐ๋ฅ) โ 5๋ ธ๋ ๋ฏธ๋ง์ด๋ฉด ์๋ฒ ๋ฉ์ผ๋ก graceful ๋์ฒด. - ์ธ๊ตฌํต๊ณ: ๋ฐ์ดํฐ๋ฉ ๊ฒ์ํธ๋ ๋ + ์ต์ปค("๋ ์จ") ์ ๊ทํ๋ก ์ฑ๋ณร์ฐ๋ น ์ถ์ ๋น์ค (
datalab.py+ ํ๋ก ํธ ๋ง๋) ์ค๋ฐ์ดํฐ ๊ฒ์ฆ ์๋ฃ โ ๊ฐ์์ง์ฌ๋ฃ: ์ฌ์ฑ>๋จ์ฑยท๊ณ ์ฐ๋ น>์ ์ฐ๋ น ๋ถํฌ๋ก ์๋ฏธ ์๊ฒ ์ถ๋ ฅ, ํ๋ก ํธ ๋ง๋ ๋ ๋ ํ์ธ. - Supabase ๋ง์ด๊ทธ๋ ์ด์
โ BI ํ๋ซ ํ
์ด๋ธ 3๊ฐ(analysis_run/cluster/demographic)์ ์ ์ฌ
(
supabase_schema.sql+supabase_store.py). SQLite๋ ๋น ๋ฅธ ์บ์ ์ ์ง, Supabase๋ ํตํฉ ๋ถ์ ์ ์ฅ์. ๊ฒ์ฆ ์๋ฃ: ์บ ํ์ฉํ ๋ถ์ โ run 1ํยทcluster 19ํยทdemographic 8ํ ์ ์ฌ ํ์ธ. Tableau/Looker ์กฐํ ๊ฐ๋ฅ.