devFancy BE Developer

Git 형상 관리 + 작업 단위와 PR 코드 리뷰 + 협업을 잘하는 개발자 (feat. 제미니의 개발실무)

2023-12-28
devFancy
Git

이 글은 제미니의 개발실무의 Git 형상 관리 + 작업 단위와 PR 코드 리뷰 + 협업을 잘하는 개발자 영상을 보면서 제 생각과 같이 정리한 글입니다.

(시청자) 질문. 큰 규모의 작업을 할 때 commit 해야 할 작업 task를 나누는 기준이 궁금합니다.

  1. commit 할 작업 단위를 먼저 생각해보고 -> 그 단위로 작업을 하면서 중간중간 commit한다.
  2. 그냥 한번에 기능 단위 개발을 하고 -> 이후에 작업을 쪼개면서 commit한다.

작업 task를 나누는 기준

  • 리뷰 시스템 전체를 개발한다고 가정을 해보자. 그러면 하나의 task로 담기에는 굉장히 클 수 있다.

  • 그렇기 때문에 먼저 작업 단위 자체를 잘 나누는게 가장 중요하다.

  • 리뷰라는 기능이 있다면,

    리뷰 등록, 리뷰 삭제와 같은 각 세부 기능에 대해서 하나의 작업이라 생각하고, 그러한 작업을 Issue & Branch & PR로 가져가는게 좋다.

    큰 규모의 작업 자체가 있으면, 이는 여러가지 어려움을 만드는 것 같다.

    추가/수정된 파일과 커밋 갯수가 많을 수록 다른 사람이 코드 리뷰하는게 까다로울 수 있다.

  • 제민님의 의견: 같이 일하는 동료가 내 코드를 쉽게 이해할 수 있도록 task를 작게 가져갈 것 같다.

    작업 단위를 작게 나누고, 위에 질문주신 2가지를 고민할 것 같다.

    작업 단위를 작게 엄청 잘 나누게 되면, 애초에 커밋에 대한 생각을 많이 안해도 되는 경우가 있는 것 같다.

    흔히 많이 하는 실수가 신규 기능 개발과 리팩터링하는 것을 하나의 task라고 생각하고 작업하는 경우가 있다.

    이러한 실수를 예방하기 위해 한 가지 작업을 딱 정해서, 최대한 작게 가져가면 커밋에 대한 고민은 크게 하지 않아도 된다.

    즉, 신규 기능 개발과 리팩터링을 각각의 작업 단위로 생각해야 한다. -> task1 : 신규 기능 개발 / task2 : 리팩터링

  • 결론적으로 질문 주신 것에 대해 답변을 하면, 1번과 2번을 다 쓰긴 한다.

    어떻게 하면 동료가 코드 리뷰하기 더 좋을까에 대해서 커밋과 PR를 나눈다고 보시면 될 것 같다.

커밋하는 부분도 협업 스킬 중 하나

  • 개인적으로 2번을 많이 쓴다. 2번: “그냥 한번에 기능 단위 개발을 하고 -> 이후에 작업을 쪼개면서 commit한다.”

    커밋하는 부분도 협업 스킬 중 하나라고 생각한다.

  • 아래와 같이 커밋을 작성하면 리뷰하는 사람 입장에서 힘들 수 있다.

User 클래스에 대한 작업 <- 하나의 task
--- 아래부터는 커밋 내용
feat: User 클래스가 수정!
feat: User 클래스가 수정!
feat: User 클래스가 수정! (리팩토링 포함)
feat: User 클래스가 수정!
...
feat: User 클래스가 수정!

[PR]
수정 파일이 50개
커밋이 10개
  • 만약 작업 단위가 작았다면, 위에서처럼 발생할 수 없다.

    수정 파일이 많고, 같은 클래스에서 여러 번의 커밋을 작성하면, 리뷰할 사람 입장에서는 이해하기가 어려울 수 있다.

  • [PR 올릴 때 커밋 정리 기준 중 하나] - 한 클래스는 한 파일에서만 수정된다.

  • 보통 커밋은 아래와 같이 진행한다.

  1. 하나의 작업에 대한 커밋을 여러번 작성한다. -> 본인을 위해

  2. 어느 정도 커밋을 작성하고 PR을 올리기 전에, 지금까지 작성한 커밋들을 정리한다.

  3. PR을 올리면서 동료로부터 코드 리뷰를 받고, 추가적인 커밋을 한다. -> 동료를 위해

  4. 리뷰가 끝나면, 지금까지 작성한 커밋을 한번 더 정리를 한다. -> 회사 자산 관리 + 미래의 동료를 위해

  • 이런 관점으로 접근해서 형상 관리를 하고 있다.

브랜치 작성 방법

  • 리뷰에 대한 기능을 개발한다고 가정했을 때, 작업 단위를 나눈다. -> 리뷰 등록, 리뷰 조회, 리뷰 수정, 리뷰 삭제

  • 그런 다음, 작업에 대한 Branch를 나누고 PR도 여러개 올린다.

    • 리뷰 등록에 대한 Branch명: review-add

    • 리뷰 삭제에 대한 Branch명: review-remove

  • 그리고 세부 기능에 대해서 Branch를 연계적으로 생성한다.

Review

  • 이전 굿프렌즈 팀 프로젝트에서는 우리만의 Git flow 전략을 만들면서, 형상 관리를 나름 신경썼다고 생각했다.

  • 브랜치 면에서는 이 영상에서 다루는 거와 거의 비슷하게 작업을 진행했지만, 커밋 부분에 있어서는 ‘이 정도로 신경을 써야 하는구나’라는 생각이 많이 들었다.

  • 최근에 주문 기능에 대해서 리팩터링 과정을 진행했는데, 작은 작업 단위 보다는 큰 작업으로 진행해서 아래와 같이 15개의 커밋 내용과 17개의 파일이 수정되었다.

    (물론, 10월 이후부터는 팀원들을 제외한 나 혼자만의 리팩터링을 진행해서 더 신경을 안쓴것도 맞다..ㅎㅎ 😅)

  • 다음에 팀 프로젝트를 진행한다면, 커밋에 대해서도 신경쓰면서 작업을 진행하면 좋겠다는 생각이 들었다.

    (해당 영상을 참고하시면 더 자세하게 설명해주시니 참고하면 좋을 것 같습니다!)

Reference


Comments

Index