--- title: IntentFinder API emoji: ๐Ÿ”Ž colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 pinned: false --- > **HuggingFace Space ๋ฐฐํฌ ๋ฉ”๋ชจ** > - SDK: Docker (์œ„ ๋ฉ”ํƒ€). ์ง„์ž…์  `api:app`, ํฌํŠธ 7860. > - **Space Settings โ†’ Secrets ์— ์ž…๋ ฅ**(์ฝ”๋“œ/๋ ˆํฌ์—” ๋‘์ง€ ์•Š์Œ): > `NAVER_CLIENT_ID`, `NAVER_CLIENT_SECRET`, `NAVER_API_KEY`, `NAVER_SECRET_KEY`, `NAVER_CUSTOMER_ID`, > `ANTHROPIC_API_KEY`, `SUPABASE_URL`, `SUPABASE_SERVICE_KEY` > - **๋ฐฐํฌ ๋ณดํ˜ธ ์‹œํฌ๋ฆฟ**(๊ถŒ์žฅ): `ALLOWED_ORIGINS`(๋Œ€์‹œ๋ณด๋“œ ๋„๋ฉ”์ธ), `DT_API_KEY`(๋Œ€์‹œ๋ณด๋“œ์™€ ๊ณต์œ ), `RATE_MAX_PER_MIN` > - ํ—ฌ์Šค์ฒดํฌ: `GET /health` ยท ๋ถ„์„: `GET /analyze?keyword=...` (`DT_API_KEY` ์„ค์ • ์‹œ `X-DT-Key` ํ—ค๋” ํ•„์š”) # IntentFinder โ€” ๊ฒ€์ƒ‰ ์ธํ…ํŠธ ๋ถ„์„ ๋Œ€์‹œ๋ณด๋“œ ํ‚ค์›Œ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋„ค์ด๋ฒ„ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ ๋ฐ์ดํ„ฐ + AI ํด๋Ÿฌ์Šคํ„ฐ๋ง์œผ๋กœ ๊ฒ€์ƒ‰ ์˜๋„ยทํƒ€๊นƒยท์—ฐ๊ด€ ๊ฒฝ๋กœ๋ฅผ ๋ถ„์„ํ•˜๋Š” SMB์šฉ ๋Œ€์‹œ๋ณด๋“œ. ## ๊ตฌ์„ฑ ``` [dashboard.html] React ๋‹จ์ผ ํŒŒ์ผ ํ”„๋ก ํŠธ (๋นŒ๋“œ ๋ถˆํ•„์š”) โ”‚ fetch /analyze?keyword= โ–ผ [api.py] FastAPI ๋ฐฑ์—”๋“œ (ํฌํŠธ 8000) โ”œโ”€ naver_collector.py ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰๊ด‘๊ณ  ํ‚ค์›Œ๋“œ๋„๊ตฌ (๊ฒ€์ƒ‰๋Ÿ‰ยท๊ฒฝ์Ÿ) โ”œโ”€ clusterer.py ๊ด€๋ จ์„ฑ ํ•„ํ„ฐ + S-BERTโ†’UMAPโ†’HDBSCAN ํด๋Ÿฌ์Šคํ„ฐ๋ง โ”œโ”€ analyzer.py Overview ์นด๋“œ ์ง‘๊ณ„ โ”œโ”€ intent_classifier.py Claude Haiku ์˜๋„๋ถ„๋ฅ˜ยทํ…Œ๋งˆ๋ช…ยท๋งˆ์ผ€ํŒ… ์ œ์•ˆ โ”œโ”€ autocomplete.py ๋„ค์ด๋ฒ„ ์ž๋™์™„์„ฑ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ โ”œโ”€ search_path.py ์ž„๋ฒ ๋”ฉ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ(ํด๋ฐฑ) โ”œโ”€ datalab.py ๋ฐ์ดํ„ฐ๋žฉ ์„ฑ๋ณ„ร—์—ฐ๋ น ์ถ”์ • ๋น„์ค‘ โ”œโ”€ cache.py SQLite ๋น ๋ฅธ ์žฌ์กฐํšŒ ์บ์‹œ โ””โ”€ supabase_store.py Supabase ์ ์žฌ(ํ†ตํ•ฉ BI ์ €์žฅ์†Œ) ``` ## ์„ค์น˜ ๋ฐ ์‹คํ–‰ ```bash # 1. ์˜์กด์„ฑ ์„ค์น˜ (torch ํฌํ•จ, ์ˆ˜๋ฐฑ MB) pip install -r requirements.txt # 2. ์ž๊ฒฉ์ฆ๋ช… ์„ค์ •: .env.example์„ .env๋กœ ๋ณต์‚ฌ ํ›„ ๊ฐ’ ์ฑ„์šฐ๊ธฐ # - ๋„ค์ด๋ฒ„ ๊ฒ€์ƒ‰๊ด‘๊ณ  (searchad.naver.com > ๋„๊ตฌ > API) # - ANTHROPIC_API_KEY (platform.claude.com) # - ๋„ค์ด๋ฒ„ ๋ฐ์ดํ„ฐ๋žฉ (developers.naver.com) # - SUPABASE_URL / SUPABASE_SERVICE_KEY (Supabase > Settings > API) # 3. Supabase ํ…Œ์ด๋ธ” ์ƒ์„ฑ: supabase_schema.sql์„ SQL Editor์— ๋ถ™์—ฌ Run # 4. ์‹คํ–‰ python -m uvicorn api:app --port 8000 # ๋ฐฑ์—”๋“œ python -m http.server 5500 # ํ”„๋ก ํŠธ # โ†’ http://127.0.0.1:5500/dashboard.html ``` ## ์ž๊ฒฉ์ฆ๋ช… ํ‚ค (.env) | ๋ณ€์ˆ˜ | ๋ฐœ๊ธ‰์ฒ˜ | ์šฉ๋„ | |---|---|---| | `NAVER_API_KEY` / `NAVER_SECRET_KEY` / `NAVER_CUSTOMER_ID` | searchad.naver.com | ๊ฒ€์ƒ‰๋Ÿ‰ยท๊ฒฝ์Ÿ | | `ANTHROPIC_API_KEY` | platform.claude.com | ์˜๋„๋ถ„๋ฅ˜ยท๋งˆ์ผ€ํŒ… ์ œ์•ˆ | | `NAVER_CLIENT_ID` / `NAVER_CLIENT_SECRET` | developers.naver.com | ์ธ๊ตฌํ†ต๊ณ„ | | `SUPABASE_URL` / `SUPABASE_SERVICE_KEY` | Supabase | ํ†ตํ•ฉ ์ €์žฅ์†Œ ์ ์žฌ | ํ‚ค๊ฐ€ ์—†๋Š” ๊ธฐ๋Šฅ์€ ์ž๋™์œผ๋กœ ๋น„ํ™œ์„ฑ(placeholder)๋˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค. ## ์ฃผ์˜ - `.env`(์‹ค์ œ ํ‚ค)๋Š” **์ ˆ๋Œ€ ๊ณต์œ ยท์ปค๋ฐ‹ ๊ธˆ์ง€**. ๊ณต์œ ๋Š” `.env.example`๋งŒ. - `service_role` ํ‚ค๋Š” RLS ์šฐํšŒ ํ‚ค โ†’ ์„œ๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉ, ํ”„๋ก ํŠธ ๋…ธ์ถœ ๊ธˆ์ง€. - ๋„ค์ด๋ฒ„ ์ž๋™์™„์„ฑยท๋ฐ์ดํ„ฐ๋žฉ์€ ๋น„๊ณต์‹/์ƒ๋Œ€์ง€์ˆ˜ ๊ธฐ๋ฐ˜ โ†’ "์ถ”์ •" ๋ผ๋ฒจ ์œ ์ง€. - CDN(BabelยทTailwind)์€ ๋ฐ๋ชจ์šฉ โ†’ ์‹ค์„œ๋น„์Šค๋Š” Vite ๋นŒ๋“œ ๊ถŒ์žฅ. ## ์ง„ํ–‰ ๊ธฐ๋ก - `checklist.md` โ€” ๋‹จ๊ณ„๋ณ„ ์™„๋ฃŒ ํ˜„ํ™ฉ - `context-notes.md` โ€” ์„ค๊ณ„ ๊ฒฐ์ •๊ณผ ๊ทผ๊ฑฐ - `data-requirements.md` โ€” ๋ฐ์ดํ„ฐ ์†Œ์Šคยทํ•œ๊ณ„ ๋ถ„์„