1. Git Flow란?
Git Flow는 Git을 효과적으로 사용할 있는 브랜치 관리 전략이다. Git Flow 전력을 따르면 팀 단위로 복잡한 프로젝트를 효과적으로 협업할 수 있으며, 개발 과정을 체계적으로 관리할 수 있다.
혼자서 개발하면 main 브랜치만을 소스코드를 관리해도 큰 어려움이 없겠지만, 여러 개발자들이 협업 과정에서 main 브랜치만을 사용해서 개발할 경우 소스코드 confilict가 자주 발생할 것이며, 이를 해결하는데 많은 비용이 발생할 것이다.
제품을 개발할 때, 혼자서 개발하는 일은 거의 없고, 많은 it 서비스 회사들이 Git Flow 전략에 따라 개발/운영을 진행하고 있다. Git Flow가 무엇인지 정확히 알아보고 상황에 따라 어떻게 대처하는지도 간단하게 알아보자.
2. Branch 종류와 역할
a. 주요 브랜치
꼭 존재해야 하는 브랜치로 main / develop 브랜치가 주요 브랜치에 해당된다.
a-1. main(master) 브랜치
- 항상 배포 가능한 상태를 유지해야 한다. 그러므로 안전한 코드만 이 브랜치에 merge 할 수 있다.
a-2. develop 브랜치
- 최신 개발 상태를 나타내며, 다음 출시 버전 출시 준비를 위한 개발 브랜치이다.
- 새로운 기능 개발이 끝나면, develop 브랜치에 merge 된다.
b. 보조 브랜치
보조 브랜치는 특정작업을 위해 일시적으로 생성되며, 해당 작업이 끝나면 삭제된다.
b-1. feature 브랜치
- 새로운 기능을 개발할 때 사용
- develop 브랜치에서 분기되어, 기능 개발이 완료되면 develop 브랜치에 merge 된다.
- 네이밍 예시: feature/login
b-2. release 브랜치
- 배포 준비를 위한 브랜치.
- develop 브랜치에서 분기되어, 테스트 및 버그 수정 작업이 이루어진다.
- 작업이 완료되면, main과 develop 브랜치로 merge 된다.
- 네이밍 예시: release/1.0.0
b-3. hotfix 브랜치
- 배포 후 긴급한 버그를 수정할 때 사용
- 버그를 해결할 수 있는 최소한의 작업만 처리하도록 해야한다.
- main 브랜치에서 분기되며, 작업이 완료되면 master와 develop 브랜치로 merge 된다.
- 네이밍 예시: hotfix/crtical-bug
3. Git Flow 작업 흐름
a. 새로운 기능 요구사항이 발생했을 때(Feature)
- develop 브랜치를 베이스 브랜치로 새로운 feature 브랜치를 생성한다.
- 기능 개발이 완료되면 develop 브랜치에 merge 한 후 해당 feature 브랜치는 삭제한다.
b. 배포 준비(relase)
- develop 브랜치를 베이스 브랜치로 새로운 release 브랜치를 생성한다.
- 해당 release 브랜치에서 테스트 및 버그 수정을 작업을 진행한다.
- 작업이 완료되면 master와 develop 브랜치에 merge 하고, 해당 release 브랜치는 삭제한다.
c. 운영 환경에서 치명적인 버그가 발생하거나 긴급하게 수정이 필요한 경우(Hotfix)
- master 브랜치를 베이스 브랜치로 새로운 hotfix 브랜치를 생성한다.
- 버그를 수정하고, master와 develop 브랜치에 merge 한다.
- 작업이 끝나면, 해당 hotfix 브랜치는 삭제한다.