[AI] 서비스 아키텍처 V2 설계 - 100-hours-a-week/6-nemo-wiki GitHub Wiki
🧱 AI 모듈 분리 기반 서비스 아키텍처 설계 (V2)
1. 🎯 설계 목표
현재 단일 애플리케이션 내에 포함된 AI 모델 추론 기능을 모델 서빙 전용 모듈로 분리함으로써 다음과 같은 목표를 달성합니다:
- 기능별 책임 분리로 유지보수성과 안정성 향상
- 독립적인 배포 및 확장 가능성 확보
- AI 추론 서비스의 장애가 전체 서비스에 영향을 주지 않도록 격리
원본 아키텍처 다이어그램

리팩토링 후 아키텍처 다이어그램
[사용자 요청]
│
▼
[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와도 독립된 연동
- 확장성, 안정성, 유지보수성 모두 향상