[V2] 벡터 디비 RAG 구조 설계 문서 - 100-hours-a-week/6-nemo-ai GitHub Wiki

💾 벡터 DB (Chroma) 기반 RAG 구조 설계 문서

✅ 목표

네모 프로젝트에 Chroma 기반 벡터 데이터베이스를 도입하여,

모임 정보를 저장하고, 사용자 질문에 유사한 모임을 검색하여

LLM이 context 기반 응답을 생성할 수 있도록 RAG 파이프라인을 구축합니다.


🗂️ 디렉토리 및 파일 구조

src/
├── vector_store/                        # ✅ 새로 생성
│   ├── chroma_client.py                # Chroma 연결 및 초기화
│   ├── embedder.py                     # 텍스트 → 벡터 임베딩
│   ├── document_builder.py             # JSON 모임 → 문서(text + metadata)
│   ├── vector_indexer.py               # 벡터 DB에 삽입 / 삭제
│   ├── vector_searcher.py              # 질문 → Top-K 검색
│
├── services/
│   └── v1/
│       └── chat_service.py             # 🛠️ 수정: RAG 검색 → LLM 응답 생성
│
├── router/
│   └── chat.py                         # 🛠️ 수정: 질문 → 응답 SSE or POST
│
├── core/
│   └── config.py                       # 🛠️ 수정: CHROMA_DB_PATH, EMBED_MODEL 설정
│
├── .env                                # 🛠️ 수정: 환경별 설정값 저장


🛠️ 작성/수정해야 할 파일 목록

파일 경로 설명
vector_store/chroma_client.py Chroma DB 연결 및 생성, 경로 설정 처리 포함
vector_store/embedder.py embedding 모델 로딩 및 텍스트 → 벡터 함수
vector_store/document_builder.py JSON 모임 데이터 → 텍스트 및 메타데이터 구성
vector_store/vector_indexer.py 문서 삽입, 삭제 등 DB 업데이트 기능
vector_store/vector_searcher.py 질문 임베딩 후 Top-K 유사 chunk 검색
core/config.py .env로부터 설정값 로딩 (CHROMA_DB_PATH, APP_ENV)
services/v1/chat_service.py 벡터 검색 + LLM 통합 호출 구성
router/chat.py 질문 요청 수신 및 응답 반환 라우터 구현 (SSE or POST)
.env 환경 변수 설정 파일 (APP_ENV, CHROMA_DB_PATH 등)

🔁 전체 동작 흐름

1. 모임 정보 저장

모임 JSON
  ↓
document_builder.py
  ↓
embedder.py
  ↓
vector_indexer.py
  ↓
Chroma DB 저장

2. 사용자 질문 처리

사용자 질문
  ↓
embedder.py (질문 벡터화)
  ↓
vector_searcher.py (Top-K 검색)
  ↓
chat_service.py (LLM 호출 + 응답 생성)
  ↓
chat.py (응답 반환)


🌐 .env 예시

APP_ENV=development
CHROMA_DB_PATH=./data_dev/chroma
EMBED_MODEL_NAME=bge-small-en


❓ 자주 묻는 질문

Q1. .gitignore로 무시되는 로컬 DB는 사용 가능한가요?

✅ 네, Git에는 포함되지 않지만 코드에서 정상적으로 접근, 저장, 검색이 가능합니다.

Q2. Chroma DB는 서버 재시작 시 초기화되나요?

❌ 아니요. reset()을 직접 호출하지 않는 이상 기존 DB는 유지됩니다.

Q3. 환경별 경로 분리가 왜 필요한가요?

  • 개발 중 데이터 오염 방지
  • 테스트/배포 시 충돌 방지
  • 실험 및 디버깅에 유리

✅ 결론

  • Chroma 벡터 DB를 모듈화하여 구현하면 RAG 파이프라인이 체계적으로 구성됨
  • 환경별 설정을 .env + config.py로 분리하면 유지보수에 유리함
  • 구조 분리로 향후 확장 (예: 추천 기능, 유사도 분석)도 쉬움