docs: skill-embedding 서비스 구축 트러블슈팅 문서 추가

This commit is contained in:
happybell80 2025-08-05 11:22:33 +09:00
parent e3a75c5df8
commit aebb94b8ba

View File

@ -0,0 +1,155 @@
# skill-embedding 서비스 구축 및 배포
**날짜**: 2025-08-05
**작업자**: happybell80 & Claude
**관련 서버**: 51124 (skill-embedding 서비스)
## 오전 10시 30분
### 임베딩 서비스 분리 결정
**배경**:
- rb10508_micro가 987.9MB 메모리 사용 (ONNX 임베딩 모델 포함)
- 각 로빙마다 동일한 임베딩 모델 중복 로드
- 향후 로빙 추가 시 메모리 부담 가중
**해결 방안**:
- 중앙 임베딩 서비스 구축 (skill-embedding)
- 모든 로빙이 HTTP API로 임베딩 요청
- 메모리 절약: 로빙당 ~500MB 절감 예상
## 오전 10시 45분
### 서비스 설계 및 개발
**주요 결정사항**:
1. **포트 번호**: 8600 → 8015 (스킬 서비스 포트 범위)
2. **서비스 이름**: embedding_service → skill-embedding
3. **접근 방식**: 내부 전용 (nginx 프록시 불필요)
**구현 내용**:
```python
# FastAPI 엔드포인트
POST /embed - 텍스트 → 임베딩 변환
GET /health - 헬스체크
```
**기술 스택**:
- FastAPI + Uvicorn
- ONNX Runtime
- multilingual-MiniLM-L12-v2 모델
- 384차원 임베딩
## 오전 11시 00분
### 51124 서버 사전 준비
**서버팀 작업**:
```bash
# 디렉토리 생성
mkdir -p /home/admin/ivada_project/skill-embedding/logs
chmod 777 logs
# ONNX 모델 권한 설정
chown -R 999:999 /home/admin/ivada_project/onnx_models
# 환경변수 설정
cat > .env << EOF
PORT=8015
SERVICE_NAME=skill-embedding
LOG_LEVEL=INFO
MODEL_PATH=/models/onnx/multilingual-MiniLM-L12-v2
EOF
# Docker 공간 정리 (16.16GB 확보)
docker system prune -a -f
```
## 오전 11시 15분
### 배포 및 검증
**Gitea Actions 배포**:
- SSH 키 기반 51124 서버 배포
- Docker Compose로 컨테이너 실행
- 헬스체크 통과
**검증 결과**:
```bash
# 컨테이너 상태
CONTAINER ID IMAGE STATUS PORTS NAMES
abc123def skill-embedding Up 25 seconds 8015/tcp skill-embedding
# 메모리 사용량
skill-embedding: 874.4MB (예상 범위 내)
# API 테스트
curl http://localhost:8015/health
{"status":"healthy","service":"skill-embedding","model":"multilingual-MiniLM-L12-v2","uptime":25.31}
# 임베딩 테스트
curl -X POST http://localhost:8015/embed \
-H "Content-Type: application/json" \
-d '{"texts":["테스트"]}'
# 384차원 벡터 정상 반환
```
## 오전 11시 20분
### ChromaDB 통합 준비
**HTTPEmbeddingFunction 구현**:
```python
class HTTPEmbeddingFunction(EmbeddingFunction):
def __init__(self, embedding_service_url="http://localhost:8015"):
self.url = f"{embedding_service_url}/embed"
def __call__(self, texts):
response = requests.post(self.url, json={"texts": texts})
return response.json()["embeddings"]
```
**적용 대상**:
- rb10508_micro: 988.1MB → ~400MB (예상)
- rb8001: 추후 적용
- rb10408: 추후 적용
## 교훈
1. **서비스 분리의 이점**
- 중복 제거로 메모리 효율성 향상
- 중앙 관리로 유지보수 용이
- 확장성 확보 (새 로빙 추가 시 임베딩 서비스 재사용)
2. **내부 서비스 설계**
- nginx 프록시 불필요한 내부 API는 복잡도 감소
- localhost 통신으로 충분한 성능
- 보안상 외부 노출 불필요
3. **사전 준비의 중요성**
- 서버팀과 긴밀한 협업으로 원활한 배포
- 권한 설정 (logs 777, ONNX 모델 999:999) 필수
- Docker 공간 확보로 빌드 실패 방지
4. **단계적 적용 전략**
- 새 서비스 먼저 안정화
- 하나의 로빙(rb10508_micro)에 시범 적용
- 성공 후 다른 로빙들에 확산
5. **모니터링 지표**
- 메모리 사용량: 874.4MB (ONNX 모델 포함)
- 응답 시간: 단일 텍스트 ~50ms
- 헬스체크: 30초 간격
## 현재 상태
**skill-embedding 서비스**:
- ✅ 정상 가동 중 (포트 8015)
- ✅ 메모리 사용량 안정적 (874.4MB)
- ✅ API 응답 정상
- ✅ 384차원 임베딩 생성 확인
**다음 작업**:
- rb10508_micro의 memory.py 수정
- ONNXEmbeddingFunction → HTTPEmbeddingFunction 교체
- 메모리 절감 효과 측정