0w0

커밋 메세지 작성(2023년 버전)

글의 모티베이션

약 8년 전, Git을 막 사용하기 시작할 때 이런 글을 올리고나서, 상상 이상의 반응을 받았습니다.

당시에는 Subversion에서 Git으로 넘어오고나서, 시행착오하고 있는 중이기도 했고, 많은 반응을 받은 것이 동기부여가 되었습니다.

그리고 시간이 흘러, 당연하게도 현재는 글과 작성 방법이 달라진 부분이 있고, 생각이 변하지 않은 부분도 있으며, 지금도 종종 Like를 받다보니 업데이트해야겠구나 느꼈습니다.

그래서, 현 포맷도 수년 후에는 변할 가능성이 높아지겠지만, 종종 스냅샷을 공개하는 것도 어떠한 의미가 있다 느껴, "지금 내가 이렇게 커밋 메시지를 쓰고있어"를 정리했습니다.

Git 사용환경

개발 흐름이나 호스팅 서비스마다 UI의 diff에 의해 적절한 포맷은 달라진다 생각하므로, 제 환경부터 적습니다.

컨셉

3가지 컨셉으로 운용중입니다.

포맷을 만드는 이유

여러 이유가 있지만, 저는 이렇게 생각합니다

포맷

Semantic Commit Message를 사용합니다.

Type

과거에는 내멋대로 룰로 운용하던 것도 있었지만, 뭐가 있었는지 까먹거나, 자연스럽지 않았기에 Semantic Commit Message 레일 위에 올라갔다.

Emoji

Issue Number

Subject

좋은 커밋 메세지란?

종종 커밋 메세지는 Why를 적도록하자는 말이 있지만, 최근은 그렇게까지 엄격히 지킬 필요가 없습니다. 물론 주장에는 찬성하고 있어서 Why를 작성한다면 최고겠지만 한 줄로 why까지 적기에는 난이도가 높고, 커밋메세지가 "컬러풀"해지지 않는다 생각합니다.

이럴려면, Why를 쓰기 위해서 description을 활용할 필요가 있습니다만, description에 Why를 쓰려한다면, 커밋 메세지에 Issue를 엮어서, Issue (혹은 PR) 에 Why 세세히 쓰는 것이 더 현명한 것 같다 생각합니다. 또 커밋 메시지만으로 Why를 전달하기보다 그 소속이기도한 Issue나 PR로 Why를 전달하는 것이 의도를 쉽게 전달되는 경우가 많다 느낍니다.

그렇기에, 저는 커밋 메시지에는 거의 반드시 Issue를 엮어서, Why는 Issue나 PR에서 표현하고, Subject인 What 정도만 쓰도로 하고 있습니다. 물론 "~를 위해 ㅇㅇ했다" 이런 표현을 써야하는 경우에도 싸며, "테스트를 쓴다"나 "Lint 에러 수정했다" 같이 cardinality 높은 커밋 메세지는 피해야한다 생각합니다.

모국어? 영어?

통일감은 중요하므로, 팀에서 협의했다면, 어느쪽이든 (당연히 모국어나 영어 외에도) 좋다 생각합니다만, 저는 도메스틱한 팀, 도메스틱한 서비스라면 모국어로 쓰는 경우가 많습니다.

과거를 돌아보면 영어로 적었던 것도 있습니다만, 네이티브하지 않아서 시간을 잡아먹거나, 급하게 대충 "Fix a sorting bug" 이런 문법조차 수상한 cardinality 높은 커밋 메세지를 남기는 경우가 있어, 본말전도같아 영어로 적는 경우가 적어었습니다.

물론 글로벌한 팀에서는 영어로 쓰는 경우가 좋은게 대부분이면서, 영어를 쓰므로 손해가 없으므로 영어를 쓰는 것 자체는 전혀 문제가 아니지만, 네이티브가 아닌 경우는 자신 외에도 팀 전원이 어느정도의 각오가 필요하다 생각합니다.

기타

자신만의 커밋 메세지로 라이벌과 차이를 벌리자!

글 초반에도 조금 다뤘지만, 여기에 유일한 정답이 아닙니다, 저 자신은 현시점에서 이게 최선이다 생각하지만, 내일이 되서 더 좋은 방법을 발견하고 이 방법을 버릴 가능성이 있습니다. 그렇기에 이글 글도 언젠가 낡아질 것이라 생각합니다. 커밋 메세지 뿐만 아니라 매일 시행착고를 계속하는 것이 소프트웨어 엔지니어링의 즐거움 중 하나라 생각하므로, 이 글이 누군가의 커밋 메세지에 대해 생각할 계기가 되었다면 다행입니다.