2025년 4월 22일 작성
Udacity Git Commit Message Style Guide
Udacity에서 제공하는 Git commit message style guide를 사용하여, 일관된 commit message를 작성함으로써, team 전체의 생산성을 향상시킬 수 있습니다.
Udacity의 Git Commit Message Convention
- Git commit message는 project history를 체계적으로 기록하기 위한 중요한 요소입니다.
- 잘 작성된 commit message는 code review를 용이하게 하고 project 관리 효율성을 높입니다.
- Udacity의 style guide는 일관성 있는 형식의 commit message 작성법을 제시합니다.
- Udacity는 대규모 공개 online lecture를 제공하는 교육 기관이며, 이상적인 commit message에 대해 혼란을 겪는 학생들을 위해서 Git commit message style guide를 정하여 제공하고 있습니다.
- 이 guide는 Udacity 과정의 학생들이 project 제출 시 준수해야 하는 기준입니다.
- Udacity의 평가자들은 이 guide에 따라 commit message의 품질을 평가합니다.
- Udacity는 대규모 공개 online lecture를 제공하는 교육 기관이며, 이상적인 commit message에 대해 혼란을 겪는 학생들을 위해서 Git commit message style guide를 정하여 제공하고 있습니다.
-
Udacity의 style guide는 가장 흔히 사용되는 commit message style이기도 합니다.
- Udacity guide는 영어를 기준으로 작성된 guide이기 때문에, 한글로 작성할 때는 규칙을 유지하면서도 한글에 맞게 변형하여 작성하는 것이 좋습니다.
- 예를 들어, 영어에서는 대문자로 시작하는 것이 일반적이지만, 한글에서는 대문자 개념이 없으므로 대문자 규칙은 적용이 불가능합니다.
- 또는, 영어에서는 동사를 사용해 명령형으로 작성하는 것이 일반적이지만, 한글에서는 명령형이 아닌 명사형으로 작성하는 것이 자연스럽습니다.
- 이런 식으로 한글에 맞게 변형하여 작성하는 것이 더 자연스럽고 읽기 쉬운 commit message를 작성하는 데 도움이 됩니다.
Message Structure
type: subject
body
footer
- commit message는 title, body, footer의 세 가지 주요 구성 요소로 이루어집니다.
- 이 중 title은 subject와 type으로 또 나뉩니다.
- 각 구성 요소(title, body, footer)는 빈 줄로 구분하여 작성합니다.
구성 | Title | Body | Footer |
---|---|---|---|
필수 여부 | 필수 | 선택 | 선택 |
형식 | type: subject |
body |
footer |
구성 | type(commit 유형 분류)과 subject(commit 내용 간략 요약)으로 구성 | 복잡한 변경이나 중요 결정 설명 위주, what(무엇을)과 why(왜) 설명 | issue tracker ID 참조, 주요 변경에 대한 호환성 정보 |
역할 | commit의 목적과 성격을 명확히 나타냄, commit 내용을 간결하게 요약 | commit에 대한 자세한 맥락과 설명 제공, 복잡한 변경 사항이나 중요한 결정 사항 설명 | issue tracker와의 연결성 제공, 변경 사항 호환성 정보 제공, 이전 기능 중단 명시 |
글자 수 제한 | subject 영역은 50자 이내 | 한 줄에 72자 이내 | 한 줄에 72자 이내 |
특징 | 마침표 사용 안 함 | “어떻게”에 대한 내용은 작성하지 않음 | 부가 정보 제공 |
Type
- type은 commit의 목적과 성격을 명확히 나타내는 분류 체계입니다.
Type | 설명 | 특징 |
---|---|---|
feat | 새로운 기능 추가 | |
fix | bug 수정 | |
docs | 문서 변경 | README 수정 등 |
style | code 변경 없이 형식만 수정 | semi colon, code formatting 등 |
refactor | production code refactoring | 기능에는 변경 없음 |
test | test code 추가/개선 관련 변경 | production code 수정 없음 |
chore | production code 변경 없는 유지 보수 작업 | build file update, package manager 설정 수정 등 |
Subject
- subject는 commit 내용을 간결하게 요약한 문장입니다.
- 50자 이내로 제한합니다.
- 대문자로 시작합니다.
- 마침표를 사용하지 않습니다.
- 영어로 작성할 때는 명령형 현재 시제를 사용하여 작성합니다.
- “Add feature”와 같이 commit이 “무엇을 하는지”를 명령형으로 서술합니다.
- “Added feature”, “Adds feature”와 같은 표현은 지양합니다.
- 한글로 작성할 때는 명사형 현재 시제를 사용하여 작성합니다.
- “자동 이메일 알림 시스템 구현”과 같이 commit이 “무엇을 하는지”를 명사형으로 서술합니다.
- “자동 이메일 알림 시스템을 구현했음”, “자동 이메일 알림 시스템을 구현하는 중”와 같은 표현은 지양합니다.
Body
- body는 commit에 대한 자세한 맥락과 설명을 제공합니다.
- 복잡한 변경 사항이나 중요한 결정 사항을 설명할 때 사용합니다.
- 각 줄은 72자를 넘지 않도록 합니다.
- “무엇을” 변경했는지와 “왜” 변경했는지에 초점을 맞춥니다.
- “어떻게” 구현했는지는 code 자체가 설명하므로 본문에서는 생략합니다.
- 제목과 본문 사이에는 반드시 한 줄을 비워둡니다.
Footer
- footer는 issue tracker와의 연결성을 제공합니다.
- “Resolves: #123”와 같이 해결된 issue를 참조합니다.
- “See also: #456, #789”와 같이 관련 issue를 추가로 언급할 수 있습니다.
- footer는 issue tracker ID 참조 외에도 주요 변경 사항을 명시하는 데 사용됩니다.
- “BREAKING CHANGE: API 응답 구조 변경”과 같이 이전 version과 호환되지 않는 변경 사항을 표시합니다.
- “Deprecated: 다음 버전에서 user_info() 함수는 제거될 예정임”과 같이 기능 중단 예고를 명시할 수 있습니다.
- 이러한 정보는 다른 개발자들에게 중요한 영향을 미치는 변경 사항을 미리 알리는 역할을 합니다.
Commit Message 예시
feat: Implement automatic email notification system
Add functionality to automatically send email notifications when a user
submits a new form. This addresses the customer feedback requesting
immediate confirmation of their submissions.
The system uses the existing email service API but adds a new template
specifically designed for form submissions. Error handling is included
to prevent failed notifications from affecting the form submission process.
Resolves: #142
See also: #65, #78
feat: 자동 이메일 알림 시스템 구현
사용자가 새 양식을 제출할 때 자동으로 이메일 알림을 보내는 기능 추가.
이는 제출 즉시 확인을 요청하는 고객 피드백을 반영한 것임.
기존 이메일 서비스 API를 사용하되, 양식 제출용으로 특별히 디자인된 새 템플릿을 추가함.
알림 실패가 양식 제출 과정에 영향을 미치지 않도록 오류 처리 기능 포함.
해결: #142
참고: #65, #78
Commit Guide를 준수했을 때의 장점
- 일관된 commit message는 project history를 이해하기 쉽게 만듭니다.
- 새로운 팀원이 project에 합류했을 때 빠르게 맥락을 파악할 수 있습니다.
- 특정 변경 사항을 추적하고 이해하는 시간을 단축합니다.
- code review 과정에서 변경 의도를 명확히 전달할 수 있습니다.
- 여러 branch 간의 merge conflict 해결 시 의사 결정을 용이하게 합니다.
- 체계적인 변경 기록은 향후 발생할 수 있는 문제 해결에 도움이 됩니다.
- bug가 발생했을 때 관련 변경 사항을 쉽게 찾을 수 있습니다.
- 변경 이유와 맥락을 이해하는 데 필요한 정보를 제공합니다.
- git bisect와 같은 도구를 사용하여 문제가 시작된 commit을 효율적으로 찾아낼 수 있습니다.
- 새로운 bug fix가 이전 변경과 충돌하지 않도록 context를 제공합니다.
- team 협업 효율성을 크게 향상시킵니다.
- 모든 팀원이 동일한 형식으로 소통함으로써 의사소통 오류를 줄입니다.
- code review 시간을 단축하고 review 품질을 높입니다.
- 분산된 환경에서 작업하는 팀원들 간의 원활한 정보 공유를 지원합니다.
- 새로운 기능 개발 시 관련 이전 작업을 쉽게 참조할 수 있습니다.
- 자동화 도구와의 통합이 용이해집니다.
- CI/CD pipeline에서 commit type에 따른 자동 배포 정책 설정이 가능합니다.
- semantic versioning과 연계하여 자동으로 version 번호를 관리할 수 있습니다.
- commit 내용을 기반으로 자동 changelog 생성이 가능합니다.
- issue tracker와 연동하여 작업 상태를 자동으로 update할 수 있습니다.
- 개발자의 전문성 향상에 기여합니다.
- 명확한 commit message 작성 습관은 coding 작업의 목적과 방향성을 더 정확히 인식하게 합니다.
- 자신의 변경 사항을 체계적으로 설명하는 능력을 기릅니다.
- 다른 팀원들의 code와 변경 사항을 더 잘 이해하고 배울 수 있습니다.
- 장기적으로 더 나은 설계 결정과 coding 관행을 발전시키는 데 도움이 됩니다.