๐Ÿค– 8๋‹จ๊ณ„ : ์ตœ์ข… ํ†ตํ•ฉ ์„ค๊ณ„ ๋ฐ ํšŒ๊ณ  - 100-hours-a-week/7-team-ddb-wiki GitHub Wiki

Dolpin AI - ์žฅ์†Œ ์ถ”์ฒœ ์‹œ์Šคํ…œ

ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

Dolpin AI๋Š” ์‚ฌ์šฉ์ž์˜ ์ž์—ฐ์–ด ์ž…๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์žฅ์†Œ๋ฅผ ์ถ”์ฒœํ•˜๋Š” AI ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. LLM์„ ํ™œ์šฉํ•˜์—ฌ ํ‚ค์›Œ๋“œ๋ฅผ ์ถ”์ถœํ•˜๊ณ , ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์œ ์‚ฌํ•œ ์žฅ์†Œ๋ฅผ ์ฐพ์•„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ธฐ๋Šฅ

  • ์ž์—ฐ์–ด ๊ธฐ๋ฐ˜ ์žฅ์†Œ ์ถ”์ฒœ
  • LLM์„ ํ™œ์šฉํ•œ ํ‚ค์›Œ๋“œ ์ถ”์ถœ
  • ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰
  • ์‹ค์‹œ๊ฐ„ ์ถ”์ฒœ ์ฒ˜๋ฆฌ

์„œ๋น„์Šค ์•„ํ‚คํ…์ณ

์„œ๋น„์Šค ์•„ํ‚คํ…์ณ ์„ค๋ช…

ํ•ด๋‹น ์ด๋ฏธ์ง€๋Š” ์ „์ฒด ์„œ๋น„์Šค์—์„œ AI ์„œ๋ฒ„์˜ ๋™์ž‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ์•„ํ‚คํ…์ณ๋กœ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ๊ณผ ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง์— ๋Œ€ํ•œ ํ๋ฆ„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค

  • ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉด FE/BE๋ฅผ ๊ฑฐ์ณ AI ์„œ๋ฒ„์— ์š”์ฒญ์ด ์ „๋‹ฌ
  • LLM์„ ํ†ตํ•ด ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ง„ํ–‰
  • ๋ฒกํ„ฐ DB ์กฐํšŒ๋กœ ์žฅ์†Œ ํƒ์ƒ‰
  • BE์— ์žฅ์†Œ ์ „๋‹ฌ
  • Prometheus / Grafana๋ฅผ ํ†ตํ•œ ์„œ๋ฒ„ ๋ชจ๋‹ˆํ„ฐ๋ง ์ง„ํ–‰

AI ๋‚ด๋ถ€ ์•„ํ‚คํ…์ณ

AI ์•„ํ‚คํ…์ณ ์„ค๋ช…

  • ๋ฒก์—”๋“œ์—์„œ endpoint๋ฅผ ํ†ตํ•ด ์œ ์ € ์ž…๋ ฅ ์ „๋‹ฌ
  • LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ ์ € ์ž…๋ ฅ์œผ๋กœ๋ถ€ํ„ฐ ํ‚ค์›Œ๋“œ ์ถ”์ถœ ์ง„ํ–‰
  • ์ถ”์ถœ๋œ ํ‚ค์›Œ๋“œ๋ฅผ ์ž„๋ฒ ๋”ฉํ•˜์—ฌ user query ๋ฒกํ„ฐ ์ƒ์„ฑ
  • place ๋ฒกํ„ฐ์™€ ์œ ์‚ฌ๋„ ๋น„๊ต
  • ์œ ์‚ฌ๋„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ˜ํ™˜

๊ธฐ์ˆ  ์Šคํƒ

  • FastAPI: ๋ฐฑ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ
  • LangChain: LLM ํ†ตํ•ฉ
  • Chroma: ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
  • Celery: ๋น„๋™๊ธฐ ์ž‘์—… ์ฒ˜๋ฆฌ
  • Redis: ์บ์‹ฑ
  • Docker: ์ปจํ…Œ์ด๋„ˆํ™”
  • Prometheus/Grafana: ๋ชจ๋‹ˆํ„ฐ๋ง

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

dolpin_ai/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ main.py                      # FastAPI ์ง„์ž…์ 
โ”‚   โ”œโ”€โ”€ api/                         # ์—”๋“œํฌ์ธํŠธ ์ •์˜
โ”‚   โ”‚   โ”œโ”€โ”€ deps.py                  # Depends ์˜์กด์„ฑ
โ”‚   โ”‚   โ””โ”€โ”€ v1/
โ”‚   โ”‚       โ”œโ”€โ”€ endpoints/
โ”‚   โ”‚       โ”‚   โ””โ”€โ”€ recommend.py     # ์ถ”์ฒœ ์š”์ฒญ ์—”๋“œํฌ์ธํŠธ
โ”‚   โ”‚       โ””โ”€โ”€ router.py            # v1 router ํ†ตํ•ฉ
โ”‚   โ”œโ”€โ”€ services/                    # ์„œ๋น„์Šค ๋กœ์ง
โ”‚   โ”‚   โ”œโ”€โ”€ recommender.py           # ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜
โ”‚   โ”‚   โ”œโ”€โ”€ rag_engine.py            # RAG ์ฒด์ธ
โ”‚   โ”‚   โ”œโ”€โ”€ prompt_manager.py        # ํ”„๋กฌํ”„ํŠธ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ vector_store.py          # ๋ฒกํ„ฐDB ์—ฐ๋™
โ”‚   โ”œโ”€โ”€ ml/                          # ๋ชจ๋ธ ๋กœ๋”ฉ ๋ฐ ์ถ”๋ก 
โ”‚   โ”‚   โ”œโ”€โ”€ model_loader.py          # ๋ชจ๋ธ ๋กœ๋”ฉ
โ”‚   โ”‚   โ””โ”€โ”€ inference.py             # ์ถ”๋ก  ์—”์ง„
โ”‚   โ”œโ”€โ”€ schemas/                     # Pydantic ๋ชจ๋ธ
โ”‚   โ”‚   โ””โ”€โ”€ recommend_schema.py      # ์ž…๋ ฅ/์ถœ๋ ฅ ์Šคํ‚ค๋งˆ
โ”‚   โ”œโ”€โ”€ core/                        # ์„ค์ •, ๋ณด์•ˆ, CORS ๋“ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ config.py                # ๊ธฐ๋ณธ ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ init_app.py              # ์•ฑ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ models/                      # DB ๋ชจ๋ธ ์ •์˜
โ”‚   โ”‚   โ”œโ”€โ”€ base.py                  # ๊ธฐ๋ณธ ๋ชจ๋ธ
โ”‚   โ”‚   โ””โ”€โ”€ place.py                 # ์žฅ์†Œ ๋ชจ๋ธ
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ database/                    # DB ์„ค์ •
โ”‚   โ”‚   โ”œโ”€โ”€ session.py               # DB ์„ธ์…˜ ๊ด€๋ฆฌ
โ”‚   โ”‚   โ””โ”€โ”€ migrations/              # Alembic ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ cache/                       # ์บ์‹ฑ
โ”‚   โ”‚   โ”œโ”€โ”€ redis.py                 # Redis ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ decorators.py            # ์บ์‹œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ tasks/                       # ๋น„๋™๊ธฐ ์ž‘์—…
โ”‚   โ”‚   โ”œโ”€โ”€ celery.py                # Celery ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ workers/                 # ์›Œ์ปค ์ •์˜
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ exceptions/                  # ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
โ”‚   โ”‚   โ”œโ”€โ”€ handlers.py              # ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ
โ”‚   โ”‚   โ””โ”€โ”€ custom.py                # ์ปค์Šคํ…€ ์˜ˆ์™ธ
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ logging/                     # ๋กœ๊น…
โ”‚   โ”‚   โ”œโ”€โ”€ config.py                # ๋กœ๊น… ์„ค์ •
โ”‚   โ”‚   โ””โ”€โ”€ middleware.py            # ๋กœ๊น… ๋ฏธ๋“ค์›จ์–ด
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ utils/                       # ๋ณด์กฐ ์œ ํ‹ธ ํ•จ์ˆ˜
โ”‚       โ”œโ”€โ”€ logger.py                # loguru/structlog ๊ธฐ๋ฐ˜ ๋กœ๊ฑฐ
โ”‚       โ”œโ”€โ”€ text_cleaner.py          # ํ…์ŠคํŠธ ์ „์ฒ˜๋ฆฌ ์œ ํ‹ธ
โ”‚       โ””โ”€โ”€ timer.py                 # ์„ฑ๋Šฅ ์ธก์ • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ
โ”‚
โ”œโ”€โ”€ tests/                           # ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ unit/                        # ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
โ”‚   โ”œโ”€โ”€ integration/                 # ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
โ”‚   โ””โ”€โ”€ e2e/                         # E2E ํ…Œ์ŠคํŠธ
โ”‚
โ”œโ”€โ”€ docs/                            # ๋ฌธ์„œํ™”
โ”‚   โ”œโ”€โ”€ api/                         # API ๋ฌธ์„œ
โ”‚   โ””โ”€โ”€ architecture/                # ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œ
โ”‚
โ”œโ”€โ”€ scripts/                         # ์œ ํ‹ธ๋ฆฌํ‹ฐ
โ”‚   โ”œโ”€โ”€ setup.sh                     # ํ™˜๊ฒฝ ์„ค์ •
โ”‚   โ””โ”€โ”€ deploy.sh                    # ๋ฐฐํฌ ์Šคํฌ๋ฆฝํŠธ
โ”‚
โ”œโ”€โ”€ monitoring/                      # ๋ชจ๋‹ˆํ„ฐ๋ง
โ”‚   โ”œโ”€โ”€ prometheus/                  # Prometheus ์„ค์ •
โ”‚   โ””โ”€โ”€ grafana/                     # Grafana ๋Œ€์‹œ๋ณด๋“œ
โ”‚
โ”œโ”€โ”€ config/                          # ํ™˜๊ฒฝ ์„ค์ •
โ”‚   โ”œโ”€โ”€ development.py               # ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
โ”‚   โ”œโ”€โ”€ testing.py                   # ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
โ”‚   โ””โ”€โ”€ production.py                # ์šด์˜ ํ™˜๊ฒฝ
โ”‚
โ”œโ”€โ”€ Dockerfile                       # ์ปจํ…Œ์ด๋„ˆ ์„ค์ •
โ”œโ”€โ”€ docker-compose.yml               # ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์„ฑ
โ”œโ”€โ”€ requirements.txt                 # ์˜์กด์„ฑ
โ””โ”€โ”€ README.md                        # ํ”„๋กœ์ ํŠธ ๋ฌธ์„œ
  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ

    • models/: SQLAlchemy ๊ธฐ๋ฐ˜ DB ๋ชจ๋ธ ์ •์˜
    • database/: DB ์„ธ์…˜ ๊ด€๋ฆฌ ๋ฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜
    • vector_store.py: FAISS/Chroma ๋ฒกํ„ฐ DB ์—ฐ๋™
  2. ์บ์‹ฑ (cache/)

    • redis.py: Redis ์—ฐ๊ฒฐ ๋ฐ ์„ค์ •
    • decorators.py: ์บ์‹œ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๊ตฌํ˜„
    • ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์บ์‹ฑ ์ „๋žต
  3. ๋น„๋™๊ธฐ ์ž‘์—…

    • tasks/: Celery ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ž‘์—… ๊ด€๋ฆฌ
    • workers/: ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ ๋“ฑ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…
    • celery_app.py: Celery ์„ค์ • ๋ฐ ์›Œ์ปค ์ •์˜
  4. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ (exceptions/)

    • handlers.py: ์ „์—ญ ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ
    • custom.py: ์ปค์Šคํ…€ ์˜ˆ์™ธ ํด๋ž˜์Šค
    • ์—๋Ÿฌ ์‘๋‹ต ํ‘œ์ค€ํ™”
  5. ๋กœ๊น… (logging/)

    • config.py: ๋กœ๊น… ์„ค์ •
    • middleware.py: ์š”์ฒญ/์‘๋‹ต ๋กœ๊น…
    • utils/logger.py: ๊ตฌ์กฐํ™”๋œ ๋กœ๊น…
  6. ์œ ํ‹ธ๋ฆฌํ‹ฐ (utils/)

    • text_cleaner.py: ํ…์ŠคํŠธ ์ „์ฒ˜๋ฆฌ
    • timer.py: ์„ฑ๋Šฅ ์ธก์ •
    • logger.py: ๋กœ๊น… ์œ ํ‹ธ๋ฆฌํ‹ฐ
  7. ํ…Œ์ŠคํŠธ (tests/)

    • unit/: ๋‹จ์œ„ ํ…Œ์ŠคํŠธ
    • integration/: ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
    • e2e/: End-to-End ํ…Œ์ŠคํŠธ
  8. ๋ฌธ์„œํ™” (docs/)

    • api/: API ๋ฌธ์„œ
    • architecture/: ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ๋ฌธ์„œ
    • README.md: ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
  9. ๋ชจ๋‹ˆํ„ฐ๋ง (monitoring/)

    • prometheus/: ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
    • grafana/: ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์‹œ๊ฐํ™”
    • ์„ฑ๋Šฅ ๋ชจ๋‹ˆํ„ฐ๋ง
  10. ํ™˜๊ฒฝ ์„ค์ • (config/)

    • development.py: ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
    • testing.py: ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ
    • production.py: ์šด์˜ ํ™˜๊ฒฝ
  11. ๋ฐฐํฌ ๊ด€๋ จ

    • Dockerfile: ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ์ •์˜
    • docker-compose.yml: ์„œ๋น„์Šค ๊ตฌ์„ฑ
    • requirements.txt: ์˜์กด์„ฑ ๊ด€๋ฆฌ
  12. API ์—”๋“œํฌ์ธํŠธ (api/)

    • v1/endpoints/: API ๋ฒ„์ „ 1 ์—”๋“œํฌ์ธํŠธ
    • deps.py: ์˜์กด์„ฑ ์ฃผ์ž…
    • router.py: ๋ผ์šฐํ„ฐ ํ†ตํ•ฉ
  13. ์„œ๋น„์Šค ๋กœ์ง (services/)

    • recommender.py: ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • rag_engine.py: RAG ์ฒด์ธ
    • prompt_manager.py: ํ”„๋กฌํ”„ํŠธ ๊ด€๋ฆฌ
  14. ML ๋ชจ๋ธ (ml/)

    • model_loader.py: ๋ชจ๋ธ ๋กœ๋”ฉ
    • inference.py: ์ถ”๋ก  ์—”์ง„
    • LLM ๋ฐ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ ๊ด€๋ฆฌ
  15. ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ (schemas/)

    • recommend_schema.py: ์ถ”์ฒœ ๊ด€๋ จ ์Šคํ‚ค๋งˆ
    • Pydantic ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๊ฒ€์ฆ
  16. ํ•ต์‹ฌ ์„ค์ • (core/)

    • config.py: ๊ธฐ๋ณธ ์„ค์ •
    • init_app.py: ์•ฑ ์ดˆ๊ธฐํ™”
    • CORS, ๋ฏธ๋“ค์›จ์–ด ๋“ฑ ์„ค์ •

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ ์ด์ 

  • ๋ชจ๋“ˆํ™”
  • ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์•„ํ‚คํ…์ฒ˜
  • ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด์„ฑ
  • ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ
  • ๋ฐฐํฌ ์ž๋™ํ™”
  • ๋ชจ๋‹ˆํ„ฐ๋ง ์šฉ์ด์„ฑ

API ์‘๋‹ต ์˜ˆ์‹œ

POST /api/v1/recommend
Content-Type: application/json

{
    "text": "๋ง›์žˆ๋Š” ํ•œ์‹์ง‘ ์ถ”์ฒœํ•ด์ค˜"
}

์‘๋‹ต:

{
    "recommendations": [
        {
            "id": 1,
            "similarity_score": 0.95
        },
        {
            "id": 21,
            "similarity_score": 0.95
        },
        {
            "id": 32,
            "similarity_score": 0.95
        }
    ]
}

๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ์ˆ ์Šคํƒ

  • Prometheus: ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘
  • Grafana: ๋Œ€์‹œ๋ณด๋“œ ๋ฐ ์‹œ๊ฐํ™”
  • ๋กœ๊น…: ๊ตฌ์กฐํ™”๋œ ๋กœ๊ทธ ์ˆ˜์ง‘

๋ฒ„์ „๋ณ„ ์ธํ”„๋ผ ๊ธฐ์ˆ  ๋ฐ ์„œ๋น„์Šค ๋ช…์„ธ

ํ•ญ๋ชฉ ์ดˆ๊ธฐ (Jetson Orin Nano) ํ™•์žฅ ์‹œ (ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ EC2/K8s)
๋ชจ๋ธ ์„œ๋ฒ„ ๋‹จ์ผ FastAPI ์„œ๋ฒ„ (Docker ์ปจํ…Œ์ด๋„ˆ) ์—ฌ๋Ÿฌ EC2 ์ธ์Šคํ„ด์Šค์— ๋™์ผํ•œ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ (Kubernetes ๋˜๋Š” Auto Scaling)
ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ GCP Load Balancer (๋‹จ์ผ ์„œ๋ฒ„ ๋‚ด ๋ผ์šฐํŒ…) AWS ALB ๋˜๋Š” Kubernetes Ingress๋ฅผ ํ†ตํ•œ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
์„œ๋ฒ„ ์šด์˜ ๋ฐฉ์‹ ์˜จํ”„๋ ˆ๋ฏธ์Šค Jetson ์šด์˜ (ํ•˜๋ฃจ 15์‹œ๊ฐ„) ํŠธ๋ž˜ํ”ฝ ํ”ผํฌ ์‹œ๊ฐ„๋Œ€์— EC2 ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค ์ถ”๊ฐ€ ์šด์šฉ (์˜ˆ: ์‹์‚ฌ์‹œ๊ฐ„๋Œ€)
๋ชจ๋‹ˆํ„ฐ๋ง Prometheus + Grafana (Jetson ๋‚ด ๋ชจ๋‹ˆํ„ฐ๋ง) ๋™์ผ ์Šคํƒ์„ EC2 ์ธ์Šคํ„ด์Šค์—๋„ ์ ์šฉํ•˜์—ฌ ์ „์ฒด ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ ๋ชจ๋‹ˆํ„ฐ๋ง

๋ชจ๋‹ˆํ„ฐ๋ง ๋Œ€์ƒ ์ง€ํ‘œ ๋ชฉ๋ก๊ณผ ์ˆ˜์ง‘/์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•

๊ตฌ์„ฑ์š”์†Œ ์—ญํ•  ๋„๊ตฌ
์„œ๋ฒ„/์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ API ์š”์ฒญ ์ˆ˜, ์‘๋‹ต ์‹œ๊ฐ„, ์—๋Ÿฌ์œจ FastAPI ๋‚ด Prometheus exporter
์‹œ์Šคํ…œ ๋ฆฌ์†Œ์Šค CPU, ๋ฉ”๋ชจ๋ฆฌ, ๋””์Šคํฌ I/O, ๋„คํŠธ์›Œํฌ ์ง€ํ‘œ Node Exporter, DCGM Exporter
์‹œ์Šคํ…œ ๋Œ€์‹œ๋ณด๋“œ ์‹ค์‹œ๊ฐ„ ์‹œ๊ฐํ™” ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง Grafana
์•Œ๋ฆผ ์ด์ƒ ์ง•ํ›„ ๋ฐœ์ƒ ์‹œ ๊ฒฝ๊ณ  ์ „์†ก Alertmanager (Discord)

-> ๊ฐ„์ด ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๋˜๋Š” ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ฒฐ๊ณผ์™€ ๊ทธ์— ๋”ฐ๋ฅธ ์‹œ์Šคํ…œ ์ž์› ์‚ฌ์šฉ๋Ÿ‰/์‘๋‹ต์‹œ๊ฐ„ ๋ณ€ํ™” ๋ถ„์„

์šด์˜ ๊ด€์ ์—์„œ ์ธํ”„๋ผ ํ™•์žฅ ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง์˜ ์ด์œ 

  • ์ดˆ๊ธฐ ์šด์˜:

    • ๊ทน์†Œ์ˆ˜ ์‚ฌ์šฉ์ž ๋Œ€์ƒ์œผ๋กœ Jetson Orin Nano์—์„œ Docker ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜ FastAPI ์„œ๋ฒ„๋กœ ์šด์˜.
    • Gemini API ํ”„๋ฆฌํ‹ฐ์–ด ์ œํ•œ ๋‚ด์—์„œ ์šด์˜ํ•˜๋ฉฐ, ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ํ†ตํ•ด ๋ฌด๋ฃŒ ํ•œ๋„ ์ดˆ๊ณผ ์‹œ ์œ ๋ฃŒ ์ „ํ™˜ ์˜ˆ์ •.
  • ํ™•์žฅ ์ „๋žต:

    • ํŠน์ • ์‹œ๊ฐ„๋Œ€(์˜ˆ: ์‹์‚ฌ ์‹œ๊ฐ„๋Œ€, ๋ถ€ํ•˜ ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„) ๋ฐ ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ์‹œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ˆ˜ํ‰ ํ™•์žฅ ๋Œ€์‘.
    • AWS ALB ๋˜๋Š” K8s Ingress๋กœ API ์š”์ฒญ ๋ถ„์‚ฐ.
  • ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋Œ€์‘:

    • Prometheus + Grafana๋กœ ์‹ค์‹œ๊ฐ„ ์ง€ํ‘œ ํ™•์ธ, Alertmanager๋กœ ์ž๋™ ์•Œ๋ฆผ ์—ฐ๋™.

๋‹จ๊ณ„๋ณ„ ์„ค๊ณ„ ์ ์šฉ ๊ณ„ํš(์ถ”ํ›„ ์ง„ํ–‰ ๋ฐฉํ–ฅ)

  • MVP : Gemini๋ฅผ ํ™œ์šฉํ•œ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์„ฑ๋Šฅ ๋ณด์žฅ
  • v2 : Local LLM์„ ์‚ฌ์šฉํ•œ ํ‚ค์›Œ๋“œ ์ถ”์ถœ๋ชจ๋ธ ๊ฐœ๋ฐœ
  • v3 : ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ํ™œ์šฉํ•œ ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋„ํ™”