Skip to content

Commit Message Conventions

etuhcarap edited this page Feb 13, 2025 · 1 revision

목표

여러 개발자들의 작업이 반영되는 Project에서 서로의 작업분에 대한 이해프로젝트 작업 이력 검색가독성 있고 풍부한 정보를 제공하기 위해 Angular Project에서 권장하는 Commit Message Format에 대한 이해


작성 요령

Commit Message는 크게 세가지 섹션을 사용

  • 신규 개발
  • 버그 수정
  • 유지보수로 인한 변경 사항

높은 가독성과 검색 시 더 많은 정보 제공을 위해 변경/추가/삭제 등의 행위 대상을 표현

예를 들면

Fix small typo in docs widget (tutorial instructions)
Fix test for scenario.Application - should remove old iframe
Replaced double line break with single when text is fetched from Google

이러한 메시지는 어떤 위치에 변경이 발생하였는지 표현하려 했지만,

fix comment stripping
fixing broken links
Bit of refactoring
Check whether links do exist and throw exception
Fix sitemap include (to work on case sensitive linux)

이러한 메세지에서는 작업 대상을 확인 할 수 없어, 검색을 위한 Commit message로써의 역할 수행이 어렵다.


커밋 메시지 형식

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

type : Commit의 작업 형태

  • feat : feature, 기능 개발
  • fix : bug fix, 버그 수정
  • refactor : refactoring, 코드 개선
  • docs : documentations, 문서 작성
  • test : when adding missing tests, 누락된 테스트를 추가할 때
  • style : code formatting, add missing expresstion ...
  • chore : 잡일 (maintain: 유지)
  • 예를 들면
    feat: 댓글 목록을 포함하는 게시글 검색 API 구현
    fix: 유효하지 못한 게시글 생성 요청의 잘못된 응답 문구 수정
    docs: 공통 페이징 응답 구조를 위한 문서 작성
    refactor: 불변성을 가져야하는 입력 파라미터에 final 처리
    test: Enum으로 정의된 상태 코드의 문서 생성을 위한 TC 작성
    style: 명확하지 않은 네이밍으로 인한 공통 요청/응답 객체명 변경
    chore: 미 사용 설정 파일 삭제
    

scope : Commit 변경에 대한 특정 위치

  • Example : $location, $browser, $compile, $rootScope, ngHref, ngClick, ngView, etc ... (Angular)
  • issue number로 대체하거나 다른 대체 범위가 어떤 것이 될 수 있을 지 고민해 볼 수 있다.
  • 예를 들면
    feat(#1): 댓글 목록을 포함하는 게시글 검색 API 구현
    fix(#2): 유효하지 못한 게시글 생성 요청의 잘못된 응답 문구 수정
    docs(#3): 공통 페이징 응답 구조를 위한 문서 작성
    refactor(#4): 불변성을 가져야하는 입력 파라미터에 final 처리
    test(#5): Enum으로 정의된 상태 코드의 문서 생성을 위한 TC 작성
    style(#6): 명확하지 않은 네이밍으로 인한 공통 요청/응답 객체명 변경
    chore(#7): 미 사용 설정 파일 삭제
    

subject : 변경 내용 주제

  • 변경 사항에 대한 간결한 설명
  • 명령형, 현제 시제를 이용한 마침표 없는 문장으로 구성
    • 권장 : 변경
    • 비 권장 : 변경함, 변경됨
  • 예를 들면
    • feat(#1): 댓글 목록을 포함하는 게시글 검색 API 구현
    • fix(#2): 유효하지 못한 게시글 생성 요청의 잘못된 응답 문구 수정
    • docs(#3): 공통 페이징 응답 구조를 위한 문서 작성
    • refactor(#4): 불변성을 가져야하는 입력 파라미터에 final 처리
    • test(#5): Enum으로 정의된 상태 코드의 문서 생성을 위한 TC 작성
    • style(#6): 명확하지 않은 네이밍으로 인한 공통 요청/응답 객체명 변경
    • chore(#7): 미 사용 설정 파일 삭제

body : 본문

  • 변경 목적, 참조 근거와 이전 작업(AS-IS로 부터 TO-BE로 변경된)과의 구현 차이를 포함
  • 일반적으로 글머리 기호(-, *)를 사용하여 표현
  • 명령형, 현제 시제를 이용한 문장으로 구성

footer : 바닥글

  • 주요 변경 사항에 대한 설명
  • 작업 종료시, ‘Closes #{issue no}’를 이용하여 연관된 issue(ticket)에 대한 참조

Commit Message Conventions에 따른 예시

build(#1): 회원 가입 구현을 위한 spring-security 의존성 추가
config(#1): spring-security 기본 보안 정책 설정

기본 보안 정책 구성을 위한 WebSecurityConfig 생성
- csrf, formLogin, httpBasic 미 사용 옵션 적용
- session 기반 인증/인가 전략 미 사용 옵션 적용

인증 없이 접근 가능한 기본 API에 대한 허용 정책 정의
- /sign-up, /sign-in
feat(#1): 회원 도메인 객체 정의

- User, Role 엔티티 및 기본 필드 정의
- Auditing을 위한 BaseEntity 추가
- UserType Enum 클래스 정의
feat(#1): CUSTOMER 사용자 계층 회원 가입 Service 구현

- 회원 가입 요청 객체 정의
- 회원 가입 시 발생하는 예외 처리를 위한 Custom Exception 및 Custom Error Code 정의
- 회원 계층에 따른 회원 가입 로직 분리를 위한 interface 정의
feat(#1): 회원 가입 API 구현

- 회원 가입 요청 Path 정의
- 회원 가입 시 이메일, 닉네임 항목에 대한 유효성 검증 부 구현

Angular Commit 규칙을 기본으로하는 커밋 규칙

type name description
feat 새로운 기능에 관한 커밋
enhance 기능 개선, 정책 변경으로 인한 기능 수정 등의 커밋
refactor 기능 변경이 없는 코드 리팩토링에 관한 커밋
perf 성능 개선에 관한 커밋
test 테스트 코드에 관한 커밋
fix 버그 수정에 관한 커밋
revert 잘못된 커밋을 되돌리는 커밋
build 빌드 관련 파일 혹은 모듈 설치, 삭제에 관한 커밋
ci ci 관련 설정에 관한 커밋
docs 문서에 관한 커밋
config 프로젝트 환경 설정에 관한 커밋
style 코드 스타일 혹은 포맷 등에 관한 커밋
chore 자잘한 수정에 대한 커밋

참조 URL