SI-DATA 문서 / 검색시스템 설계 문서
버전: 1.0
작성일: 2026-01-14
프로젝트: 서울연구데이터서비스 (si-data)
브랜치: feature/sllm-search-poc
현재 서울연구데이터서비스는 Elasticsearch 기반 검색 시스템을 운영 중이나, 사용자 검색어와 콘텐츠 메타데이터 간 불일치로 인해 검색 효율이 낮은 상황입니다.
Small/Local LLM(SLLM)을 활용하여 검색어를 지능적으로 확장하고, 동의어/유사어 매핑을 통해 검색 정확도 및 CTR(Click-Through Rate)을 향상시킵니다.
| 구성요소 | 기술 | 비고 |
|---|
| 프론트엔드 | Vue.js | 검색 UI |
| 백엔드 | Drupal 11 + PHP 8.3 | search_api.php |
| 검색엔진 | Elasticsearch 7.17.14 | 한글 형태소 분석 |
| 검색 경로 | /node/search, /data/search, /photo/search | 3개 엔드포인트 |
| 지표 | 현재 | 목표 |
|---|
| 검색 CTR | 측정 필요 | +20% 향상 |
| 연관 검색어 제공 | 없음 | LLM 기반 제공 |
| 동의어 처리 | 수동 사전 | 자동 + 관리자 승인 |
┌─────────────────────────────────────────────────────────────────┐
└─────────────────────────┬───────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ (SearchController.php) │
└───────────┬─────────────────────────────────────┬───────────────┘
┌───────────────────────┐ ┌───────────────────────────┐
│ Elasticsearch │ │ FastAPI LLM Service │
│ (기존 검색 결과) │ │ (키워드 확장) │
└───────────┬───────────┘ └───────────┬───────────────┘
│ 3a. 결과 반환 (즉시) │ 3b. Ollama 호출
┌───────────────────────┐ ┌───────────────────────────┐
│ 검색 결과 표시 │ │ Qwen3 8B │
│ (1차 렌더링) │ │ (키워드 추천) │
└───────────────────────┘ └───────────┬───────────────┘
┌───────────────────────────┐
└───────────────────────────┘
| 원칙 | 설명 |
|---|
| 비동기 처리 | LLM 응답 지연이 UX를 저하시키지 않도록 함 |
| 점진적 렌더링 | 기존 결과 먼저 표시, LLM 결과 추가 표시 |
| Fallback | LLM 실패 시 기존 검색 결과만 표시 |
| 관리자 승인 | LLM 제안 동의어는 승인 후 사전에 추가 |
│ └── llm-search/ # Python FastAPI 서비스
│ │ ├── main.py # FastAPI 앱 엔트리
│ │ │ └── keywords.py # 키워드 확장 API
│ │ │ └── llm_client.py # Ollama 클라이언트
│ │ └── synonyms.json # 동의어 사전 (시드)
│ └── modules/custom/si_data/
│ │ └── SearchController.php # LLM 연동 추가
│ └── search.js # 비동기 검색 UI
└── docker-compose.llm.yaml # DDEV LLM 서비스 통합
| 항목 | 선택 | 근거 |
|---|
| Runtime | Ollama | 로컬 실행, 간편한 모델 관리 |
| 모델 | Qwen3 8B | 한국어 우수, Ollama 공식 지원, 5.2GB |
| API 서버 | FastAPI (Python) | 비동기 처리, 빠른 개발 |
| 통신 | HTTP REST | Drupal-Python 간 통신 |
참고: 초기 계획의 EEVE-Korean-10.8B는 Ollama 공식 라이브러리에서 제공되지 않아 Qwen3 8B로 변경했습니다. Qwen3은 한국어 성능이 우수하고 M1 Max 32GB 환경에서 5-6초 응답 시간을 보입니다.
| 단계 | 저장소 | 관리 방식 |
|---|
| PoC | JSON 파일 | 수동 편집 |
| 운영 | MySQL + Admin UI | /admin/config/content/synonyms |
| Endpoint | Method | 설명 |
|---|
/api/keywords/expand | POST | 검색어 확장 (동의어, 연관어) |
/api/keywords/suggest | POST | 신규 동의어 제안 (LLM) |
/api/synonyms | GET/POST | 동의어 사전 조회/추가 |
/health | GET | 서비스 상태 확인 |
| 일차 | 작업 | 산출물 |
|---|
| 1-3 | 환경 구축 | Ollama 설치, Qwen3 8B 모델 다운로드 |
| 4-7 | FastAPI 서비스 개발 | 키워드 확장 API |
| 8-10 | Drupal 연동 | SearchController 수정, JS 비동기 처리 |
| 11-13 | 동의어 사전 구축 | 17개 카테고리 시드 데이터 |
| 14-15 | 테스트 및 측정 | CTR 측정 준비, 성능 테스트 |
- 동의어 사전 Admin UI 개발
- LLM 제안 → 관리자 승인 워크플로우
- CTR 대시보드
- 하드웨어 업그레이드 검토 (필요시)
| 옵션 | 구성 | 초기 비용 | 월 비용 | LLM 속도 | RAG 가능 |
|---|
| A | 현재 Xeon 서버 | ₩0 | ₩0 | 10-20초 | ❌ |
| B | Mac Studio M4 Pro 64GB | ~₩390만 | ₩0 | 2-4초 | △ |
| C | Mac Studio M4 Max 128GB | ~₩750만 | ₩0 | 1-3초 | ✅ |
| D | 클라우드 API 하이브리드 | ₩0 | ₩3~10만 | 1-2초 | ✅ |
└── 로컬 개발 환경 (M1 Max 32GB)에서 검증
└── 옵션 A (현재 서버) + 비동기 처리로 UX 보완
└── 옵션 B 또는 C 검토 (예산 확보 시)
| 투자 | CTR 개선 | 검색 만족도 | 비고 |
|---|
| ₩0 (옵션 A) | +10~15% | 중 | 비동기로 지연 보완 |
| ~₩390만 (옵션 B) | +20~25% | 상 | 실시간 응답 가능 |
| ~₩750만 (옵션 C) | +30%+ | 최상 | RAG 확장 가능 |
├── Day 1: Ollama 설치, Qwen3 8B 모델 다운로드
├── Day 2: FastAPI 프로젝트 구조 생성
├── Day 3: LLM 클라이언트 개발 (Ollama 연동)
└── Day 5: API 테스트 및 프롬프트 튜닝
├── Day 6: Drupal SearchController 수정
├── Day 9: 동의어 사전 시드 데이터 생성
| 리스크 | 영향도 | 대응 방안 |
|---|
| LLM 응답 지연 (>5초) | 높음 | 비동기 처리, 타임아웃 설정 |
| LLM 품질 저하 (환각) | 중간 | 관리자 승인 프로세스, 프롬프트 튜닝 |
| 서버 메모리 부족 | 중간 | 모델 양자화(Q4), 배치 크기 조절 |
| Elasticsearch 연동 오류 | 낮음 | Fallback 로직 (기존 검색만 반환) |
| 동의어 사전 오염 | 낮음 | 승인 워크플로우, 롤백 기능 |
| 항목 | 기준 | 측정 방법 |
|---|
| CTR 향상 | +15% 이상 | 클릭 로그 분석 |
| 응답 시간 | 1차 결과 <1초 | 성능 모니터링 |
| LLM 정확도 | 적합 키워드 80%+ | 샘플 평가 |
| 시스템 안정성 | 99% 가용성 | 에러 로그 분석 |
| 문서 | 경로 |
|---|
| 설치 가이드 | Docs/SLLM_로컬환경_설치가이드.md |
| 동의어 사전 | services/llm-search/app/data/synonyms.json |
| API 명세 | (PoC 완료 후 작성) |
현재 category_data 택소노미 기준:
- 인구가구
- 주택
- 교통
- 환경
- 경제
- 도시계획
- 복지
- 문화관광
- 교육
- 안전
- 보건
- 행정
- 재정
- 노동
- 정보통신
- 에너지
- 기타
| 콘텐츠 타입 | 건수 |
|---|
| digital_photo | 36,775 |
| data_seoul | 476 |
| charts | 123 |
| si_survey | 61 |
| 버전 | 날짜 | 작성자 | 변경 내용 |
|---|
| 1.0 | 2026-01-14 | - | 초안 작성 |
| 1.1 | 2026-01-14 | - | EEVE → Qwen3 8B 모델 변경, Drupal 연동 완료 |