[번역] Github 를 통해 이미 작성한 코드를 리뷰하는 방법

코드 리뷰

외주를 받아 저 혼자 진행하던 프로젝트의 코드 품질이 궁금하여 같은 팀(팀 크레센도) 에 계시는 Skile 형께 코드 리뷰를 부탁하는 일이 있었습니다.

이를 위해 저는 Github 에 Private Repository 를 만들어 이 프로젝트를 푸시하고, 형에게 코드 리뷰 요청을 드렸습니다.
그러자 Recipe: code reviews for existing code with GitHub 라는 글의 링크와 함께 PR 을 통해 찾아오셨고, 이런 방식으로 코드 리뷰를 도와주시겠다고 하셨습니다.

이전부터 Github 를 통한 코드 리뷰에 관심을 가지고 있던 터라 어떤 프로세스를 가지는지 자세히 알아보고, 스스로 정리하기 위해 글을 작성하게 되었습니다.

용어 통일

  • Commit : 커밋
  • Pull Request : PR
  • Workflow : 워크플로우
  • Merge : 병합
  • Branch : 브랜치
  • Comment : 코멘트
  • Code Review : 코드 리뷰
  • Repository : 레포지토리
  • Checkout : 체크아웃

서문

나에게 있어서, 코드 리뷰는 소프트웨어 개발과 관련된 최신 유행 중에서 제일 유용한 성장 방법 중 하나라고 생각한다. 원래의 코드 리뷰 시스템들은 프로젝트에 사용하기까지 워크플로우를 구성하고 각종 설정을 진행하는데 매우 지루하고 많은 시간이 필요했었지만, 깃헙과 깃랩처럼 코드 리뷰 UI와 함께 PR 워크플로우를 플랫폼으로 잘 녹여낸 사례가 증가함에 따라 이젠 코드 리뷰를 시스템적으로 도입하지 않을 이유가 없어졌다. 이제 별다른 과정 없이 브랜치를 만들고, PR을 만들고, 코드 리뷰를 하고, 병합만 하면 된다.

하지만 코드 리뷰를 진행해야 할 코드가 이미 커밋되었다면 어떻게 할 것인가? 괜찮다. 깃헙에서는 이미 진행했던 커밋에 대한 코드 리뷰를 할 수 있다. 그러나 레포지토리 곳곳에 코멘트를 다는 것은 지루한 일이 될 수 있다. 그래서 나는 깃헙 (또는 깃랩)을 PR과 함께 코드 리뷰 도구로 사용하여 레포지토리 전체를 살펴볼 수 있는 기술을 소개하려 한다.

목표

우리는 어떤 프로젝트에서든 이미 작성하여 커밋했었던 코드를 (PR 사용 여부와 상관 없이) 리뷰할 수 있는 방법을 알아보고자 한다. 또한 우리는 우리는 기존에 코드 리뷰를 했었던 방법과 동일하게 PR 을 사용하려 한다.

방법

우리는 모든 프로젝트의 코드와 함께 새로운 PR 을 간단히 만들 것이다. 하지만 이 PR이 프로젝트에 영향을 미치지 않도록 하고 싶으니 아래와 같이 진행한다.

  1. 프로젝트에 대한 코드 리뷰를 진행하기 위해 프로젝트를 fork 한다. 그리고 이 fork 한 프로젝트를 코드 리뷰에 사용할 것이다.
  2. git checkout --orphan <타겟 브렌치 이름> 을 통해 비어있는 브랜치를 생성한다. (이 브랜치는 추후 코드 리뷰의 타겟이 될 브랜치이다.)
  3. 이 비어있는 브랜치에서, git commit --allow-empty -m <커밋 메세지> 를 통해 비어있는 커밋을 생성한다.
  4. fork 한 레포지토리에 git push -u origin <타겟 브랜치 이름> 을 통해 이 브랜치를 푸시한다.
  5. 이제 우리가 리뷰하고자 하는 브랜치로 체크아웃한 이후, git checkout -b <리뷰 브랜치 이름> 새로운 브랜치를 만든다. (이 브랜치는 추후 코드 리뷰를 진행할 브랜치이다.)
  6. git rebase -i <타겟 브랜치 이름> 을 통해 브랜치의 아까 생성했던 비어있는 커밋이 비어있는 커밋이 되도록 한다.
  7. git push -u origin review-1 를 통해 fork 한 레포지토리에 푸시한다.

이게 끝이다. 이제 우리는 타겟 브렌치 에 PR 을 프로젝트에 영향을 미치지 않으면서 PR 과 브랜치를 사용하여 코드 리뷰를 진행할 수 있게 되었다.

앞으로

이 글이 도움이 되었길 바라며, 코드리뷰 시작하기 를 확인하여 이 주제에 어떻게 생각하는지 확인이 가능하다.


예제

번역 도중 내용의 이해를 돕기 위해 시각화가 안되어 있어서 어떻게 진행을 하는지 모르실까봐 준비했습니다. 이 부분은 원문에 존재하지 않습니다.

예를들어 프로젝트는 master 브랜치에서 작업하고 있으며, 타겟 브랜치의 이름은 review-target, 리뷰 브랜치 이름은 review 라고 가정해보겠습니다.

git checkout --orphan review-target
git commit --allow-empty -m "Empty Commit"
git push -u origin review-target

이후의 상황은 다음과 같습니다.

이제 review 브랜치를 세팅해보겠습니다.

git checkout master
git checkout -b review
git rebase -i review-target
git push -u origin review

이후의 상황은 다음과 같습니다.

이렇게 해서 master 브랜치와는 별개로 review 브랜치에서 review-target 브랜치로 PR 을 하면서 코드 리뷰를 진행할 수 있게 되었습니다.


원문

Recipe: code reviews for existing code with GitHub
To me, code reviews are one of the most useful practices of modern software development. It used to be quite tedious to set up tools and a workflow to be abl...