프롬프트 버전 관리 시스템 도입기

문제 상황

사내 여러 서비스에서 Claude와 GPT를 활용하고 있는데, 프롬프트가 각 개발자의 코드에 하드코딩되어 있었다. 같은 목적의 프롬프트가 미묘하게 다른 버전으로 여러 곳에 존재했고, 누가 언제 어떤 이유로 수정했는지 추적이 불가능했다.

특히 문제가 된 건 A/B 테스트였다. 프롬프트 변경으로 결과가 달라졌을 때, 이전 버전으로 롤백하거나 비교할 방법이 없었다.

해결 방안

프롬프트를 코드와 분리하고, 별도 저장소에서 버전 관리하기로 했다. 구조는 다음과 같다.

// prompts/summarize/v1.0.0.yaml
name: document-summarize
version: 1.0.0
model: claude-3-5-sonnet
temperature: 0.3
system: |
  당신은 기술 문서 요약 전문가입니다.
  핵심 내용을 3가지로 요약해주세요.
user_template: |
  다음 문서를 요약해주세요:
  {{document}}
// 애플리케이션 코드
import { loadPrompt } from '@/lib/prompt-loader';

const prompt = await loadPrompt('document-summarize', '1.0.0');
const response = await claude.generate({
  system: prompt.system,
  messages: [{ role: 'user', content: prompt.render({ document }) }]
});

추가 개선 사항

  • YAML 파일에 changelog 섹션을 추가해 변경 이유 기록
  • 프로덕션은 명시적 버전, 개발은 latest 태그 사용
  • 프롬프트 변경 시 자동으로 성능 테스트 실행하는 CI 파이프라인 구축

이제 프롬프트 수정 이력이 명확해졌고, 문제 발생 시 빠르게 롤백할 수 있게 됐다. 무엇보다 팀원들과 프롬프트 개선 사항을 PR로 리뷰하면서 노하우가 공유되는 게 가장 큰 장점이었다.