본문 바로가기

CS

[Git] git convention

깃을 이용해 작업을 하다 보면 특정 시점으로 checkout을 할 때 난잡한 커밋을 일일이 클릭해 가면서 변경 내역을 찾는 일이 종종 있습니다.
보통 한눈에 알아보기 쉽게 작성하는 것이 Commit Message인데 규칙 없이 작성하니 알아보기 어려웠습니다.
이것을 보완하기 위해 찾다가 발견한 것이 "Git Commit Message Convention"입니다.

예시

  • 나쁜 예시
    우선, 제가 과거에 자주 사용하던 어처구니없는 커밋 메세지를 보여드리겠습니다.
    커밋 메세지
    위의 스크린샷을 보면 "Backup-20231207", "For Test"가 있는데
    이것만 봐서는 도저히 어떤 파일을 수정, 삭제했는지 감을 잡을 수가 없습니다.
  • 좋은 예시(Seal Repository)
    Seal git commit message
    위의 사진은 Seal의 커밋 메세지 내역인데, 메세지를 보면

    feat : action sheet style tweak
    fix : remove hardcoded user shared directory
    docs(readme) : update sponser info

    다음과 같은 형태를 띄고 있습니다. 커밋 메세지만 봐도 대략적으로 어떤 내용을 수정했는지 파악이 가능합니다.

구조

Type : Subject

body(필요 시 작성)

footer(필요 시 작성)

제목(Title)

  • Type(유형)
    Type은 변경 사항을 대략 표현하며 다음과 같은 내용들을 포함합니다.

    Type 내용
    feat 새로운 기능(feature) 추가
    fix 버그 수정
    docs 문서 변경 (README, API 문서 등)
    style 코드 포맷팅, 세미콜론 누락 수정 등 (코드 로직 변경 없음)
    refactor 운영 환경 코드의 리팩토링 (성능 개선, 가독성 향상 등)
    test 테스트 코드 추가 또는 기존 테스트 리팩토링 (운영 코드 변경 없음)
    chore 빌드 시스템, 패키지 매니저 설정 변경 등 (운영 코드 변경 없음)
    ETC 팀원들과의 논의를 통해 추가 타입 작성 가능...
  • Subject(제목 요약)

    • 영문 기준 50자 이내로 간결하게 작성
    • 첫 글자는 대문자로 시작
    • 문장 끝에 마침표(.) 사용 X
    • 명령형으로 작성(예시. Change O, Changed X, Changes X)

본문(Body) - 선택사항

  • 제목만으로 설명이 부족해 추가적 설명이 필요한 경우에 사용합니다.

    • 제목과 본문 사이에 반드시 개행(빈 줄 한 줄 삽입)
    • 각 줄의 길이는 영문 기준 72자 이내로 제한하는 것을 권장
    • 변경 사항을 통해 해결하려는 문제, 변경 사항으로 인해 발생하는 부수적인 효과나 예상 못한 결과를 상세히 설명하는 공간

    푸터(Footer) - 선택사항

  • 이슈 트래커 ID를 참조하거나 관련 추가 정보 명시에 사용합니다.

    • 특정 이슈를 해결한 경우 Resolves : #123
    • 여러 이슈를 참조할 경우 See also : #456, #678

커밋 메세지 예시

feat: 사용자 정보 조회 API 엔드포인트 추가 (GET /api/v1/users/{id})

특정 사용자의 상세 정보를 조회할 수 있는 RESTful API 엔드포인트를 구현합니다.
이 기능은 클라이언트 애플리케이션에서 사용자 프로필 화면을 표시하는 데 사용됩니다.
이번 커밋을 통해 사용자는 자신의 ID를 통해 시스템에 등록된 개인 정보를
안전하게 조회할 수 있게 됩니다.

주요 변경 사항:
- `GET /api/v1/users/{id}` 엔드포인트 신규 생성
- `UserController`에 `getUserById` 메소드 추가
- `UserService`에 사용자 ID 기반 조회 로직 구현
- 사용자 정보를 담는 `UserResponseDto` DTO 클래스 정의
- 존재하지 않는 사용자 ID 요청 시 404 Not Found 응답 처리 로직 추가

이 API는 향후 사용자 정보 수정 및 삭제 기능의 기반이 될 것입니다.
또한, 현재는 기본적인 정보만을 반환하며, 추가적인 상세 정보(예: 활동 내역)는
별도의 엔드포인트로 분리하거나 요청 파라미터를 통해 선택적으로 제공하는 방안을
고려 중입니다.

데이터베이스 조회 시 발생할 수 있는 예외 상황에 대한 기본적인 오류 처리 로직을
포함하고 있습니다. 성능 최적화를 위한 캐싱 전략은 추후 적용 예정입니다.

Resolves: #USR-101 (사용자 상세 정보 조회 기능 구현)
See also: #ARC-005 (API Naming Convention), #SEC-012 (API 접근 권한 논의)

마치며

최근에 친구와 게임 개발을 시작하면서 Git Commit Message Convention을 전파한 적이 있습니다. 전파하기 전에도 내용을 요약하여 커밋 메세지를 작성하는 친구였지만 한국말의 특성상 서술어가 뒤에 오기 때문에 Type하나 더 들어가는 것 만으로도 탐색이 쉬워졌던 것 같습니다.

Body나 Footer는 필수가 아니니 Title만으로도 쉽게 알아볼 수 있는 Git Commit Message를 작성하여 협업에 도움이 될 수 있었으면 좋겠습니다.

REFERENCES

https://udacity.github.io/git-styleguide/