zioinfo-mail/manual/32_벡터DB_제안서.md
DESKTOP-TKLFCPR\ython 11c670f2a0 refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

3.4 KiB

GUARDiA 벡터 데이터베이스 제안서

서버: zio-server (zioinfo.co.kr) | 작성일: 2026-05-30


1. 벡터 DB 비교

DB 설치 메모리 영속성 REST API 한국어 GUARDiA 적합성
ChromaDB pip 낮음 파일 기반 (Python) 1순위
Qdrant Docker 중간 볼륨 2순위
FAISS pip 낮음 없음(메모리) 빠른 검색
Weaviate Docker 높음 볼륨 대규모 용
Milvus Docker 높음 볼륨 엔터프라이즈

2. 최종 선택: ChromaDB

선택 이유

  • 설치 간편: pip install chromadb 한 줄
  • 서버 RAM 절약: 7.8GB RAM 환경에 최적
  • Python 직접 통합: GUARDiA FastAPI와 완벽 연동
  • 로컬 파일 영속: 별도 서비스 불필요
  • Ollama 임베딩 연동: nomic-embed-text 온프레미스 임베딩

설치 및 설정

# 설치
/opt/guardia/venv/bin/pip install chromadb langchain-chroma

# 디렉터리
mkdir -p /opt/guardia/vectordb

GUARDiA 연동 코드

import chromadb
from chromadb.config import Settings

# 클라이언트 초기화
client = chromadb.PersistentClient(
    path="/opt/guardia/vectordb",
    settings=Settings(anonymized_telemetry=False)
)

# 컬렉션 생성
collection = client.get_or_create_collection(
    name="guardia_kb",
    metadata={"hnsw:space": "cosine"}
)

# 문서 추가
collection.add(
    documents=["서버 재시작 절차: systemctl restart guardia"],
    metadatas=[{"type": "kb", "category": "deployment"}],
    ids=["kb-001"]
)

# 유사도 검색
results = collection.query(
    query_texts=["guardia 서비스 재시작하는 방법"],
    n_results=3
)

3. 2순위: Qdrant (Docker)

RAM이 충분하거나 REST API가 필요한 경우 추천합니다.

docker run -d --name qdrant \
  -p 6333:6333 \
  -v /opt/guardia/qdrant:/qdrant/storage \
  qdrant/qdrant

4. GUARDiA 코드베이스 학습 계획

학습 데이터 소스

소스 내용 문서 수 예상
/opt/guardia/app/routers/*.py API 라우터 코드 ~70개
/opt/guardia/app/core/*.py 비즈니스 로직 ~38개
/opt/guardia/app/models.py 데이터 모델 1개 (대용량)
/opt/guardia/app/static/ UI 코드 ~20개
C:/GUARDiA/manual/*.md 운영 문서 ~32개

임베딩 스크립트

# /opt/guardia/app/scripts/embed_codebase.py
from langchain_community.document_loaders import DirectoryLoader, TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_ollama import OllamaEmbeddings
from langchain_chroma import Chroma

loader = DirectoryLoader("/opt/guardia/app", glob="**/*.py",
    loader_cls=TextLoader, loader_kwargs={"encoding": "utf-8"})
docs = loader.load()

splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
chunks = splitter.split_documents(docs)

embeddings = OllamaEmbeddings(
    model="nomic-embed-text",
    base_url="http://localhost:11434"
)

vectordb = Chroma.from_documents(
    chunks, embeddings,
    persist_directory="/opt/guardia/vectordb",
    collection_name="guardia_codebase"
)
print(f"임베딩 완료: {len(chunks)}개 청크")

GUARDiA ITSM v2.0.0 | (주)지오정보기술 | 2026-05-30