콘텐츠로 이동

SLLM 기반 검색 고도화 시스템 계획서

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.3search_api.php
검색엔진Elasticsearch 7.17.14한글 형태소 분석
검색 경로/node/search, /data/search, /photo/search3개 엔드포인트
지표현재목표
검색 CTR측정 필요+20% 향상
연관 검색어 제공없음LLM 기반 제공
동의어 처리수동 사전자동 + 관리자 승인

섹션 제목: “2.1 비동기 이중 검색 (Async Dual Search)”
┌─────────────────────────────────────────────────────────────────┐
│ User Browser │
└─────────────────────────┬───────────────────────────────────────┘
│ 1. 검색 요청
┌─────────────────────────────────────────────────────────────────┐
│ Drupal Controller │
│ (SearchController.php) │
└───────────┬─────────────────────────────────────┬───────────────┘
│ │
│ 2a. 즉시 검색 │ 2b. 비동기 요청
▼ ▼
┌───────────────────────┐ ┌───────────────────────────┐
│ Elasticsearch │ │ FastAPI LLM Service │
│ (기존 검색 결과) │ │ (키워드 확장) │
└───────────┬───────────┘ └───────────┬───────────────┘
│ │
│ 3a. 결과 반환 (즉시) │ 3b. Ollama 호출
▼ ▼
┌───────────────────────┐ ┌───────────────────────────┐
│ 검색 결과 표시 │ │ Qwen3 8B │
│ (1차 렌더링) │ │ (키워드 추천) │
└───────────────────────┘ └───────────┬───────────────┘
│ 4. 확장 키워드 반환
┌───────────────────────────┐
│ 추가 검색 결과 │
│ (2차 렌더링, Progressive)│
└───────────────────────────┘
원칙설명
비동기 처리LLM 응답 지연이 UX를 저하시키지 않도록 함
점진적 렌더링기존 결과 먼저 표시, LLM 결과 추가 표시
FallbackLLM 실패 시 기존 검색 결과만 표시
관리자 승인LLM 제안 동의어는 승인 후 사전에 추가
si-data/
├── services/
│ └── llm-search/ # Python FastAPI 서비스
│ ├── app/
│ │ ├── main.py # FastAPI 앱 엔트리
│ │ ├── routes/
│ │ │ └── keywords.py # 키워드 확장 API
│ │ ├── services/
│ │ │ └── llm_client.py # Ollama 클라이언트
│ │ └── data/
│ │ └── synonyms.json # 동의어 사전 (시드)
│ ├── requirements.txt
│ ├── Dockerfile
│ └── docker-compose.yml
├── web/
│ └── modules/custom/si_data/
│ ├── src/Controller/
│ │ └── SearchController.php # LLM 연동 추가
│ └── js/
│ └── search.js # 비동기 검색 UI
└── .ddev/
└── docker-compose.llm.yaml # DDEV LLM 서비스 통합

항목선택근거
RuntimeOllama로컬 실행, 간편한 모델 관리
모델Qwen3 8B한국어 우수, Ollama 공식 지원, 5.2GB
API 서버FastAPI (Python)비동기 처리, 빠른 개발
통신HTTP RESTDrupal-Python 간 통신

참고: 초기 계획의 EEVE-Korean-10.8B는 Ollama 공식 라이브러리에서 제공되지 않아 Qwen3 8B로 변경했습니다. Qwen3은 한국어 성능이 우수하고 M1 Max 32GB 환경에서 5-6초 응답 시간을 보입니다.

단계저장소관리 방식
PoCJSON 파일수동 편집
운영MySQL + Admin UI/admin/config/content/synonyms
EndpointMethod설명
/api/keywords/expandPOST검색어 확장 (동의어, 연관어)
/api/keywords/suggestPOST신규 동의어 제안 (LLM)
/api/synonymsGET/POST동의어 사전 조회/추가
/healthGET서비스 상태 확인

일차작업산출물
1-3환경 구축Ollama 설치, Qwen3 8B 모델 다운로드
4-7FastAPI 서비스 개발키워드 확장 API
8-10Drupal 연동SearchController 수정, JS 비동기 처리
11-13동의어 사전 구축17개 카테고리 시드 데이터
14-15테스트 및 측정CTR 측정 준비, 성능 테스트

4.2 Phase 2: 프로덕션 (콘텐츠 타입 마이그레이션 후)

섹션 제목: “4.2 Phase 2: 프로덕션 (콘텐츠 타입 마이그레이션 후)”
  • 동의어 사전 Admin UI 개발
  • LLM 제안 → 관리자 승인 워크플로우
  • CTR 대시보드
  • 하드웨어 업그레이드 검토 (필요시)

옵션구성초기 비용월 비용LLM 속도RAG 가능
A현재 Xeon 서버₩0₩010-20초
BMac Studio M4 Pro 64GB~₩390만₩02-4초
CMac Studio M4 Max 128GB~₩750만₩01-3초
D클라우드 API 하이브리드₩0₩3~10만1-2초
1. PoC (현재)
└── 로컬 개발 환경 (M1 Max 32GB)에서 검증
2. 1차 배포
└── 옵션 A (현재 서버) + 비동기 처리로 UX 보완
3. CTR 개선 확인 후
└── 옵션 B 또는 C 검토 (예산 확보 시)
투자CTR 개선검색 만족도비고
₩0 (옵션 A)+10~15%비동기로 지연 보완
~₩390만 (옵션 B)+20~25%실시간 응답 가능
~₩750만 (옵션 C)+30%+최상RAG 확장 가능

Week 1 (Day 1-5)
├── Day 1: Ollama 설치, Qwen3 8B 모델 다운로드
├── Day 2: FastAPI 프로젝트 구조 생성
├── Day 3: LLM 클라이언트 개발 (Ollama 연동)
├── Day 4: 키워드 확장 API 개발
└── Day 5: API 테스트 및 프롬프트 튜닝
Week 2 (Day 6-10)
├── Day 6: Drupal SearchController 수정
├── Day 7: 비동기 검색 JS 개발
├── Day 8: 프론트엔드 통합 테스트
├── Day 9: 동의어 사전 시드 데이터 생성
└── Day 10: 동의어 매핑 로직 구현
Week 3 (Day 11-15)
├── Day 11: 통합 테스트
├── Day 12: 성능 최적화
├── Day 13: CTR 측정 코드 삽입
├── Day 14: 문서화
└── Day 15: PoC 완료 보고서

리스크영향도대응 방안
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 택소노미 기준:

  1. 인구가구
  2. 주택
  3. 교통
  4. 환경
  5. 경제
  6. 도시계획
  7. 복지
  8. 문화관광
  9. 교육
  10. 안전
  11. 보건
  12. 행정
  13. 재정
  14. 노동
  15. 정보통신
  16. 에너지
  17. 기타
콘텐츠 타입건수
digital_photo36,775
data_seoul476
charts123
si_survey61

버전날짜작성자변경 내용
1.02026-01-14-초안 작성
1.12026-01-14-EEVE → Qwen3 8B 모델 변경, Drupal 연동 완료