콘텐츠로 이동

벤치마크 테스트

LLM 검색 기능의 성능을 객관적으로 비교하기 위한 벤치마크 테스트 방법론입니다.

ProviderMode설명
ollama_basicOllama (로컬)Qwen3:8b 모델, 로컬 실행
openai_basicOpenAIGPT-4o, 기본 프롬프트
openai_ragOpenAI + RAGGPT-4o + 서비스 메타데이터 컨텍스트
openai_rag_extendedOpenAI + RAG (확장)GPT-4o + ES 샘플 데이터 포함
  1. 응답 시간 (Response Time)

    • 평균 응답 시간 (ms)
    • P95 응답 시간
    • 최대/최소 응답 시간
  2. 품질 (Quality)

    • 키워드 수 (요청한 개수 충족 여부)
    • 키워드 관련성 (수동 평가)
    • 한국어 품질
  3. 비용 (Cost)

    • 토큰 사용량 (input/output)
    • 추정 비용 (USD)
    • 쿼리당 평균 비용
  4. 안정성 (Stability)

    • 성공률 (%)
    • 에러 유형 분석
    • 타임아웃 발생 빈도

42개 쿼리, 7개 카테고리:

카테고리쿼리 수난이도 분포
인구_통계6Easy 2, Medium 4
경제_산업6Easy 2, Medium 4
환경_기후6Easy 2, Medium 3, Hard 1
교통_도시6Easy 2, Medium 3, Hard 1
복지_문화6Easy 1, Medium 5
역사_사진6Easy 1, Medium 4, Hard 1
특수_케이스6Various
{
"인구_통계": [
"서울 인구 변화",
"강남구 인구수",
"서울 출산율 추이"
],
"특수_케이스": [
"최근 5년간 서울 청년 실업률 변화", // 복잡한 시간 범위
"강남 vs 강북 소득 격차", // 비교형
"AI" // 짧은 쿼리
]
}
services/llm-search/tests/test_queries.json

  1. 서비스 실행
Terminal window
cd services/llm-search
source .venv/bin/activate
uvicorn app.main:app --host 0.0.0.0 --port 8000
  1. Ollama 실행 (선택적)
Terminal window
ollama serve
ollama run qwen3:8b
  1. OpenAI API 키 확인
Terminal window
cat .env | grep OPENAI_API_KEY
Terminal window
cd services/llm-search
# 빠른 테스트 (3개 쿼리)
python tests/benchmark.py quick
# 전체 테스트 (42개 쿼리)
python tests/benchmark.py full
# Provider 비교 테스트
python tests/benchmark.py compare
Terminal window
# 단일 쿼리 벤치마크
curl -X POST "http://localhost:8000/api/benchmark/single" \
-H "Content-Type: application/json" \
-d '{
"query": "서울 인구",
"providers": ["ollama", "openai"],
"include_rag": true
}'
# 배치 벤치마크
curl -X POST "http://localhost:8000/api/benchmark/batch" \
-H "Content-Type: application/json" \
-d '{
"queries": ["서울 인구", "경제 현황", "대기오염"],
"providers": ["openai"],
"include_rag": true,
"delay_between_queries": 0.5
}'

services/llm-search/tests/results/
├── benchmark_YYYYMMDD_HHMMSS.json # 전체 결과
├── quick_test.json # 빠른 테스트 결과
└── comparison_test.json # 비교 테스트 결과
{
"total_queries": 42,
"timestamp": "2026-01-26T12:00:00.000000",
"results": [...],
"aggregate_summary": {
"total_tests": 168,
"successful_tests": 165,
"failed_tests": 3,
"by_provider": {
"ollama_basic": {
"success_count": 40,
"fail_count": 2,
"avg_response_time_ms": 2450.5,
"total_cost_usd": 0.0,
"avg_keywords": 4.8
},
"openai_basic": {
"success_count": 42,
"fail_count": 0,
"avg_response_time_ms": 850.2,
"total_cost_usd": 0.0147,
"avg_keywords": 5.0
},
"openai_rag": {...},
"openai_rag_extended": {...}
},
"fastest_provider": "openai_basic"
}
}
import json
with open("tests/results/benchmark_*.json") as f:
data = json.load(f)
summary = data["aggregate_summary"]["by_provider"]
# 속도 비교
print("=== 속도 비교 ===")
for provider, stats in sorted(summary.items(), key=lambda x: x[1]["avg_response_time_ms"]):
print(f"{provider}: {stats['avg_response_time_ms']:.0f}ms")
# 비용 비교
print("\n=== 비용 비교 ===")
for provider, stats in summary.items():
print(f"{provider}: ${stats['total_cost_usd']:.4f}")
# 성공률 비교
print("\n=== 성공률 비교 ===")
for provider, stats in summary.items():
rate = stats["success_count"] / (stats["success_count"] + stats["fail_count"]) * 100
print(f"{provider}: {rate:.1f}%")

지표우수보통미흡
응답 시간< 1초1-3초> 3초
성공률> 98%95-98%< 95%
쿼리당 비용< $0.001$0.001-0.005> $0.005
키워드 충족률100%80-100%< 80%
  1. 키워드 관련성

    • 검색어와 직접 관련된 키워드 비율
    • 서울/통계 도메인 적합성
  2. 다양성

    • 동의어, 유사어, 관련 개념 포함 여부
    • 중복 키워드 없음
  3. 한국어 품질

    • 자연스러운 한국어 표현
    • 오탈자 없음
종합 점수 = (속도 * 0.3) + (품질 * 0.4) + (비용 * 0.2) + (안정성 * 0.1)

Provider예상 응답 시간
Ollama (로컬)2-4초
OpenAI Basic0.5-1.5초
OpenAI RAG0.8-2초
OpenAI RAG Extended1-3초 (ES 쿼리 포함)
Provider쿼리당 예상 비용
Ollama$0 (로컬)
OpenAI Basic~$0.0003-0.0005
OpenAI RAG~$0.0005-0.001
OpenAI RAG Extended~$0.001-0.002
Provider강점약점
Ollama비용 무료, 프라이버시속도, 품질 일관성
OpenAI Basic속도, 품질비용
OpenAI RAG도메인 특화, 정확성비용, 속도
OpenAI RAG Extended실데이터 기반, 최고 정확성비용, ES 의존성

  1. Rate Limiting

    • OpenAI: 분당 요청 제한 있음
    • 배치 테스트 시 delay 설정 필요
  2. 비용 관리

    • 전체 테스트 시 예상 비용: ~$0.05-0.10
    • 반복 테스트 시 비용 누적 주의
  3. 환경 일관성

    • 동일 네트워크 환경에서 테스트
    • 서버 부하 상태 확인
  4. Ollama 가용성

    • 로컬 Ollama 미실행 시 해당 테스트 실패
    • 모델 다운로드 필요 (~4GB)

  1. 벤치마크 테스트 실행
  2. 결과 수집 및 분석
  3. 비교테스트 결과 문서 작성 (07_비교테스트_결과.md)
  4. 최적 설정 도출 및 권장사항 정리