Conventional Commits란?
Conventional Commits는 커밋 메시지에 의미를 부여하기 위한 표준 명세입니다. 타입(type), 스코프(scope), 설명(description)을 구조화해 사람이 읽기 쉽고 자동화 도구가 파싱하기도 쉬운 형태로 만듭니다. semantic-release, changelog 자동 생성, SemVer 버전 자동 올리기 등에 활용됩니다.
표준 형식
기본 구조는 다음과 같습니다.
<type>(<scope>): <subject>
<빈 줄>
<body>
<빈 줄>
<footer>
제목 줄은 50자 이내, 본문은 한 줄당 72자 이내로 줄바꿈하는 것이 관례입니다 (50/72 룰).
주요 타입 11종
- feat: 사용자에게 보이는 새 기능 → SemVer MINOR 증가
- fix: 버그 수정 → SemVer PATCH 증가
- docs: 문서만 변경
- style: 공백, 세미콜론 등 코드 의미 변화 없는 포맷팅
- refactor: 버그 수정도 기능 추가도 아닌 코드 변경
- test: 테스트 추가·수정
- chore: 빌드, 패키지 매니저, 의존성 등 잡일
- perf: 성능 개선
- build: 빌드 시스템 또는 외부 의존성 변경 (gulp, npm 등)
- ci: CI 설정 변경 (GitHub Actions, CircleCI 등)
- revert: 이전 커밋을 되돌림
BREAKING CHANGE 처리
호환성을 깨뜨리는 변경은 두 가지 방법으로 표시할 수 있습니다.
- 타입 뒤에 느낌표:
feat!: change auth API signature - 푸터에 BREAKING CHANGE: 토큰:
BREAKING CHANGE: token field renamed
두 방법을 함께 써도 됩니다. BREAKING CHANGE는 SemVer MAJOR 버전을 올립니다.
gitmoji 옵션
gitmoji는 커밋 메시지 맨 앞에 이모지를 붙여 시각적으로 타입을 구분하는 방식입니다. 본 도구는 feat → ✨, fix → 🐛, docs → 📝, style → 💄, refactor → ♻️, test → ✅, chore → 🔧, perf → ⚡, build → 📦, ci → 👷, revert → ⏪ 매핑을 사용합니다.
이슈 자동 연결
GitHub·GitLab은 커밋 메시지에 Closes #123, Fixes #456 같은 키워드가 있으면 해당 PR 머지 시 이슈를 자동으로 닫아줍니다. 본 도구는 Closes, Fixes, Resolves, Refs 네 가지 액션을 지원합니다.
자주 묻는 질문 (FAQ)
Q. 한국어로 커밋 메시지를 써도 되나요?
A. 가능합니다. 다만 오픈소스나 글로벌 협업 프로젝트에서는 영어 명령형 현재시제 사용이 관례입니다. 사내 프로젝트라면 팀 컨벤션에 맞춰 쓰세요.
Q. 제목을 명령형으로 쓴다는 게 무슨 뜻인가요?
A. "added"(과거) 대신 "add"(명령형), "Fixes" 대신 "Fix"처럼 동사 원형으로 시작하는 것이 git 공식 가이드라인입니다. "이 커밋이 적용되면 ___한다"는 문장이 완성되도록 쓰세요.
Q. semantic-release와 어떻게 연동되나요?
A. semantic-release는 main 브랜치에 머지된 커밋의 타입을 분석해 자동으로 버전을 올립니다. fix는 PATCH, feat는 MINOR, BREAKING CHANGE는 MAJOR로 올라가며 CHANGELOG.md도 자동 생성됩니다.