[AI] 서비스 아키텍처 V2 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki

🧱 AI 모듈 분리 기반 서비스 아키텍처 설계 (V2)

1. 🎯 설계 목표

현재 단일 애플리케이션 내에 포함된 AI 모델 추론 기능을 모델 서빙 전용 모듈로 분리함으로써 다음과 같은 목표를 달성합니다:

  • 기능별 책임 분리로 유지보수성과 안정성 향상
  • 독립적인 배포 및 확장 가능성 확보
  • AI 추론 서비스의 장애가 전체 서비스에 영향을 주지 않도록 격리

원본 아키텍처 다이어그램

image

리팩토링 후 아키텍처 다이어그램

[사용자 요청]
     │
     ▼
[Backend API 서버 (FastAPI)]
     │
     ├── /ai/v1/...  →  [AI 서버 (모델 서빙 모듈)]
     │                      ├─ LLM 기반 질문 생성
     │                      ├─ 답변 분석
     │                      └─ 자유 입력 추천
     │
     └── /vector/...  →  [벡터 DB (ChromaDB)]

3. 🧩 모듈 구성 및 책임

모듈 책임 (Domain) 분리 이유
AI 서버 모델 추론 처리 (질문 생성, 답변 분석, 추천) LLM 추론 부하와 응답 지연이 발생할 수 있으므로 별도 서비스로 격리
Backend API 서버 유저 요청 라우팅, 인증, DB 처리 핵심 비즈니스 로직과 AI 추론을 분리하여 안정성 확보
Vector DB 모임/사용자 정보 임베딩 저장 및 유사도 검색 RAG 기반 추천의 확장성을 위해 별도 저장소 필요

4. 🔌 인터페이스 설계

✅ AI 서버와의 연동 (FastAPI → AI 서버)

  • 통신 방식: REST API (HTTP)
  • 요청 예시
POST /ai/v2/chatbot/freeform
{
  "user_id": "123",
  "query": "사람 많은 곳은 피하고 싶어요"
}
  • 응답 예시
{
  "code": 200,
  "message": "추천 완료",
  "data": {
    "context": "조용한 독서 모임 추천",
    "groupId": ["123", "456"]
  }
}

✅ AI 서버 ↔ Vector DB

  • 임베딩 저장 요청
POST /ai/v2/vector/save/groups
{
  "data": {
    "name": "...",
    "summary": "...",
    ...
  }
}
  • 사용자 정보 저장 요청
POST /ai/v2/vector/save/users
{
  "data": {
    "user_id": "1234",
    "group_id": ["567", "890"]
  }
}

5. 📈 기대 효과

항목 설명
독립 배포 AI 서버가 문제 발생 시, 백엔드 서비스는 정상 유지 가능
개발 병렬화 AI 팀과 백엔드 팀이 분리된 모듈에서 병렬로 작업 가능
유연한 모델 교체 모델 교체 시 백엔드 수정 불필요, API 스펙만 유지
확장성 향후 GPU 서버 또는 큐 기반 아키텍처로 확장 용이

6. ✅ 설계 근거 및 서비스 부합성

  • V2에서는 챗봇 기능이 본격적으로 도입되며, LLM 호출이 잦아질 예정입니다.
  • 따라서 추론 로직을 분리하지 않을 경우 다음과 같은 문제가 예상됩니다:
    • FastAPI 전체의 응답 지연
    • 모델 추론 실패 시 전체 장애 유발
  • 예시 시나리오
    • 사용자가 챗봇에 자유 입력 → LLM 서버 부하 발생 → API 서버 전체 응답 실패
      → AI 서버를 분리하면 해당 문제는 AI 서버 내부에 한정됨

✅ 요약

  • 모델 추론 기능을 AI 서버로 완전 분리
  • REST API 기반 통신으로 인터페이스 명확화
  • 벡터 DB와도 독립된 연동
  • 확장성, 안정성, 유지보수성 모두 향상