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로 실행해 보세요. 과정이 매우 매끄러워집니다.

Source: https://dev.to/__c1b9e06dc90a7e0a676b/i-built-a-git-commit-message-generator-with-ai-heres-what-i-learned-2534

Optional learning community: https://t.me/GyaanSetuAi