본문 바로가기
Git

Git 브랜치 전략(1): GitHub flow

by 슥짱 2022. 1. 11.

Git 브랜치를 효과적으로 나누기 위한 전략은 대표적으로 GitHub flow, Git flow가 있다. 나는 이 중에서 Github flow만을 경험해 보았는데, 이번 새로운 팀 프로젝트에서는 팀내 브랜치 전략으로 Git flow를 채택하였다. 본격적으로 프로젝트를 시작하기에 앞서, 이번 시리즈를 통해 Git flow 전략은 어떤 흐름으로 이루어지는지 Github flow와 비교하며 알아보고자 한다.

 


Github flow

비교적 간단한 Github flow에 대해 먼저 알아보자. Github flow는 master 브랜치와 master가 아닌 브랜치로 구분된다. feature 또는 hotfix와 같이 목적에 따라 브랜치를 구분하지 않는다는 의미이다. 브랜치에서 개발이 완료되면 pull request를 올려 리뷰와 피드백을 받고, 승인되면 바로 master 브랜치로 병합하여 master를 최신 상태로 유지한다. Github flow에서 master 브랜치는 곧 product이며, 수시로 변화가 일어나기 때문에 CI가 거의 필수적이다.

브랜치 생성하기

브랜치를 세세히 나누지 않는 Github flow에서 브랜치의 네이밍은 굉장히 중요하다. 브랜치의 이름은 동료가 슬쩍만 보아도 어떤 작업을 하는지 알 수 있을 정도로 서술적이며 간단하게 짓는다. Github Docs의 예시를 빌리면 increase-test-timeout 또는 add-code-of-conduct와 같이 적는 것이 좋은 이름이라고 한다. 단어의 구분은 예시와 같이 대시(-)로 하도록 한다.

수정하기

브랜치 내에서 수정 사항이 있으면 바로 바로 커밋 해주는 것이 이상적이다. 하나의 커밋에 많은 수정 사항이 있는 경우, 나중에 잘못을 알게되어 브랜치를 revert 할 때 많은 시간이 들게 될 것이다. 또한 원격 저장소에 수시로 올리는 습관을 들이는 것이 좋다. 원격 저장소에 올라간 코드는 로컬 저장소의 영향을 받지 않기 때문에 코드가 망가졌을 때를 대비한 백업이 될 수 있다. 커밋 메시지는 브랜치와 마찬가지로, 최대한 서술적으로 적는 것이 좋다. 그래야 log를 보고 진행 상황을 한 눈에 파악할 수 있으며, 특히 동료들이 해당 커밋에서 어떤 수정 사항이 있었는지 이해하기 쉽다.

Pull request하기

작업이 완료되면 pull request를 올려 동료들에게서 코드 리뷰를 받도록 한다. pull request에는 변경사항을 요약하여 적고, 이미지 혹은 테이블 등을 첨부하여 어떤 내용을 수정되었는지 다른 사람이 쉽게 알 수 있도록 한다. 브랜치에서의 변경 사항이 곧장 master 브랜치로 반영되기 때문에 충분히 많은 시간을 검토와 피드백에 들여야한다.

리뷰 코멘트 남기기

리뷰어는 질문, 혹은 제안 등의 리뷰 코멘트를 남겨야 한다. 이는 전체 풀리퀘스트에 대한 내용일 수도 있고, 코드 내 특정 라인에 대한 리뷰일 수도 있다. 이미지를 올리거나 수정 코드를 제안하여 명확히 피드백을 주도록 한다. 구체적인 리뷰 방법에 대해서는 Github Docs를 참고한다.

Merge하기

Pull request가 리뷰어들에게서 승인됐다면 이제 master 브랜치로 merge한다. Merge후 배포는 CI/CD를 통해 자동으로 이루어져야 한다.

 


마무리

이번 글에선 Github flow에 대해 간단히 알아보았다. Git flow와 비교하고자 작성한 글인데 적다보니 오히려 Github flow의 장점들이 돋보여서 Git flow를 채택할 필요가 있었나 싶어졌다. 먼저 Github flow의 간단한 flow가 너무나 큰 장점이다. 또한 Github의 pull request 기능을 사용하기 때문에 자연스럽게 코드 리뷰를 하게 되는점 역시 마음에 든다. CI/CD가 거의 필수적이라는 점은 단점일 수 있겠으나 공부를 목적으로한 프로젝트의 경우 이를 고려할 필요는 없을 것 같다. 또한 시제품을 위한 프로젝트라면 CI/CD는 기본적으로 구축할테니 단점이 되지 않으리라 생각한다.

 

2편에서는 Git flow에 대해 다룰 것이다. 특히 Github flow와 비교하여, 과연 어떤 점이 뛰어나길래 사람들이 이렇게 편한 Github flow 보다 Git flow를 더 선호하는지 알아보도록 하겠다.

참고 자료

댓글