커밋 메시지의 중요성
먼저, 커밋 메시지가 왜 중요한지를 이해해야 합니다.
커밋 메시지는 단순히 코드 변경 사항을 추적하는 것 이상의 역할을 합니다.
커밋 메시지는 사람들이 왜 그런 변경을 했는지, 그리고 어떤 문제를 해결하려고 했는지에 대한 중요한 컨텍스트를 제공합니다.
또한, 팀원들이나 후속 작업을 할 사람들이 코드의 변화를 이해하는 데 도움이 됩니다.
하지만, 커밋 메시지를 작성하는 것은 종종 뒷전으로 밀리는 작업입니다.
그래서 Conventional Commits'에 대해 이야기하려 합니다.
코드 커밋 메시지가 더 의미 있고, 효과적으로 관리될 수 있는 방법에 대해 알아보겠습니다.
Conventional Commits 이란?
'Conventional Commits'는 커밋 메시지에 대한 명세를 제공하는 규칙입니다.
이 규칙은 커밋 히스토리를 명확하게 만드는 간단한 규칙 세트를 제공하며, 이를 통해 자동화된 도구를 더 쉽게 작성할 수 있게 해줍니다.
기본적인 커밋 메시지는 아래와 같은 구조를 가집니다.
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
type
은 커밋의 주요 분류를 나타내며, scope
는 선택적으로 커밋이 영향을 미치는 코드의 범위를 나타냅니다.
그리고 description
은 간략하게 커밋이 무엇인지 설명합니다.
필요에 따라 더 자세한 내용을 body
에 적고, 추가 정보를 footer
에 적을 수 있습니다.
여기서 'type'은 다음과 같은 종류가 있다:
fix
: 버그를 수정하는 커밋feat
: 코드베이스에 새로운 기능을 도입하는 커밋
feat
와 fix
외에도 'Conventional Commits'가 추천하는 추가적인 커밋 유형들을 알아보겠습니다.
이것들은 Angular 컨벤션을 기반으로 하며, 여러분의 프로젝트에서 다양한 컨텍스트에서 사용될 수 있습니다:
build:
: 빌드 시스템 또는 외부 종속성에 대한 변경사항을 나타냅니다. 예: gulp, broccoli, npmchore:
: 코드나 테스트를 수정하지 않는 일반적인 작업을 나타냅니다.ci:
: CI 설정 파일 및 스크립트를 변경합니다. 예: Travis, Circle 등docs:
: 문서 변경을 나타냅니다.style:
: 코드의 스타일을 변경합니다. (white-space, formatting, missing semi colons 등)refactor:
: 버그를 수정하거나 새로운 기능을 추가하지 않는 코드 수정을 나타냅니다.perf:
: 성능을 향상시키는 코드 변경을 나타냅니다.test:
: 누락된 테스트 추가 또는 기존 테스트 수정을 나타냅니다.
Conventional Commits을 사용하는 이유
- CHANGELOG를 자동적으로 생성할 수 있다.
- 커밋의 종류에 따라 의미론적 버전 증가를 자동으로 결정할 수 있다.
- 팀원, 공개적인 사용자, 그리고 다른 이해관계자들에게 변화의 성격을 알리는데 도움이 된다.
- 빌드와 배포 프로세스를 트리거하는데 활용할 수 있다.
- 사람들이 프로젝트에 더 쉽게 기여할 수 있도록 해주며, 이는 더 구조화된 커밋 히스토리를 탐색할 수 있게 해준다
Conventional Commits 예시
새로운 기능 추가:
feat: Add photo upload feature to user profiles
버그 수정:
fix: Resolve issue with updating user profiles
범위를 포함한 커밋:
feat(user-auth): Implement token-based authentication system
주의를 요하는 중대한 변경사항:
feat!: Drop support for legacy API
변경사항에 대한 추가 설명이 있는 커밋:
fix: Fix issue with user password changes
This fixes a problem that occurred when users tried to change their passwords.
Now, password change requests are processed correctly.
빌드 시스템 수정:
build: upgrade webpack version to 5.0.0
일반적인 작업:
chore: update package.json scripts
CI 설정 변경:
ci: add Node.js 14 to build matrix
문서 변경:
docs: add usage section to README
스타일 변경:
style: enforce use of semicolons in JS files
코드 리팩토링:
refactor: simplify report generation code
성능 향상:
perf: use gzip compression for serving static files
테스트 추가:
test: add unit tests for user service
이러한 커밋 유형들은 여러분의 커밋 메시지를 더욱 의미있게 만들어 줍니다.
그리고 프로젝트의 커밋 히스토리를 더욱 구조화하고 이해하기 쉽게 만들어 줍니다.
Intellij Plugin
IntelliJ를 사용하시면 Conventional Commit 플러그인을 추가할 수 있습니다.
Conventional Commit 플러그인을 사용하면 IntelliJ에서도 Conventional Commits를 손쉽게 만들 수 있습니다.
이 플러그인은 커밋 메시지를 작성할 때 Conventional Commits의 규칙에 따라 메시지를 구성하는 데 도움을 줍니다.
예를 들어, 'type', 'scope', 'description' 등의 필드를 적절하게 채워 커밋 메시지를 작성할 수 있게 도와줍니다.
또한, 'BREAKING CHANGE' 같은 중요한 변경사항도 명확하게 표시할 수 있도록 도와줍니다.
이 플러그인은 프로젝트의 커밋 기록을 깔끔하게 유지하는 데 큰 도움이 될 것입니다.