πŸ€– 3단계 : μ„œλΉ„μŠ€ 아킀텍쳐 λͺ¨λ“ˆν™” - 100-hours-a-week/7-team-ddb-wiki GitHub Wiki

전체 ν”„λ‘œμ νŠΈ ꡬ쑰

dolpin_ai/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ main.py                      # FastAPI μ§„μž…μ 
β”‚   β”œβ”€β”€ api/                         # μ—”λ“œν¬μΈνŠΈ μ •μ˜
β”‚   β”‚   β”œβ”€β”€ deps.py                  # Depends μ˜μ‘΄μ„±
β”‚   β”‚   └── v1/
β”‚   β”‚       β”œβ”€β”€ endpoints/
β”‚   β”‚       β”‚   β”œβ”€β”€ recommend.py     # μΆ”μ²œ μš”μ²­ μ—”λ“œν¬μΈνŠΈ
β”‚   β”‚       β”‚   └── embed.py         # μž„λ² λ”© 처리용 (μž₯μ†Œ, μ‚¬μš©μž μš”μ²­ μž„λ² λ”©)
β”‚   β”‚       └── router.py            # v1 router 톡합
β”‚   β”œβ”€β”€ services/                    # μ„œλΉ„μŠ€ 둜직
β”‚   β”‚   β”œβ”€β”€ recommender.py           # μΆ”μ²œ μ•Œκ³ λ¦¬μ¦˜
β”‚   β”‚   β”œβ”€β”€ rag_engine.py            # RAG 체인 λ˜λŠ” ν”„λ‘¬ν”„νŠΈ 체인
β”‚   β”‚   β”œβ”€β”€ prompt_manager.py        # ν”„λ‘¬ν”„νŠΈ ꡬ성 및 ν…œν”Œλ¦Ώ 처리
β”‚   β”‚   └── vector_store.py          # FAISS/Chroma λ“± 벑터DB 연동
β”‚   β”œβ”€β”€ ml/                          # λͺ¨λΈ λ‘œλ”© 및 μΆ”λ‘ 
β”‚   β”‚   β”œβ”€β”€ model_loader.py          # LLM λ˜λŠ” embedding λͺ¨λΈ λ‘œλ”©
β”‚   β”‚   └── inference.py             # μΆ”λ‘  μ—”μ§„ μ‹€ν–‰ (gemini -> local llm)
β”‚   β”œβ”€β”€ schemas/                     # Pydantic λͺ¨λΈ
β”‚   β”‚   β”œβ”€β”€ recommend_schema.py      # μž…λ ₯/좜λ ₯ μŠ€ν‚€λ§ˆ
β”‚   β”‚   └── embed_schema.py
β”‚   β”œβ”€β”€ core/                        # μ„€μ •, λ³΄μ•ˆ, CORS λ“±
β”‚   β”‚   β”œβ”€β”€ config.py
β”‚   β”‚   └── init_app.py              # 둜거, DB μ΄ˆκΈ°ν™” λ“± FastAPI μ•± λΆ€νŠΈμŠ€νŠΈλž© ν•¨μˆ˜
---------------------------------------v1----------------------------------------
β”‚   β”œβ”€β”€ utils/                       # 보쑰 μœ ν‹Έ ν•¨μˆ˜
β”‚   β”‚   β”œβ”€β”€ logger.py                # loguru λ˜λŠ” structlog 기반 둜거 μ„€μ •
β”‚   β”‚   β”œβ”€β”€ text_cleaner.py          # ν…μŠ€νŠΈ μ „μ²˜λ¦¬ μœ ν‹Έ (이λͺ¨μ§€ 제거, μ •κ·œν™” λ“±)
β”‚   β”‚   └── timer.py                 # μΆ”λ‘  μ‹œκ°„ μΈ‘μ • λ°μ½”λ ˆμ΄ν„° ν•¨μˆ˜
β”œβ”€β”€ workers/                         # λ©”μ‹œμ§€ 큐/비동기 μ›Œμ»€ (선택)
β”‚   β”œβ”€β”€ embedding_worker.py          # μž„λ² λ”© 생성 및 DB μ €μž₯ λ“±μ˜ 비동기 처리 μ „μš© μ›Œμ»€ (ex. Celery/RQ)
β”‚   └── celery_app.py                # Celery μΈμŠ€ν„΄μŠ€ μ •μ˜ 및 μ„€μ • λ‘œλ”©
β”œβ”€β”€ tests/                           # ν…ŒμŠ€νŠΈ
β”‚   β”œβ”€β”€ unit/                        # λ‹¨μœ„ ν…ŒμŠ€νŠΈ: prompt_manager, recommender, vector_store λ“±
β”‚   └── integration/                 # 톡합 ν…ŒμŠ€νŠΈ: /recommend API 호좜 μ‹œ end-to-end 확인
β”œβ”€β”€ config/                          # ν™˜κ²½ μ„€μ • 파일
β”‚   β”œβ”€β”€ .env.dev                     # 개발 ν™˜κ²½ μ„€μ • 파일
β”‚   β”œβ”€β”€ .env.prod                    # 운영 ν™˜κ²½ μ„€μ • 파일
β”‚   └── gunicorn_conf.py            # Gunicorn ν”„λ‘œμ„ΈμŠ€ 관리 μ„€μ • (Docker 배포 μ‹œ μ‚¬μš©)
β”œβ”€β”€ Dockerfile                       # FastAPI μ„œλ²„ + λͺ¨λΈ 쒅속 νŒ¨ν‚€μ§€ 포함 μ»¨ν…Œμ΄λ„ˆ μ„€μ •
β”œβ”€β”€ docker-compose.yml              # API μ„œλ²„ + 벑터DB + Redis (μ˜΅μ…˜) λ“± μ—¬λŸ¬ μ»¨ν…Œμ΄λ„ˆ μ •μ˜
β”œβ”€β”€ requirements.txt                # ν•„μˆ˜ νŒ¨ν‚€μ§€ 리슀트 (FastAPI, pydantic, openai, langchain, chromadb λ“±)
└── README.md                        # μ„œλΉ„μŠ€ κ°œμš”, μ„€μΉ˜ 방법, API μ„€λͺ… λ“± λ¬Έμ„œ

λͺ¨λ“ˆλ³„ μ±…μž„ 및 κΈ°λŠ₯

λͺ¨λ“ˆλͺ… μ±…μž„(도메인) μ£Όμš” κΈ°λŠ₯
API Gateway (main.py) FastAPI μ§„μž…μ  - HTTP μš”μ²­ μˆ˜μ‹ - CORS 및 미듀웨어 μ„€μ •- API Router 톡합
Routers (/api/v1/endpoints) API μΈν„°νŽ˜μ΄μŠ€ - /recommend, /embed λ“±μ˜ REST μ—”λ“œν¬μΈνŠΈ μ •μ˜- μš”μ²­ νŒŒλΌλ―Έν„° 바인딩- μŠ€ν‚€λ§ˆ μœ νš¨μ„± 검사
Router (/api/v1/router.py) API 버전 톡합 - v1 λΌμš°ν„° 묢음 등둝- /api/v1 경둜 ν•˜μœ„λ‘œ 각 κΈ°λŠ₯ μ—°κ²°
Dependencies (api/deps.py) 곡톡 μ˜μ‘΄μ„± 관리 - DB μ„Έμ…˜, 인증 토큰 검증 λ“± 곡톡 Depends() 제곡
Services:Recommender μΆ”μ²œ 생성 - μ‚¬μš©μž μž…λ ₯ 기반 ν”„λ‘¬ν”„νŠΈ ꡬ성- 벑터 검색 κ²°κ³Ό 반영- LLM κ²°κ³Ό νŒŒμ‹± ν›„ μΆ”μ²œ 생성
Services:RAG Engine 검색 기반 생성 (RAG) - ν”„λ‘¬ν”„νŠΈ + 벑터 기반 context μ‘°ν•©- LLM 호좜용 ν…μŠ€νŠΈ 생성
Services:Prompt Manager ν”„λ‘¬ν”„νŠΈ ν…œν”Œλ¦Ώ 관리 - μ‚¬μš©μž μž…λ ₯, νƒœκ·Έ, νžˆμŠ€ν† λ¦¬ 기반 ν…œν”Œλ¦Ώ ꡬ성- λ‹€μ–‘ν•œ μž…λ ₯ 포맷에 λŒ€ν•œ μœ μ—°ν•œ ν¬λ§·νŒ…
Services:Vector Store μœ μ‚¬λ„ 기반 검색 - μ‚¬μš©μž ν…μŠ€νŠΈ μž„λ² λ”©- FAISS/Chroma 검색 연동- κ΄€λ ¨ context μΆ”μΆœ
Model Loader (ml/model_loader.py) λͺ¨λΈ μ€€λΉ„ - embedding λͺ¨λΈ λ˜λŠ” LLM API μ΄ˆκΈ°ν™”- GPU/CPU μ„€μ • κ³ λ €ν•œ λ‘œλ”©
Inference (ml/inference.py) LLM μΆ”λ‘  호좜 - OpenAI / HuggingFace / local λ“± LLM μΈν„°νŽ˜μ΄μŠ€- 응닡 νŒŒμ‹± 및 였λ₯˜ 처리
Schemas (schemas/) 데이터 ꡬ쑰 μ •μ˜ - RecommendationInput, RecommendationOutput μ •μ˜- Pydantic 기반 μž…λ ₯/좜λ ₯ 검증
Core (core/config.py) ν™˜κ²½ μ„€μ • - .env 기반 μ„€μ • λ‘œλ“œ- API Key, 호슀트 μ£Όμ†Œ λ“± 관리
V2    
Core (core/init_app.py) μ•± μ΄ˆκΈ°ν™” - λ‘œκΉ… μ„€μ •- DB 및 기타 λͺ¨λ“ˆ μ΄ˆκΈ°ν™” ν›… 제곡
Utils (utils/) μœ ν‹Έ ν•¨μˆ˜ λͺ¨μŒ - 둜거 μ„€μ •- ν…μŠ€νŠΈ μ •μ œ- μ‹€ν–‰ μ‹œκ°„ μΈ‘μ • λ°μ½”λ ˆμ΄ν„° λ“±
Workers (workers/) 비동기 λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… - μž„λ² λ”© 생성 μž‘μ—… 처리- Celery task 등둝
Tests (tests/) μœ λ‹›/톡합 ν…ŒμŠ€νŠΈ - μ„œλΉ„μŠ€ λ‹¨μœ„ μœ λ‹› ν…ŒμŠ€νŠΈ- 전체 μΆ”μ²œ 흐름에 λŒ€ν•œ API 톡합 ν…ŒμŠ€νŠΈ

2. πŸ“„ μ£Όμš” API μΈν„°νŽ˜μ΄μŠ€ 및 데이터 포맷

πŸ”Ή /api/v1/recommend – μΆ”μ²œ μš”μ²­

Request (Pydantic: RecommendationInput)

{
  "userQuery": "내일 저녁에 μ˜ˆμ•½ κ°€λŠ₯ν•œ νšŒμ‹μž₯μ†Œ μ•Œλ €μ€˜, λ©”λ‰΄λŠ” ν•΄μ‚°λ¬Όλ‘œ"
}

Response (Pydantic: RecommendationOutput)

{
    "data": [
        {"place_id": 21, "similarity_score": 0.92},
        {"place_id": 36, "similarity_score": 0.86},
        {"place_id": 16, "similarity_score": 0.87},
        {"place_id": 41, "similarity_score": 0.93},
        {"place_id": 12, "similarity_score": 0.91}
    ]
}

3. λ‚΄λΆ€ λͺ¨λ“ˆ κ°„ μΈν„°νŽ˜μ΄μŠ€ μ˜ˆμ‹œ

  • recommender.py
def generate_recommendation(input: RecommendationInput) -> RecommendationOutput:
    prompt = build_prompt(input)
    context = retrieve_context(input)
    result = call_llm(prompt, context)
    return parse_response(result)
  • prompt_manager.py
def build_prompt(input: RecommendationInput) -> str:
    return f"""
    ...
    """

λͺ¨λ“ˆν™”μ˜ κΈ°λŒ€ 효과 및 μž₯점

1. μœ μ§€λ³΄μˆ˜ μš©μ΄μ„±

  • λͺ¨λ“ˆλ³„ μ±…μž„μ΄ λͺ…ν™• β†’ κΈ°λŠ₯ μˆ˜μ • μ‹œ 영ν–₯ μ΅œμ†Œν™”
  • prompt_manager, recommender, inference λ“± 독립 λ‹¨μœ„λ³„ λ³€κ²½ κ°€λŠ₯

2. ν™•μž₯μ„± 확보

  • /api/v2/ μΆ”κ°€ μ‹œ, v2/ λ””λ ‰ν† λ¦¬λ§Œ μƒμ„±ν•˜λ©΄ 버전 뢄리 κ°€λŠ₯
  • Vector DB ꡐ체(예: Chroma β†’ Weaviate) μ‹œ vector_store.py만 μˆ˜μ •

3. ν…ŒμŠ€νŠΈ 및 디버깅 μ΅œμ ν™”

  • λ‹¨μœ„λ³„ μœ λ‹› ν…ŒμŠ€νŠΈ κ°€λŠ₯ (prompt_manager, rag_engine, recommender)
  • 였λ₯˜ 좔적 λ²”μœ„ μΆ•μ†Œ β†’ 디버깅 속도 ν–₯상

4. νŒ€ 개발 νš¨μœ¨μ„± 증가

  • API, μ„œλΉ„μŠ€, λͺ¨λΈ μ˜μ—­ 뢄리 β†’ μ—­ν•  기반 ν˜‘μ—… ꡬ쑰 ν˜•μ„±
  • ν”„λ‘ νŠΈ/λͺ¨λΈ/λ°±μ—”λ“œ κ°„ μž‘μ—… 병렬화 κ°€λŠ₯

5. 운영 μ•ˆμ •μ„± 확보

  • μ„œλΉ„μŠ€ μž₯μ•  μ‹œ ν•΄λ‹Ή λͺ¨λ“ˆλ§Œ Hotfix κ°€λŠ₯
  • μ„€μ •, λͺ¨λΈ, 둜그 λ“± 인프라 μ½”λ“œλ„ λΆ„λ¦¬λ˜μ–΄ 배포 좩돌 μ΅œμ†Œν™”

⚠️ **GitHub.com Fallback** ⚠️