Trunk based
- 브랜치 관리가 간단하고, CI/CD 와 함께 신속, 지속적인 개발과 배포에 용이
- 코드베이스가 항상 배포 가능한 상태를 유지하므로, 긴급 수정이나 기능 추가가 빠르게 이루어짐.
- 모든 개발자가 단일 브랜치에서 작업하기 때문에, 코드 품질과 안정성 관리에 주의가 필요함.
Branch
- main
- short-term
Git flow
- 2010
- 프로젝트의 안전성과 관리를 높이는데 초점을 맞춤.
- 브랜치 관리가 복잡하고, 신속한 배포가 어려움.
Branch
- main
- 항상 production에 배포 가능한 안정적인 코드를 유지하며, 모든 작업의 기준 브랜치 (permanent)
- develop
- 개발자가 feature 브랜치를 merge (permanent)
- feature
- 기능 개발을 위한 브랜치로, 개발이 완료되면 develop 브랜치로 merge
- release
- 배포 준비를 위해 QA(Intergration Test) 및 bug fix 후 main, develop로 merge
- hotfix
- 긴급한 버그 수정을 위한 브랜치로, main에서 분기하여 수정 후 main, develop으로 merge
GitHub flow
- 2011
- git flow 의 복잡성을 줄이기 위해 고안됨.
- 빠른 개발 및 배포와 피드백
Branch
- main
- production에 배포되는 안정적인 버전의 브랜치이며, 좀 더 엄격한 규칙이 필요(permanent)
- feature
- 기능 개발을 위한 브랜치로, 개발이 완료되면 main 브랜치로 merge
- 브랜치명은 작업 내용을 표현할 수 있도록 명명
GitLab flow
- 2014
- Git flow와 GitHub flow의 중간 정도의 혼합 방식
- 환경 별 브랜치 사용
Branch
- main
- 항상 production에 배포 가능한 안정적인 코드를 유지하며, 모든 작업의 기준 브랜치 (permanent)
- feature
- 기능 개발이 완료되면 main 브랜치로 merge
- staging(optional)
- staging환경에서 변경 사항을 테스트 및 검증하여 문제가 없으면 production으로 병함 (permanent)
- production
- 실제 서비스에 배포되는 브랜치 (permanent)
어떻게 적용하면 좋을까?
복잡하고 큰 규모의 프로젝트, 정기 릴리스가 필요한 때 Git Flow를 적용하면 좋을 것 같다. 차량, IOT 기기와 같은 분야에서 많이 이용될 것이고, 참여했던 차량 SW 프로젝트에서 기반으로 한 것이 Git Flow이다.
빠른 변화와 피드백, 하루에도 여러 번의 배포가 이루어진다면 Trunk Based, GitHub Flow 기반의 Workflow를 사용할 수 있다. SaaS, Agile 방식에 적합하고, 단순하지만 그만큼 자동화 테스트, 롤백, 코드 리뷰와 같은 개발 문화 등이 이루어져야 할 것이다.
Workflow는 딱 정하는 것이 아닌 조직, 프로젝트, 여러 가지 현재 상황에 맞추어 가는 것이 필요하다. 실제로 안정성을 위해 ‘feature-develop-main’, ‘feature-main-production’로 구성을 했다가, CI/CD에 unit test, e2e를 적용 후에 ‘feature-main’으로 변경을 했었다.