📌 들어가며
프리코스 과제에 앞서, README.md에 정의된 기능 단위별로 커밋하고 AngularJS Commit Message Conventions를 참고해 메시지를 작성하라는 요구사항이 있었다.
평소에는 단순히 <type>: <subject> 형태로 커밋을 작성했지만, 이번 기회를 통해 좀 더 의미 있는 커밋 메시지 구조를 정립하고자 문서를 자세히 살펴보며 정리해보았다.
📌 커밋 컨벤션의 목적
- CHANGELOG.md 자동 생성
→ feat, fix, breaking change를 기반으로 자동화 가능 - 불필요한 커밋 구분
→ 단순 포매팅이나 주석 수정 등은 style, chore로 분리 - 히스토리 가독성 향상
→ 어떤 기능이 어디에서 수정되었는지 명확히 남김
📌 커밋 메시지 구조
<type>(<scope>): <subject>
<공백>
<body>
<공백>
<footer>
→ 각 줄은 100자 이내로 유지
1️⃣ <type> 종류
- feat - 새로운 기능 추가
- fix - 버그 수정
- docs - 문서 변경
- style - 포매팅, 세미콜론 등 코드 포맷 수정
- refactor - 리팩토링 (기능 변화 X)
- test - 테스트 코드 추가/수정
- chore - 빌드,설정,배포 등 유지보수 관련
2️⃣ <scope> — 영향 범위
- 수정된 코드 영역이나 모듈을 지정
ex) auth, api, $compile, router, ui, test 등
3️⃣ <subject> — 한 줄 요약
- 명령형 현재 시제 사용
- 소문자로 시작, 마침표 생략
- "무엇을 추가했는가?" 에 초점이 맞춰져 있음
- ex)
- fix(router): 잘못된 경로 파라미터 처리
- refactor(api): API 호출 함수를 추상화
- feat(auth): JWT 토큰 자동 갱신 기능 추가
- style(ui): 버튼 여백 수정
4️⃣ Body
- 변경 이유와 기존 동작의 차이 설명
- 명령형 현재 시제 유지
- "왜 추가했는가? 어떤 문제가 있었고, 어떻게 해결했는가?" 에 초점이 맞춰져 있음
- ex)
- 회원가입 시 동일한 사용자명이 중복 등록되는 문제를 방지하도록 검증 로직 수정
- 비동기 요청 에러 발생 시 사용자에게 알림 표시 추가
- API 호출 중복을 줄이기 위해 fetch 함수를 공통 유틸로 분리
5️⃣ Footer
- Breaking Change
- 하위 호환이 깨지는 변경은 BREAKING CHANGE:로 명시
- 변경 내용, 이유, 이전/이후 코드 예시 포함 - Issue 참조
- Closes #123 Closes #45, #67
🔥 예시
fix(api): 사용자 정보 요청 시 500 에러 발생 문제 수정
일부 사용자 계정에서 잘못된 ID 값이 전달되어 서버 오류가 발생했음.
요청 전 ID 유효성 검사를 추가하여 잘못된 요청을 사전에 차단하도록 수정함.
BREAKING CHANGE: ID 필드 형식이 변경되어 기존 클라이언트에서 요청 시 유효성 검사를 통과하지 못할 수 있음.
feat(auth): JWT 토큰 자동 갱신 기능 추가
기존에는 로그인 후 토큰 만료 시 재로그인이 필요했음.
~~ 방식을 도입해 만료 직전에 자동으로 토큰을 갱신하도록 개선.
Closes: #123
📚 오늘의 배움
- 커밋 메시지는 type, scope, subject, body, footer로 구성되며,
이 구조를 잘 활용하면 변경 의도와 맥락이 명확하게 전달되는 커밋을 남길 수 있다. - 특히 changelog 자동화를 통해 버전 업데이트 시 변경 이력을 자동으로 관리할 수 있다는 점이 가장 인상 깊었다.
- 프리코스 과제에서는 버전 관리까지는 다루지 않지만, 시간이 된다면 직접 changelog 구성을 시도해보며 커밋 컨벤션의 전체 흐름을 경험해보고 싶다.
'우아한테크코스 > 프리코스 1주차' 카테고리의 다른 글
| 프리코스 1주차 KPT 회고 (0) | 2025.10.21 |
|---|---|
| [TIL] npm update의 동작 원리와 npm-check-updates로 최신화하기 (0) | 2025.10.15 |
