프롬프트 엔지니어링으로 GPT-4 코드 리뷰 자동화하기
배경
팀 규모가 커지면서 코드 리뷰 병목이 심각해졌다. 간단한 컨벤션 체크나 명백한 이슈는 자동화하고, 리뷰어가 비즈니스 로직에 집중할 수 있도록 GPT-4를 활용하기로 했다.
프롬프트 설계
초기에는 단순히 "이 코드를 리뷰해줘"로 시작했는데, 결과가 일관성 없고 너무 일반적이었다. 몇 가지 개선을 거쳤다.
1. 명확한 역할과 제약 부여
const systemPrompt = `당신은 시니어 TypeScript 개발자입니다.
다음 관점에서만 리뷰하세요:
- 타입 안정성
- 명명 규칙 (camelCase, PascalCase)
- 잠재적 null/undefined 에러
- 불필요한 복잡도
비즈니스 로직은 평가하지 마세요.`;
2. Few-shot 예시 추가
좋은 리뷰와 나쁜 리뷰 예시를 3개씩 포함했더니 출력 품질이 크게 개선됐다.
3. 구조화된 출력 요구
const userPrompt = `
코드:
${diffContent}
다음 JSON 형식으로 응답하세요:
{
"issues": [{"line": 숫자, "severity": "error|warning", "message": "설명"}],
"summary": "전체 요약"
}
`;
JSON 스키마를 명시하니 파싱 실패가 거의 사라졌다.
GitHub Actions 통합
- name: GPT-4 Review
run: |
DIFF=$(git diff origin/main...HEAD)
node scripts/ai-review.js "$DIFF"
PR이 올라오면 자동으로 댓글을 남기도록 구현했다.
결과
- 사소한 컨벤션 지적이 70% 감소
- 리뷰어의 실제 리뷰 시간 30% 단축
- 비용: PR당 평균 $0.15 (diff 크기에 따라 차이)
한계
- 컨텍스트 길이 제한으로 큰 PR은 분할 필요
- 프레임워크 특정 패턴 이해 부족 (Next.js App Router 등)
- 여전히 사람의 최종 판단 필요
프롬프트 엔지니어링의 핵심은 명확한 제약과 구조화된 출력이었다. 범용적인 요청보다 구체적인 태스크 정의가 훨씬 효과적이다.