프로젝트에 CI/CD를 적용하면서 브랜치의 용도를 나눠야 할 필요성을 느끼게 되었습니다.
프로젝트를 진행하면서 기능의 우선순위를 나눠 버전 관리를 위해 Git-Flow 전략을 참고하여 브랜치를 5종류로 나눠 관리하려고 합니다.
다양한 브랜치 관리 방법 중에 Git-Flow 방식을 도입한 이유는 앱 런칭을 위해 기획한 내용을 처음부터 완벽한 상태로 출시하기엔 어려운 점이 많았고, 이를 해결하기 위해 기능의 우선순위를 두어 버전별로 서버를 배포하는 방식으로 진행하기로 했습니다.
Git-Flow 전략 간단하게 살펴보기
Git-Flow에는 5가지 종류의 브랜치가 존재합니다. 항상 유지되는 메인 브랜치들(master, develop)과 일정 기간 동안만 유지되는 보조 브랜치들(feature, release, hotfix)이 있습니다.
Master Branch
제품으로 출시될 수 있는 브랜치
배포(Release) 이력을 관리하기 위해 사용, 즉 배포 가능한 상태만을 관리한다.
Develop Branch
다음 출시 버전을 개발하는 브랜치
기능 개발을 위한 브랜치들을 병합하기 위해 사용, 즉, 모든 기능이 추가되고 버그가 수정되어 배포 가능한 안정적인 상태라면 develop 브랜치를 ‘master’ 브랜치에 병합한다.
평소에는 이 브랜치를 기반으로 개발을 진행한다.
Feature Branch
feature 브랜치는 새로운 기능 개발 및 버그 수정이 필요할 때마다 ‘develop’ 브랜치로부터 분기한다.
개발이 완료되면 ‘develop’ 브랜치로 병합하여 다른 사람들과 공유한다.
더이상 필요하지 않은 feature 브랜치는 삭제한다.
Feature 브랜치 이름 → feat_기능요약
Release Branch
이번 출시 버전을 준비하는 브랜치
배포를 위한 전용 브랜치를 사용함으로써 한 팀이 해당 배포를 준비하는 동안 다른 팀은 다음 배포를 위한 기능 개발을 계속할 수 있다.
- develop’ 브랜치에서 배포할 수 있는 수준의 기능이 모이면 release 브랜치를 분기한다.
release 브랜치를 만드는 순간부터 배포 사이클이 시작된다.
release 브랜치에서는 배포를 위한 최종적인 버그 수정, 문서 추가 등 릴리즈와 직접적으로 관련된 작업을 수행한다.
직접적으로 관련된 작업들을 제외하고는 release 브랜치에 새로운 기능을 추가로 병합하지 않는다. - ‘release’ 브랜치에서 배포 가능한 상태가 되면
(배포 가능한 상태 : 새로운 기능을 포함한 상태로 모든 기능이 정상적으로 동작하는 상태)
‘master’ 브랜치에 병합한다. (이때, 병합한 커밋에 Release 버전 태그를 부여)
배포를 준비하는 동안 release 브랜치가 변경되었을 수도 있으므로 배포 완료 후 develop 브랜치에도 병합한다.
이때 다음 번 배포를 위한 개발 작업은 develop 브랜치에서 계속 진행해 나간다.
릴리즈 브랜치 이름 → release-1.2 와 같이 버전별로 관리한다.
Hotfix Branch
출시 버전에서 발생한 버그를 수정하는 브랜치
배포한 버전에서 긴급하게 수정을 해야 할 필요가 있을 경우, ‘master’에서 분기하는 브랜치이다.
‘master’ 브랜치에서 직접 브랜치를 만들어 필요한 부분만을 수정한 후 ‘master’ 브랜치에 병합하여 이를 배포한다.
- 배포한 버전에 긴급하게 수정을 해야 할 필요가 있을 경우, master 브랜치에서 hotfix 브랜치를 분기한다.
- 문제가 되는 부분만을 빠르게 수정한 후 다시 master 브랜치에 병합하여 이를 안정적으로 다시 배포한다.
- 새로운 버전 이름으로 태그를 매긴다. hotfix-1.2.1
hotfix 브랜치에서의 변경사항은 ‘develop’ 브랜치에도 병합한다.
이 방식을 도입하여 이전보다 관리해야할 브랜치에 대한 부담은 늘었지만, 전보다 일관되게 여러 상황들을 대처할 수 있다는 점에 장점이 있다고 생각합니다. 브랜치 전략을 지켜 프로젝트를 진행해보고 이후 회고를 통해 팀에 맞는 브랜치 전략을 어떻게 발전시킬 수 있을지에 대해 고민해보려고 합니다.
[참고자료]
https://mylko72.gitbooks.io/git/content/branch/branch_type.html
https://www.jetbrains.com/ko-kr/teamcity/ci-cd-guide/concepts/branching-strategy/
'Backend' 카테고리의 다른 글
Spring에서 기상청 API 사용하기 (0) | 2023.09.08 |
---|---|
Jackson 라이브러리란? (0) | 2023.09.07 |