핵심 요약 (Summary)
AI 하네스(Harness)는 LLM(대형 언어 모델)의 출력을 평가하고 테스트하기 위한 프레임워크입니다. 일반 코드는 입력이 같으면 출력이 항상 같지만, AI는 같은 입력에도 매번 다른 결과를 반환할 수 있습니다. 하네스는 이 비결정적인 출력을 체계적으로 검증하고, 프롬프트가 바뀌거나 모델이 업데이트될 때 품질이 유지되는지 측정하는 역할을 합니다. AI 기능을 서비스에 통합할 때 테스트 전략 없이 배포하면 출력 품질을 보장할 수 없습니다.
왜 이런 문제가 발생하나요? (Why)
AI를 서비스에 통합할 때 두 가지 문제가 반복됩니다.
첫째, 프롬프트를 수정했더니 다른 기능이 망가집니다. 블로그 요약 기능의 프롬프트를 개선했는데 태그 추출 기능의 품질이 함께 떨어지는 경우입니다. 모든 AI 기능이 프롬프트와 모델에 의존하기 때문에 한 곳의 변경이 다른 곳에 영향을 줄 수 있지만, 테스트가 없으면 배포 후에야 발견합니다.
둘째, 모델이 업데이트되면 기존 동작이 달라집니다. OpenAI나 Anthropic이 모델을 조용히 업데이트하면 같은 프롬프트에 대한 응답 형식이나 품질이 바뀔 수 있습니다. 하네스 없이는 이 변화를 감지할 방법이 없어 서비스에 조용히 문제가 쌓입니다.
일반 코드 테스트와 AI 하네스의 차이를 비교하면 다음과 같습니다.
| 항목 | 일반 테스트 | AI 하네스 |
|---|---|---|
| 출력 특성 | 결정적 (항상 동일) | 비결정적 (매번 다를 수 있음) |
| 검증 방식 | 정확한 값 비교 | 형식, 패턴, 의미적 유사도 검증 |
| 실패 기준 | 값이 다르면 실패 | 품질 점수가 임계값 미달이면 실패 |
| 비용 | 무료 | API 호출 비용 발생 |
| 속도 | 빠름 | 느림 (네트워크 지연 포함) |
잘못된 접근 방식 (Bad Example)
AI 기능을 테스트 없이 배포하는 경우 두 가지 패턴이 반복됩니다.
출력 형식을 지정하지 않는 경우. 프롬프트에 "태그를 추출해줘"라고만 요청하면 모델이 React, Next.js처럼 쉼표로 구분해 반환하거나, ["React", "Next.js"]처럼 배열 형태로 반환하거나, 문장으로 설명하기도 합니다. 응답 형식이 매번 달라지면 이를 처리하는 코드가 예측 불가능한 상황에서 오류를 냅니다.
수동으로 눈으로만 확인하는 경우. 프롬프트를 바꿀 때마다 개발자가 직접 결과를 콘솔에서 확인합니다. 이 방식은 히스토리가 남지 않고, 어떤 케이스가 이전보다 나빠졌는지 알 수 없습니다. 확인하지 않은 케이스에서 조용히 품질이 저하됩니다.
올바른 접근 방식 (Good Example)
AI 하네스는 세 가지 전략을 조합해 구성합니다.
1단계 — 출력 구조화로 비결정성 줄이기
프롬프트에 시스템 메시지로 출력 형식을 명확히 지정합니다. "반드시 JSON 배열 형식으로만 응답하세요"처럼 형식을 강제하면 파싱 실패를 방지할 수 있습니다. OpenAI의 response_format: json_object 옵션처럼 모델 수준에서 구조화된 출력을 강제하는 기능을 적극 활용합니다. 출력이 구조화될수록 테스트가 쉬워집니다.
2단계 — 단위 테스트와 통합 테스트 분리
API를 모킹한 단위 테스트는 출력 형식과 처리 로직만 검증합니다. 실제 API를 호출하는 통합 테스트는 배포 전 수동으로 실행하거나 CI에서 별도 플래그로 제어합니다. 통합 테스트에서는 정확한 값 비교 대신 형식 준수 여부, 배열 길이 범위, 핵심 키워드 포함 여부처럼 최소 품질 기준을 검증합니다.
3단계 — 골든 데이터셋으로 회귀 테스트
자주 사용하는 입력 케이스와 기대 결과를 골든 데이터셋으로 정의합니다. 프롬프트나 모델을 바꿀 때마다 이 데이터셋을 실행해 통과율을 측정합니다. 예를 들어 "10개 케이스 중 8개 이상 통과해야 배포 가능"처럼 기준을 정해두면 품질 저하를 자동으로 감지할 수 있습니다. 통과율이 임계값 미달이면 파이프라인을 멈추고 프롬프트를 재검토합니다.
| 전략 | 방법 | 목적 |
|---|---|---|
| 출력 구조화 | 시스템 메시지로 형식 지정, response_format 활용 | 파싱 안정성 확보 |
| 단위 테스트 | API 모킹 + 형식 검증 | 빠른 피드백, CI 통합 |
| 통합 테스트 | 실제 API 호출 + 품질 기준 | 실제 동작 검증 |
| 회귀 테스트 | 골든 데이터셋 + 통과율 측정 | 프롬프트/모델 변경 감지 |
정리 (Conclusion)
AI 하네스는 비결정적인 LLM 출력을 체계적으로 검증하는 테스트 전략입니다. 정확한 값 비교가 아닌 형식, 패턴, 의미적 관련성을 기준으로 검증하고, 골든 데이터셋 통과율로 품질을 수치화합니다. 프롬프트 하나를 바꿀 때도 전체 AI 기능의 품질을 측정할 수 있는 체계가 있어야 안전하게 개선을 이어갈 수 있습니다.
| 상황 | 권장 전략 |
|---|---|
| AI 기능을 처음 도입할 때 | 출력 형식 구조화 먼저 |
| 프롬프트를 자주 수정하는 경우 | 골든 데이터셋 + 통과율 측정 |
| 모델 버전 업그레이드 전 | 통합 테스트 전체 실행 |
| CI 파이프라인에 포함할 경우 | 모킹 기반 단위 테스트만 포함 |