Git Flow, GitHub Flow, GitLab Flow 비교

한눈에 보기

릴리스 중심의 Git Flow, 지속 배포를 위한 GitHub Flow, 환경 브랜치로 배포 단계를 표현하는 GitLab Flow를 비교하고 배포 주기와 제품 형태에 따른 선택 기준을 정리한다.

최종 업데이트 2026.09.17

깃 플로(Git Flow), 깃허브 플로(GitHub Flow), 깃랩 플로(GitLab Flow)는 팀이 브랜치를 만들고 병합하고 배포하는 방식을 정의한 대표적인 브랜치 전략이다. Git Flow는 버전 릴리스를 전제로 여러 종류의 브랜치를 엄격하게 나누는 전략이고, GitHub Flow는 메인 브랜치 하나와 짧은 기능 브랜치만으로 지속 배포를 지향하는 단순한 전략이며, GitLab Flow는 그 중간에서 환경 브랜치나 릴리스 브랜치로 배포 단계를 표현하는 절충안이다. 어떤 전략이 맞는지는 배포 주기와 제품 형태에 따라 달라진다.

Git Flow: 릴리스 중심의 엄격한 전략

Git Flow는 2010년 빈센트 드리센(Vincent Driessen)이 제안한 모델로, 다섯 종류의 브랜치를 역할별로 나눈다. 영구 브랜치로 main과 develop을 두고, 보조 브랜치로 feature, release, hotfix를 필요할 때 만들었다가 병합 후 삭제한다.

  • main: 배포된 버전만 존재하며 커밋마다 버전 태그를 붙인다.
  • develop: 다음 릴리스를 준비하는 통합 브랜치다.
  • feature: develop에서 분기해서 기능을 개발하고 develop으로 돌아간다.
  • release: 릴리스 직전 안정화 작업을 하며, 완료되면 main과 develop 양쪽에 병합한다.
  • hotfix: 배포된 버전의 긴급 버그를 main에서 직접 분기해 고치고 양쪽에 병합한다.
# 기능 개발
git checkout -b feature/<기능명> develop
git checkout develop
git merge --no-ff feature/<기능명>

# 릴리스 준비와 배포
git checkout -b release/1.2.0 develop
git checkout main
git merge --no-ff release/1.2.0
git tag -a v1.2.0

버전을 명시적으로 관리해야 하는 설치형 소프트웨어, 모바일 앱, 여러 버전을 동시에 지원해야 하는 제품에 잘 맞는다. 반면 브랜치 구조가 복잡하고 병합 지점이 많아, 하루에도 여러 번 배포하는 웹 서비스에는 과한 전략이라는 비판을 받는다. 제안자 본인도 지속 배포 환경이라면 더 단순한 전략을 쓰라고 후기를 남겼다.

GitHub Flow: 지속 배포를 위한 최소 전략

GitHub Flow는 규칙이 단 하나의 원칙으로 요약된다. main 브랜치는 언제나 배포 가능해야 한다는 것이다. 모든 작업은 main에서 분기한 기능 브랜치에서 진행하고, 풀 리퀘스트(Pull Request)를 열어 리뷰와 자동 테스트를 통과하면 main에 병합한다. 병합된 main은 곧바로, 혹은 매우 짧은 주기로 배포된다.

git switch main
git pull origin main
git switch -c feature/<기능명>
# 작업 후
git push -u origin feature/<기능명>
# PR 생성, 리뷰와 CI 통과 후 main에 병합, 즉시 배포

develop도 release도 없기 때문에 배우기 쉽고 병합 충돌이 줄어든다. 다만 릴리스 버전 개념이 없어서 여러 버전을 병행 지원하거나 배포 시점을 통제해야 하는 환경에는 맞지 않고, 배포 파이프라인과 테스트 자동화가 충분히 갖춰져 있어야 안전하게 굴러간다. 아직 공개하면 안 되는 기능은 기능 플래그(feature flag)로 숨기는 기법을 함께 쓴다.

GitLab Flow: 배포 단계를 브랜치로 표현하는 절충안

GitLab Flow는 GitHub Flow의 단순함을 유지하면서, 코드가 여러 환경을 거쳐 배포되는 현실을 브랜치로 표현한다. 두 가지 변형이 있다.

첫째는 환경 브랜치(environment branch) 방식이다. main 외에 staging, production 같은 브랜치를 두고, 코드는 항상 상류에서 하류로만 흐른다. main에 병합된 변경이 검증을 거쳐 staging으로, 다시 production으로 병합되며, 각 브랜치로의 병합이 곧 해당 환경으로의 배포를 의미한다. 어떤 코드가 어느 환경에 있는지 브랜치만 봐도 알 수 있다.

둘째는 릴리스 브랜치(release branch) 방식이다. 버전을 유지 보수해야 하는 제품이라면 main에서 2-3-stable 같은 릴리스 브랜치를 만들고, 버그 수정은 반드시 main에 먼저 적용한 뒤 해당 릴리스 브랜치로 체리픽(cherry-pick)한다. 수정이 main에서 누락되는 사고를 막기 위한 규칙이다.

# main에 먼저 수정 후 릴리스 브랜치로 가져오기
git checkout 2-3-stable
git cherry-pick <수정-커밋-해시>

세 전략 비교와 선택 기준

항목Git FlowGitHub FlowGitLab Flow
영구 브랜치main, developmainmain과 환경 또는 릴리스 브랜치
복잡도높음낮음중간
배포 주기주기적 릴리스지속 배포단계적 배포나 주기적 릴리스
버전 병행 지원hotfix와 태그로 지원어려움릴리스 브랜치로 지원
잘 맞는 제품설치형 소프트웨어, 앱웹 서비스, SaaS환경이 나뉜 서비스, 버전 유지 제품

선택 기준은 결국 배포 방식이다. 하루에도 여러 번 배포하는 웹 서비스라면 GitHub Flow, 검증 환경을 거쳐 순차 배포해야 하거나 버전을 유지 보수해야 한다면 GitLab Flow, 명확한 버전 릴리스 주기를 가진 제품이라면 Git Flow가 출발점이 된다. 실제 팀들은 전략을 교과서 그대로 쓰기보다 자기 배포 파이프라인에 맞게 변형해서 쓴다.

면접에서 이렇게 물어본다

  • Git Flow의 다섯 가지 브랜치 종류와 각 브랜치의 수명 주기를 설명해 보라.
  • GitHub Flow가 성립하려면 어떤 전제 조건(테스트 자동화, 배포 파이프라인 등)이 필요한가.
  • hotfix 브랜치를 main과 develop 양쪽에 병합해야 하는 이유는 무엇인가.
  • GitLab Flow에서 버그 수정을 main에 먼저 넣고 릴리스 브랜치로 체리픽하는 이유를 설명해 보라.
  • 지금 다니는 팀 또는 프로젝트에 브랜치 전략을 도입한다면 무엇을 고르고 그 근거는 무엇인가.
Git과 협업 문서 전체 보기

이 개념, 내 코드에서는 어떻게 물어볼까요

데브핏(DevFit)에 채용공고 URL을 붙여 넣고 레포지토리를 연결하면, 내가 쓴 커밋에서 예상 질문과 어필 포인트를 만듭니다. 하루 10회까지 무료입니다. 합불 판정이나 지원자 랭킹은 만들지 않고, 최종 판단은 사람이 합니다.

공고 넣고 시작하기