AI Git 커밋 메시지 생성기를 만들었습니다
예전에는 커밋 메시지를 엉망으로 작성하곤 했습니다.
"fixed bug"나 "updated stuff" 같은 메시지가 흔했습니다. 이로 인해 제 풀 리퀘스트(pull request)는 지저분해졌죠. 그래서 이를 자동화하기 위해 AI 도구를 만들기로 결심했습니다. 코드 diff에서 명확하고 전문적인 메시지를 생성하고 싶었습니다.
생각보다 어려웠습니다. 단순히 프롬프트 하나만 사용해서는 해결되지 않았습니다.
이 과정을 통해 배운 점은 다음과 같습니다.
실패 사례
- 초기 시도는 너무 장황했습니다. AI가 짧은 문장 대신 문단을 작성했습니다.
- AI가 Conventional Commits와 같은 표준 형식을 무시했습니다.
- 지침을 더 많이 추가하자 AI가 존재하지 않는 변경 사항을 만들어내는 환각(hallucination) 현상이 발생했습니다.
- 로컬 모델은 너무 느리거나 이상하고 시적인 스타일로 글을 썼습니다.
해결책
Node.js를 사용하여 세 단계로 구성된 하이브리드 시스템을 구축했습니다.
- 타입 분류(Type Classification): AI가 먼저 타입(feat, fix, chore 등)을 선택하도록 강제했습니다.
- 컨텍스트 축소(Context Truncation): diff의 처음 250줄만 보냅니다. 이를 통해 비용을 절감하고 집중도를 유지합니다.
- 검증(Validation): 정규 표현식(regex)을 사용하여 출력을 확인합니다. 검증에 실패하면 스크립트가 다시 시도합니다.
기술 설정
- 모델: GPT-4o-mini를 사용합니다. 빠르고 저렴합니다.
- Temperature: 0.2로 설정했습니다. 낮은 온도는 지루할 정도로 일관된 메시지를 보장합니다.
- 워크플로우: 자동 커밋은 하지 않습니다. 도구를 사용하여 메시지를 제안받은 다음, 직접 검토하고 수동으로 붙여넣습니다.
개발자를 위한 교훈
- 토큰 제한이 가장 큰 적입니다. 큰 diff는 예산을 초과하거나 프롬프트를 망가뜨릴 수 있습니다.
- 검증은 필수입니다. 정규 표현식 체크가 없으면 쓸모없는 텍스트를 받게 됩니다.
- 수동 검토는 안전장치입니다. AI는 실수를 합니다. 직접 확인하지 않은 채 커밋하게 두지 마세요.
- 개인정보 보호가 중요합니다. 회사에서 금지한다면 민감한 코드를 외부 API로 보내지 마세요.
이 방식을 시도해보고 싶다면 Git alias로 실행해 보세요. 과정이 매우 매끄러워집니다.
Optional learning community: https://t.me/GyaanSetuAi
