devlog.

Git 브랜치 전략 완벽 비교: Git Flow vs GitHub Flow vs Trunk-Based

·7분 읽기

팀으로 개발하다 보면 반드시 마주치는 문제가 있습니다. "이 기능은 어느 브랜치에서 작업해야 하지? 핫픽스는 어떻게 배포하지?" 브랜치 전략은 이런 혼란을 없애고 팀이 일관된 방식으로 코드를 관리하게 해줍니다.

Git Flow#

Vincent Driessen이 2010년에 제안한 전략으로, 가장 널리 알려진 브랜치 전략입니다.

브랜치 구조#

main          ──●──────────────────────●── (배포 버전)
                │                      │
develop       ──●──●──●──●──●──●──●──●── (개발 통합)
                   │        │
feature/login ─────●──●──●──┘
                            │
feature/signup    ──────────●──●──●──┘
브랜치역할생명주기
main프로덕션 배포 버전영구
develop개발 통합 브랜치영구
feature/*기능 개발임시 (merge 후 삭제)
release/*배포 준비임시
hotfix/*긴급 버그 수정임시

워크플로우#

# 1. feature 브랜치 생성
git checkout develop
git checkout -b feature/user-login

# 2. 개발 및 커밋
git add .
git commit -m "feat: 로그인 기능 구현"

# 3. develop에 merge
git checkout develop
git merge feature/user-login
git branch -d feature/user-login

# 4. release 브랜치로 배포 준비
git checkout -b release/1.0.0
# 버그 수정, 버전 업데이트...

# 5. main과 develop에 merge
git checkout main
git merge release/1.0.0
git tag -a v1.0.0 -m "Version 1.0.0"
git checkout develop
git merge release/1.0.0

언제 쓸까?#

  • 정기적인 버전 릴리즈가 있는 프로젝트 (앱 스토어, 패키지 라이브러리)
  • QA 단계가 길고 복잡한 경우
  • 여러 버전을 동시에 지원해야 하는 경우

GitHub Flow#

GitHub이 사용하는 단순한 전략입니다. 브랜치는 mainfeature 두 종류뿐입니다.

워크플로우#

# 1. main에서 브랜치 생성
git checkout main
git checkout -b feature/add-search

# 2. 개발 및 커밋
git commit -m "feat: 검색 기능 추가"

# 3. Pull Request 생성 → 코드 리뷰 → main에 merge

# 4. 즉시 배포 (main == 프로덕션)

핵심 원칙#

  • main 브랜치는 항상 배포 가능한 상태
  • 모든 변경은 PR을 통해 리뷰
  • merge되면 즉시 배포

언제 쓸까?#

  • 지속적 배포(CD)를 실천하는 팀
  • 소규모 팀, 스타트업
  • 웹 서비스처럼 항상 최신 버전 하나만 운영하는 경우

Trunk-Based Development#

main(trunk) 하나에 모든 개발자가 자주 커밋하는 방식입니다.

# 단명 브랜치 (1-2일 이내 merge)
git checkout -b feature/fix-button
git commit -m "fix: 버튼 스타일 수정"
git push
# PR → 즉시 merge

# 또는 직접 main에 push (소규모 팀)
git commit -m "chore: 패키지 업데이트"
git push origin main

Feature Flag와 함께 사용#

완성되지 않은 기능은 Feature Flag로 숨깁니다.

if (featureFlags.isEnabled('new-dashboard')) {
  return <NewDashboard />
}
return <OldDashboard />

언제 쓸까?#

  • CI/CD가 잘 갖춰진 팀
  • 테스트 커버리지가 높은 경우
  • 대규모 팀에서 merge 충돌을 줄이고 싶을 때

전략 비교#

기준Git FlowGitHub FlowTrunk-Based
복잡도높음낮음중간
배포 빈도낮음 (주기적)높음 (수시)매우 높음
팀 규모중대형소중형모든 규모
릴리즈 관리명확단순Feature Flag 필요
핫픽스 처리체계적빠름즉각적
학습 곡선높음낮음낮음

커밋 메시지 컨벤션#

어떤 전략을 쓰든 커밋 메시지 규칙을 통일하면 히스토리 관리가 쉬워집니다.

# Conventional Commits 형식
feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 리팩토링
test: 테스트 추가/수정
chore: 빌드 설정, 패키지 업데이트

# 예시
feat: 소셜 로그인 (Google OAuth) 구현
fix: 모바일에서 드롭다운 메뉴 닫히지 않는 문제 수정
docs: API 인증 방법 README에 추가

추천 선택 기준#

  1. 스타트업 / 소규모 팀: GitHub Flow — 단순하고 빠릅니다
  2. 앱/패키지 버전 관리 필요: Git Flow — 릴리즈 관리가 체계적입니다
  3. 대규모 팀, CI/CD 성숙: Trunk-Based — merge 충돌 최소화, 빠른 통합

어떤 전략이든 팀 전체가 합의하고 일관되게 따르는 것이 가장 중요합니다. 전략 자체보다 팀의 규율이 더 큰 영향을 미칩니다.

관련 포스트