[공부한 것] 나만의 커밋메시지 방식 정리!

별의개발자커비·2023년 11월 8일
1

우테코 도전기

목록 보기
32/37

개요

개인적으로 2주차의 가장 아쉬운 점이라고 하면 커밋메시지라고 할 수 있다. 아래의 2주차 내가 쓴 커밋 메시지를 보면 커밋 단위가 들쭉날쭉하고 직관적이지 못한 걸 알 수 있다...🥲

🚨내 커밋 & 메시지의 문제점

  • 하나의 기능(예: 자동차 이동 기능 추가)에 여러 클래스에 거쳐서 메소드들이 생성될 때 묶어서 커밋하지 않는다.
  • 여러 기능이 한꺼번에 커밋된다.
  • 커밋을 하면서 해당 docs 체크리스트를 체크하지 않고 올리는 경우가 많다.
  • 어미가 통일되지 않는다(예: 추가, 개선, 수정, 분리 등)
  • 파일명이 명시되어있지 않다.
  • 후반에 리팩토링할 때는 눈에 띄는 사항들을 닥치는 대로 수정하다보니 후반 리팩토링 커밋 단위가 너무 크고 추상적이다.
  • 도메인 로직을 다 구현하고 컨트롤러에 연결하는 메소드를 추가할 때 뭐라고 커밋메시지를 적어야할지모르겠다.
  • 클래스명, 변수명 등 네이밍 변경에 대해서 다른 커밋에 포함시켜서 커밋함
  • 본문을 적어야하는 경우를 모르겠음
  • 클래스나 테스트 파일 전반에 거친 리팩토링을 파일명을 뭐로 해야할지 모르겠음
  • style과 refactor를 구분하지 못하겠음
  • docs의 업데이트는 커밋하지 않음
  • read.me 중간 중간에 고민 기록들이 들어가기도 함

정리하니 너무 정말 많군..!ㅎㅎ

👉 개선 방향

  • 하나의 기능에 여러 클래스에 거친 변경 사항이 있을 때 가장 상위에서 호출하는 클래스 기재
  • git add -p를 통한 메소드별 커밋 (부족하면 s로 hunk)
  • 커밋 전 docs 체크리스트 체크
  • docs 변경 사항도 큰 경우 커밋!
  • 리팩토링 요소, 고민 기록은 가장 아래로 빼기
  • 아래의 커밋 메시지 틀 활용
    • 파일명 명시, 어미 통일, 컨트롤러 연결시, all, ClassFile, TestFile
  • 네이밍 변경도 커밋 단위
    • 클래스명, 변수명 변경도 다 1 커밋!
  • 객체 생성도 커밋 단위
    • 기능 구현과 함께 커밋하지 말고, 객체 생성시 바로 커밋하기
  • style과 refactor, fix 구분
    • style : 네이밍 변경 등
    • refactor : 메소드 분리 등
    • fix : 잘못된 기능의 수정
  • 후반 리팩토링 클래스별 X, 기능별 O -> 기능별 리팩토링 커밋하기!
  • 본문 포함 커밋메시지 시도해보기

📝 나만의 커밋 메시지 양식! (23.11.04 ver.)

아래는 2주차 자동차 경주 미션을 기반으로 커밋 메시지를 다시 작성해본 양식이다!

  • docs : ~ 변경, ~ 추가, ~ 삭제
  • feat : ~ (객체를 생성하는) 기능 구현
  • refactor: ~ 을 통해 ~ 생성, 가독성 향상을 위한 ~ 함수 분리
  • style: 가독성 향상을 위한 네이밍 변경 네이밍 변경이 refactor라는 의견!
  • fix : ~~ 안 맞는 부분 수정
  • docs (READ.ME) : 기능 요구 사항 작성
    기능 요구 사항 서술
    예외 상황도 함께 서술

  • docs (READ.ME) : 시도할 횟수에 대한 예외 상황 추가
    시도할 횟수가 0 이하인 경우 예외 상황 추가

  • feat(InputValidator): 입력된 플레이어 이름의 형식에 대한 검증 구현
    자동차 이름이 공백이진 않는지 검증
    자동차 이름이 [,] 형식에 맞는지 검증

  • feat(PlayerName): 입력된 플레이어 이름의 유효성 검증 구현
    자동차 이름이 5글자를 넘어가진 않는지 검증

  • feat(Player): 이름을 통해 플레이어 객체를 생성하는 기능 구현
    검증된 이름 목록을 통해서 플레이어 생성 기능 구현

  • feat(RacingGame) : 플레이어 이동 기능 구현
    게임 진행 객체에서 플레이어 이동현황에 이동을 명령하는 기능 구현
    플레이어 이동현황에서 이동 거리에 증가 혹은 유지를 명령하는 기능 구현
    이동 거리에서 거리를 증가시키는 기능 구현

  • test(RacingGame) : 플레이어 이동 실패 테스트 케이스 추가

  • refactor(Constant) : 가독성 향상을 위한 상수 객체화

  • refactor(ClassFile) : 생성자 투명성 유지를 위한 validate 메소드 이동

  • refactor(RacingGame) : 의존성 주입 방식을 생성자 주입 방식으로 변경

  • refactor(PlayerMoveList) : 모든 플레이어 이동현황을 통해 일급 컬렉션 생성

  • feat(PlayerMoveList) : 우승자 판단 기능 구현

  • fix(ClassFile) : 부생성자 네이밍 컨벤션이 맞지 않는 부분 수정

  • style(ClassFile) : 불변성 보장을 위해 매개변수에 final 키워드 추가

  • refactor(ClassFile) : 불변성 보장을 위해 반환 값을 불변 리스트로 수정

  • feat(GameController) : 컨트롤러 생성

  • feat(PlayerNamesDto) : 플레이어 이름 목록을 위한 DTO 생성

  • feat(GameController) : 시도 횟수 입력 기능 컨트롤러 연결

  • feat(All) : 패키지 생성 및 파일 분리

  • refactor(GameController) : 가독성 향상을 위한 함수 분리와 네이밍 변경

  • style(ClassFile) : 불변성 보장을 위해 반환 값을 불변 리스트로 수정

  • refactor(OutputView) : 가독성 향상을 위한 함수 분리

  • test() : 모든 테스트 파일에 given-when-then 구조 적용

  • style(MoveResultDto): 가독성 향상을 위해 클래스 이름 변경

0개의 댓글