git flow란?
- Git을 이용한 소프트웨어 개발 프로세스에서 브랜치 관리 전략 중 하나이다.
- 5가지의 주요 브랜치를 구분하여 프로젝트를 진행한다.
- 각 브랜치는 목적이 정해져있기 때문에 목적에 맞는 상태를 유지하면서 프로젝트가 진행된다.
브랜치 종류
- Main
- Develop
- Feature
- Release
- 배포 준비하는 브랜치
- Develop에서 분기되고 준비가 끝나면 Main에 병합되고 버전 태깅한다.
- Hotfix
- Main에서 발견된 긴급한 버그 수정을 위한 브랜치
- 처음 기능 추가할 때처럼 Develop, Feature 브랜치를 돌면서 작업하면 늦다.
- Main에서 바로 분기되고 수정 사항은 Develop, Main에 바로 적용한다.

git flow 장단점
- 장점
- 개발, 배포, 유지보수 작업을 체계적으로 구분한다.
- 버전 관리와 배포가 용이하다.
- 긴급한 버그 대응이 가능하다.
- 역할이 명확히 구분되어있어 대규모 협업에 용이하다.
- 단점
- 복잡성 : 소규모 프로젝트(빠른 개발환경)에서는 오히려 복잡하다.
- 학습 곡선 : 처음 접하는 개발자는 규칙을 배우고 적용하는데 시간이 필요하다.
- 유연성 부족 : 역할이 명확하기 때문에 유연성은 부족하다.
다른 git 전략들
- Github Flow
- 단순성
- 기능이나 버그 수정 브랜치를 생성하고 PR을 통해 리뷰 후 main에 병합
- main은 배포 가능한 상태 유지
- 소규모, 빠른 개발 주기에 적합
- Gitlab Flow
- 환경 기반 브랜치 : 개발, 스테이징, 프로덕션
- 보호된 브랜치 : 특정 사용자만 변경
- 유연성 : Github flow와 Git flow의 중간 정도
- Feature Branch Workflow
- 기능 중심 : 기능이나 수정 사항별로 브랜치 생성
- 병합 전략 : main에 병합 전 코드 리뷰
- 다양한 프로젝트 적용 가능
- Trunk Based Development(TBD)
- 단일 개발 라인 : trunk 브랜치에서 짧은 사이클로 개발과 병합 진행
- Feature Toggles : 기능 온오프 코드를 포함시켜서 미완성 상태일 때는 오프를 완성되면 온으로 변경하여 기능 추가가 이뤄진다.
- 지속적인 통합 : 모든 개발자가 주 브랜치에서 작업하면서 병합을 하기 때문에 충돌 최소화
참고 자료
https://sungjk.github.io/2023/02/20/branch-strategy.html
https://nvie.com/posts/a-successful-git-branching-model/