개발 팁

Git 브랜치 전략 비교 분석 — GitFlow vs GitHub Flow vs Trunk-Based Development

노동1호 2026. 4. 18. 19:03

팀 프로젝트를 진행하다 보면 "어떤 브랜치 전략을 쓰는 게 좋을까?"라는 질문을 받게 됩니다. GitFlow, GitHub Flow, Trunk-Based Development — 세 가지 전략 중 무엇이 우리 팀에 맞을까요? 정답은 하나가 아닙니다. 프로젝트 성격과 팀 규모, 배포 방식에 따라 최적의 선택이 달라집니다.

이 글에서는 개발팀이 가장 많이 사용하는 세 가지 Git 브랜치 전략을 실무 관점에서 비교 분석합니다.

Git 브랜치 전략이 왜 중요할까

Git은 매우 유연한 버전 관리 시스템입니다. 브랜치를 자유롭게 만들고 병합할 수 있죠. 하지만 그 유연함이 팀 협업에서 혼란을 초래하기도 합니다. "금요일 오후에 머지했다가 후회한 경험"이 있다면, 팀에 명확한 브랜치 전략이 없었을 가능성이 높습니다.

DORA(State of DevOps) 보고서에 따르면, 잘 정의된 워크플로우를 가진 팀은 배포 빈도, 리드 타임, 복구 시간, 변경 실패율 네 가지 핵심 지표에서 유의미하게 더 나은 성과를 보입니다. 브랜치 전략은 팀의 협업 방식과 배포 문화를 결정하는 기반입니다.

GitFlow — 구조화된 접근법

Vincent Driessen이 제안한 GitFlow는 5개의 장수 브랜치로 병렬 개발을 관리합니다.

브랜치 구조

  • main — 프로덕션 배포 코드
  • develop — 개발 통합 브랜치
  • feature/* — 기능 개발 (예: feature/user-auth)
  • release/* — 릴리즈 준비
  • hotfix/* — 프로덕션 긴급 수정
# GitFlow 핵심 명령어
git checkout -b feature/user-auth develop
# 개발 완료 후 develop에 병합
git checkout develop
git merge --no-ff feature/user-auth
# 릴리즈 준비 후 main에 병합
git checkout main
git merge --no-ff release/1.2.0
git tag -a 1.2.0

장단점

장점은 명확한 구조입니다. 데스크톱 앱, 모바일 앱처럼 버전별 배포가 필요한 프로젝트에 적합합니다. v2.x와 v3.x를 동시 유지해야 하는 환경에서 특히 유용하죠. 규제가 엄격한 의료·금융 산업에서도 선호됩니다.

단점은 복잡성입니다. JetBrains 설문조사에서 GitFlow 사용률은 약 22%로 과거보다 감소했습니다. 병합 충돌 해결에 개발 시간의 10~25%를 소모하는 경우도 있습니다. 창시자 Driessen조차 "컨티뉴어스 딜리버리 환경에서는 더 단순한 워크플로우를 쓰라"고 권장했죠.

GitHub Flow — 미니멀한 접근법

GitHub Flow는 단 하나의 규칙으로 동작합니다. "main 브랜치는 항상 배포 가능해야 한다." 간단하고 빠르고, 목적을 달성합니다.

# GitHub Flow — 4단계
git checkout -b fix/profile-upload
git add . && git commit -m "fix: null content-type 처리"
git push origin fix/profile-upload
# PR 생성 → 리뷰 → main 병합 → 즉시 배포

GitHub 내부 데이터에 따르면, GitHub Flow를 사용하는 팀의 PR 생성부터 병합까지 중앙값은 약 6시간입니다.

장단점

SaaS, REST API 등 프로덕션에 하나 버전만 존재하는 서비스에 최적입니다. 5~15명 규모의 팀에서 하루 3~10개 PR을 병합하는 속도를 낼 수 있습니다.

단점도 명확합니다. 다중 버전 동시 지원이 안 되고, main이 깨지면 전체 배포가 멈춥니다. PR 리뷰가 병목이 될 수도 있죠. 업계 평균 PR 대기 시간은 약 24시간입니다.

Trunk-Based Development — 고성능 접근법

TBD는 모든 개발자가 하루에 최소 한 번 main에 커밋하고, 피처 플래그로 미완성 기능을 관리합니다. DORA 메트릭스에서 "엘리트 팀"이 주로 사용하는 방식이죠. Google, Meta, Netflix가 모두 TBD 변형을 사용합니다.

핵심: 피처 플래그

# 피처 플래그 패턴
async def process_checkout(order):
    if await feature_flags.is_enabled("new_checkout_flow"):
        return await process_new_checkout(order)
    return await process_legacy_checkout(order)

미완성 코드가 프로덕션에 있지만, 플래그가 꺼져 있어 사용자에게 노출되지 않습니다. LaunchDarkly, Unleash 같은 도구로 관리합니다. 기능이 완전히 롤아웃되면 반드시 플래그를 정리해야 합니다.

성능 수치

TBD 엘리트 팀의 성능은 압도적입니다. 배포 빈도는 주문형, 하루 수십 회 이상입니다. 저성능 팀 대비 최대 182배 자주 배포합니다. 리드 타임은 1일 미만(127배 빠름), 복구 시간 1시간 이내, 변경 실패율 0~5%를 유지합니다.

전제조건은 테스트 커버리지 70% 이상과 피처 플래그 인프라입니다. 도입 시 2~4주의 적응 기간이 필요하지만, 팀의 자동화 수준을 객관적으로 점검하는 계기가 됩니다.

세 전략 비교표

기준 GitFlow GitHub Flow Trunk-Based
복잡도 높음 낮음 중간
적합 팀 20명+ 5~15명 3명+ (규율 필수)
배포 주기 주/월 하루 여러 번 하루 수십 번
다중 버전
필수 전제 없음 CI/CD 테스트+피처플래그
병합 충돌 위험 높음 보통 낮음

실무 팁: 하이브리드가 정답이다

약 60%의 팀이 순수 형태가 아닌 하이브리드를 사용합니다. TBD + 릴리즈 브랜치, GitHub Flow + 피처 플래그, GitFlow 핵심 + TBD 실험 기능 등 조합이 가능합니다. 교과서대로 따를 필요 없이, 팀에 맞게 조합하세요.

가장 중요한 것은 전략 자체가 아닙니다. 팀이 일관되게 따르고, 자동화로 뒷받침하는 것입니다. 확신이 없다면 GitHub Flow로 시작하고, 테스트가 충분해지면 TBD로 점진 전환하세요.

요약

  • GitFlow — 버전 관리가 중요한 데스크톱/모바일 앱, 대규모 규제 산업에 적합
  • GitHub Flow — SaaS와 웹 앱에 가장 널리 쓰이는 실용적 선택
  • Trunk-Based — 엘리트 팀의 선택, 테스트 자동화 필수
  • 하이브리드가 실무의 정답 — 팀과 프로젝트에 맞게 조합하세요