02-03 커밋 컨벤션과 시맨틱 버저닝
일관된 커밋 메시지가 사람과 도구 모두를 돕는다 — Conventional Commits로 버전·CHANGELOG까지 자동화.
일관된 커밋 메시지가 사람과 도구 모두를 돕는다 — Conventional Commits로 버전·CHANGELOG까지 자동화.
목표: 읽기 좋은 히스토리 + 릴리스 자동화 기반 마련
📝 Conventional Commits
구조
<type>(<scope>): <subject>
<body>
<footer>
예시:
feat(auth): JWT 인증 추가
- 토큰 생성·검증 미들웨어 구현
- 로그인 엔드포인트 수정
Closes #123
타입
| 타입 | 의미 | 버전 영향 |
|---|---|---|
feat | 새 기능 | MINOR ↑ |
fix | 버그 수정 | PATCH ↑ |
docs | 문서 | - |
style | 포맷(동작 무관) | - |
refactor | 리팩토링 | - |
perf | 성능 개선 | PATCH ↑ |
test | 테스트 | - |
build | 빌드 시스템 | - |
ci | CI 설정 | - |
chore | 잡무 | - |
작성 규칙
- 제목 50자 이내, 명령형 현재 시제(“추가한다”, add)
- 끝에 마침표 없음
- 본문은 무엇을·왜 (어떻게는 코드가 설명)
BREAKING CHANGE:footer 또는feat!:는 호환성 깨짐 → MAJOR ↑
🔢 시맨틱 버저닝 (SemVer)
MAJOR.MINOR.PATCH 예: 2.4.1
graph LR
MAJOR["MAJOR<br/>호환성 깨짐"] --- MINOR["MINOR<br/>기능 추가(호환)"] --- PATCH["PATCH<br/>버그 수정(호환)"]
| 변경 | 올리는 자리 | 예 |
|---|---|---|
| 호환 안 되는 API 변경 | MAJOR | 1.4.2 → 2.0.0 |
| 하위 호환 기능 추가 | MINOR | 1.4.2 → 1.5.0 |
| 하위 호환 버그 수정 | PATCH | 1.4.2 → 1.4.3 |
0.x.y는 초기 개발(언제든 바뀔 수 있음)- 사전 릴리스:
1.0.0-alpha.1,1.0.0-rc.1
🤖 자동화: 커밋 → 버전 → CHANGELOG
Conventional Commits를 쓰면 도구가 커밋 타입을 읽어 자동으로:
graph LR
COMMITS["커밋들<br/>(feat/fix/...)"] --> ANALYZE["타입 분석"]
ANALYZE --> VER["다음 버전 결정"]
VER --> TAG["태그 + 릴리스"]
VER --> LOG["CHANGELOG 생성"]
- semantic-release / release-please: 버전 결정·태그·릴리스 노트 자동
- commitlint: 커밋 메시지가 규칙을 따르는지 검사(훅으로)
- commitizen: 대화형으로 규칙 맞는 커밋 작성
# commitlint + husky 예시 (개념)
# .commitlintrc → @commitlint/config-conventional
# pre-commit/commit-msg 훅에서 검증 → 03-04 참고
✅ 좋은/나쁜 커밋 메시지
- update # 무엇을? 왜?
- fix bug # 어떤 버그?
- asdf # ...
+ fix(cart): 수량 0일 때 결제 차단
+ feat(search): 자동완성 디바운스 추가
+ refactor(auth): 토큰 검증 로직 분리
📋 체크리스트
- Conventional Commits 구조 숙지
- 타입과 버전 영향 매핑
- 명령형·50자 제목 작성
- BREAKING CHANGE 표기
- SemVer 자리수 의미
- commitlint/semantic-release 개념
- 나쁜 메시지 → 좋은 메시지 교정
🔗 관련 노트
- 02-02-PR과-코드-리뷰 — 이전
- 02-04-gitignore와-파일-관리 — 다음
- 03-04-Git-훅과-자동화 — commitlint 훅 적용
- Git-상세-가이드 — 커밋 명령 옵션
마지막 업데이트: 2026-06-02