소프트웨어 개발 프로젝트에서 커밋 메시지 표준으로 널리 사용되는 컨벤셔널 커밋(Conventional Commits)이 오히려 개발자들의 효율성을 저해하고 있다는 주장이 나왔습니다. 많은 오픈소스 프로젝트와 기업에서 채택하고 있지만, 이 방식이 변경 사항의 핵심 정보를 제대로 전달하지 못하며 개발자들이 불필요한 부분에 집중하게 만든다는 비판입니다.
컨벤셔널 커밋은 `<type>[optional scope]: <description>` 형식으로 커밋 메시지를 작성하도록 권장합니다. 여기서 `type`(예: fix, feat, chore)은 변경 유형을, `scope`는 변경 범위를 나타냅니다. 그러나 비판론자들은 이 형식이 '유형'을 '범위'보다 우선시하는 것이 근본적인 문제라고 지적합니다. 프로젝트 기여자, 디버거, 장애 대응자 등 실제 개발 과정에서 커밋 로그를 확인하는 주체들은 변경이 발생한 코드 영역, 즉 '범위'에 가장 큰 관심을 가집니다. 어떤 유형의 변경이든 버그가 발생할 수 있고, 특정 기능에 대한 업데이트 내용을 파악할 때도 변경 유형보다는 어떤 컴포넌트나 기능이 영향을 받았는지가 훨씬 중요하기 때문입니다. 심지어 '범위'는 선택 사항으로 두면서 '유형'을 필수로 앞세운 것이 문제의 핵심이라는 주장입니다.
또한, 커밋 메시지의 '유형' 정보는 대부분 '설명'만으로도 충분히 유추 가능하며, 오히려 제한적인 커밋 메시지 공간을 불필요하게 차지한다고 비판합니다. 예를 들어, 'fix(compiler): prevent namespaced SVG <style> elements from being stripped'라는 메시지에서 'fix'라는 유형이 없어도 설명만으로 버그 수정임을 알 수 있다는 것입니다. 컨벤셔널 커밋의 주요 이점 중 하나로 꼽히는 '자동 변경 로그(CHANGELOG) 생성' 기능 역시, 사용자 대상의 변경 로그와 개발자 대상의 커밋 로그는 목적과 독자가 다르므로 이를 억지로 통합하려는 시도가 오히려 비효율적이라는 의견도 제기됩니다.
이러한 비판은 개발자들이 커밋 메시지를 작성할 때 본질적으로 중요한 정보가 무엇인지 다시 한번 생각하게 합니다. 단순히 표준을 따르기보다, 실제 개발 워크플로우에서 가장 도움이 되는 방식으로 정보를 구조화하는 것이 중요하다는 메시지를 던집니다. 이는 개발 문화와 도구 선택에 있어 맹목적인 추종보다는 실용성과 효율성을 우선해야 함을 시사합니다.
