[번역] Github 를 통해 이미 작성한 코드를 리뷰하는 방법
코드 리뷰
외주를 받아 저 혼자 진행하던 프로젝트의 코드 품질이 궁금하여 같은 팀(팀 크레센도) 에 계시는 Skile 형께 코드 리뷰를 부탁하는 일이 있었습니다.
이를 위해 저는 Github 에 Private Repository 를 만들어 이 프로젝트를 푸시하고, 형에게 코드 리뷰 요청을 드렸습니다.
그러자 Recipe: code reviews for existing code with GitHub
라는 글의 링크와 함께 PR 을 통해 찾아오셨고, 이런 방식으로 코드 리뷰를 도와주시겠다고 하셨습니다.
이전부터 Github
를 통한 코드 리뷰에 관심을 가지고 있던 터라 어떤 프로세스를 가지는지 자세히 알아보고, 스스로 정리하기 위해 글을 작성하게 되었습니다.
용어 통일
Commit
: 커밋Pull Request
: PRWorkflow
: 워크플로우Merge
: 병합Branch
: 브랜치Comment
: 코멘트Code Review
: 코드 리뷰Repository
: 레포지토리Checkout
: 체크아웃
서문
나에게 있어서, 코드 리뷰는 소프트웨어 개발과 관련된 최신 유행 중에서 제일 유용한 성장 방법 중 하나라고 생각한다. 원래의 코드 리뷰 시스템들은 프로젝트에 사용하기까지 워크플로우를 구성하고 각종 설정을 진행하는데 매우 지루하고 많은 시간이 필요했었지만, 깃헙과 깃랩처럼 코드 리뷰 UI와 함께 PR 워크플로우를 플랫폼으로 잘 녹여낸 사례가 증가함에 따라 이젠 코드 리뷰를 시스템적으로 도입하지 않을 이유가 없어졌다. 이제 별다른 과정 없이 브랜치를 만들고, PR을 만들고, 코드 리뷰를 하고, 병합만 하면 된다.
하지만 코드 리뷰를 진행해야 할 코드가 이미 커밋되었다면 어떻게 할 것인가? 괜찮다. 깃헙에서는 이미 진행했던 커밋에 대한 코드 리뷰를 할 수 있다. 그러나 레포지토리 곳곳에 코멘트를 다는 것은 지루한 일이 될 수 있다. 그래서 나는 깃헙 (또는 깃랩)을 PR과 함께 코드 리뷰 도구로 사용하여 레포지토리 전체를 살펴볼 수 있는 기술을 소개하려 한다.
목표
우리는 어떤 프로젝트에서든 이미 작성하여 커밋했었던 코드를 (PR 사용 여부와 상관 없이) 리뷰할 수 있는 방법을 알아보고자 한다. 또한 우리는 우리는 기존에 코드 리뷰를 했었던 방법과 동일하게 PR 을 사용하려 한다.
방법
우리는 모든 프로젝트의 코드와 함께 새로운 PR 을 간단히 만들 것이다. 하지만 이 PR이 프로젝트에 영향을 미치지 않도록 하고 싶으니 아래와 같이 진행한다.
- 프로젝트에 대한 코드 리뷰를 진행하기 위해 프로젝트를 fork 한다. 그리고 이 fork 한 프로젝트를 코드 리뷰에 사용할 것이다.
git checkout --orphan <타겟 브렌치 이름>
을 통해 비어있는 브랜치를 생성한다. (이 브랜치는 추후 코드 리뷰의 타겟이 될 브랜치이다.)- 이 비어있는 브랜치에서,
git commit --allow-empty -m <커밋 메세지>
를 통해 비어있는 커밋을 생성한다. - fork 한 레포지토리에
git push -u origin <타겟 브랜치 이름>
을 통해 이 브랜치를 푸시한다. - 이제 우리가 리뷰하고자 하는 브랜치로 체크아웃한 이후,
git checkout -b <리뷰 브랜치 이름>
새로운 브랜치를 만든다. (이 브랜치는 추후 코드 리뷰를 진행할 브랜치이다.) git rebase -i <타겟 브랜치 이름>
을 통해 브랜치의 아까 생성했던 비어있는 커밋이 비어있는 커밋이 되도록 한다.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 을 하면서 코드 리뷰를 진행할 수 있게 되었습니다.