- 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>
125 lines
3.4 KiB
Markdown
125 lines
3.4 KiB
Markdown
# 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` 온프레미스 임베딩
|
|
|
|
### 설치 및 설정
|
|
```bash
|
|
# 설치
|
|
/opt/guardia/venv/bin/pip install chromadb langchain-chroma
|
|
|
|
# 디렉터리
|
|
mkdir -p /opt/guardia/vectordb
|
|
```
|
|
|
|
### GUARDiA 연동 코드
|
|
```python
|
|
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가 필요한 경우 추천합니다.
|
|
|
|
```bash
|
|
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개 |
|
|
|
|
### 임베딩 스크립트
|
|
```python
|
|
# /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*
|