[GitHub 100일 챌린지] Day 50 - 브랜치 전략 (Git Flow)
[GitHub 100일 챌린지] Day 50 - 브랜치 전략 (Git Flow)
100일 챌린지 Day 50 - 실무에서 사용하는 Git 브랜치 전략을 배웁니다.
배울 내용
- Git Flow란
- GitHub Flow
- 브랜치 전략 선택하기
Topic1. Git Flow란
체계적인 릴리스 관리를 위한 브랜치 전략입니다.
Git Flow 브랜치 구조
5가지 브랜치 타입:
gitGraph
commit id: "Initial"
branch develop
checkout develop
commit id: "Dev 1"
branch feature/login
checkout feature/login
commit id: "Login work"
checkout develop
merge feature/login
branch release/1.0
checkout release/1.0
commit id: "RC fixes"
checkout main
merge release/1.0 tag: "v1.0"
checkout develop
merge release/1.0
branch hotfix/security
checkout hotfix/security
commit id: "Fix CVE"
checkout main
merge hotfix/security tag: "v1.0.1"
checkout develop
merge hotfix/security
브랜치별 역할:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1. main (master)
- 프로덕션 코드
- 항상 배포 가능
- 태그로 버전 관리
2. develop
- 개발 메인 브랜치
- 다음 릴리스 준비
- feature들이 병합됨
3. feature/*
- 새 기능 개발
- develop에서 분기
- develop으로 병합
4. release/*
- 릴리스 준비
- develop에서 분기
- main과 develop에 병합
5. hotfix/*
- 긴급 버그 수정
- main에서 분기
- main과 develop에 병합
Git Flow 워크플로우
기능 개발 흐름:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. develop에서 feature 생성
git checkout develop
git pull origin develop
git checkout -b feature/user-profile
# 2. 기능 개발
git add .
git commit -m "feat: Add user profile page"
# 3. develop에 병합
git checkout develop
git merge --no-ff feature/user-profile
git push origin develop
git branch -d feature/user-profile
릴리스 흐름:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. release 브랜치 생성
git checkout develop
git checkout -b release/1.0.0
# 2. 버전 정보 업데이트, 버그 수정
echo "1.0.0" > VERSION
git commit -am "chore: Bump version to 1.0.0"
# 3. main에 병합 (릴리스)
git checkout main
git merge --no-ff release/1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
# 4. develop에도 병합 (버그 수정 반영)
git checkout develop
git merge --no-ff release/1.0.0
# 5. release 브랜치 삭제
git branch -d release/1.0.0
핫픽스 흐름:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. main에서 hotfix 생성
git checkout main
git checkout -b hotfix/security-patch
# 2. 버그 수정
git commit -am "fix: Security vulnerability patch"
# 3. main에 병합
git checkout main
git merge --no-ff hotfix/security-patch
git tag -a v1.0.1 -m "Hotfix 1.0.1"
# 4. develop에도 병합
git checkout develop
git merge --no-ff hotfix/security-patch
# 5. hotfix 브랜치 삭제
git branch -d hotfix/security-patch
Topic2. GitHub Flow
단순하고 빠른 배포를 위한 브랜치 전략입니다.
GitHub Flow 구조
2가지 브랜치 타입:
gitGraph
commit id: "C1"
branch feature/login
checkout feature/login
commit id: "Add login"
checkout main
merge feature/login tag: "Deploy"
branch feature/payment
checkout feature/payment
commit id: "Add payment"
checkout main
merge feature/payment tag: "Deploy"
GitHub Flow 원칙:
1
2
3
4
5
6
1. main 브랜치는 항상 배포 가능
2. 새 작업은 브랜치에서
3. 정기적으로 push
4. Pull Request로 리뷰
5. 리뷰 후 main에 병합
6. 병합 즉시 배포
GitHub Flow 워크플로우
전체 흐름:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1. feature 브랜치 생성
git checkout main
git pull origin main
git checkout -b feature/search
# 2. 작업 + 정기적 push
git add .
git commit -m "feat: Add search functionality"
git push origin feature/search
# 3. Pull Request 생성
gh pr create --title "Add search feature" \
--body "Implements user search with filters"
# 4. 리뷰 + 수정
# (GitHub에서 리뷰)
git add .
git commit -m "fix: Address review comments"
git push origin feature/search
# 5. main에 병합
gh pr merge --squash
# 6. 즉시 배포
# (CI/CD 자동 배포)
# 7. 브랜치 정리
git checkout main
git pull origin main
git branch -d feature/search
GitHub Flow 장점:
1
2
3
4
5
✅ 단순함 (브랜치 2개만)
✅ 빠른 배포
✅ CI/CD 친화적
✅ 배우기 쉬움
✅ 작은 팀에 적합
GitHub Flow 단점:
1
2
3
❌ 복잡한 릴리스 관리 어려움
❌ 여러 버전 동시 유지 어려움
❌ 릴리스 스케줄 관리 어려움
Topic3. 브랜치 전략 선택하기
프로젝트 특성에 맞는 전략을 선택합니다.
Git Flow vs GitHub Flow
비교표:
1
2
3
4
5
6
7
8
9
┌─────────────┬──────────────┬───────────────┐
│ 특성 │ Git Flow │ GitHub Flow │
├─────────────┼──────────────┼───────────────┤
│ 브랜치 수 │ 5개 │ 2개 │
│ 복잡도 │ 높음 │ 낮음 │
│ 릴리스 관리 │ 체계적 │ 단순 │
│ 배포 속도 │ 느림 │ 빠름 │
│ 학습 곡선 │ 가파름 │ 완만 │
└─────────────┴──────────────┴───────────────┘
선택 기준
Git Flow 적합한 경우:
1
2
3
4
5
6
7
8
9
10
✅ 정해진 릴리스 주기 (월간/분기별)
✅ 여러 버전 동시 유지보수
✅ 엄격한 품질 관리
✅ 큰 팀 (10명 이상)
✅ 패키지/라이브러리 개발
예시:
- 엔터프라이즈 소프트웨어
- 모바일 앱 (앱스토어 심사)
- On-premise 솔루션
GitHub Flow 적합한 경우:
1
2
3
4
5
6
7
8
9
10
✅ 지속적 배포 (CD)
✅ 웹 서비스 / SaaS
✅ 빠른 반복 개발
✅ 작은 팀 (< 10명)
✅ 단일 프로덕션 버전
예시:
- 웹 애플리케이션
- API 서비스
- 스타트업 프로젝트
실무 팁
Git Flow 실무 적용:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# git-flow 도구 사용
brew install git-flow
# 초기화
git flow init
# feature 시작/완료
git flow feature start login
git flow feature finish login
# release 시작/완료
git flow release start 1.0.0
git flow release finish 1.0.0
# hotfix 시작/완료
git flow hotfix start security-patch
git flow hotfix finish security-patch
GitHub Flow 실무 적용:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 1. 브랜치 보호 규칙 설정
# Settings → Branches → Add rule
# - Require pull request reviews
# - Require status checks to pass
# - Require branches to be up to date
# 2. CI/CD 파이프라인 설정
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy
run: ./deploy.sh
# 3. 자동 배포 후 모니터링
혼합 전략:
1
2
3
4
5
6
7
8
9
10
많은 팀이 두 전략을 혼합해서 사용:
1. 개발: GitHub Flow (빠른 개발)
2. 릴리스: Git Flow (체계적 관리)
예시:
- develop: 개발 메인 브랜치
- main: 프로덕션
- feature/*: GitHub Flow 방식으로 개발
- release/*: 필요 시에만 생성
정리
오늘 배운 내용:
1. Git Flow:
- 5개 브랜치: main, develop, feature, release, hotfix
- 체계적 릴리스 관리
- 큰 프로젝트에 적합
2. GitHub Flow:
- 2개 브랜치: main, feature
- 단순하고 빠른 배포
- 웹 서비스에 적합
3. 선택 기준:
1
2
3
4
5
6
7
8
9
Git Flow:
- 정해진 릴리스 주기
- 여러 버전 유지보수
- 엄격한 품질 관리
GitHub Flow:
- 지속적 배포
- 빠른 반복 개발
- 단일 프로덕션 버전
Phase 5 완료! 🎉
배운 것:
- Day 41-45: 브랜치 기초
- Day 46-47: Fast-Forward & 3-Way Merge
- Day 48: Merge Conflict
- Day 49: Rebase
- Day 50: 브랜치 전략
다음 Phase: Day 51부터 협업 (Fork, Pull Request)을 배웁니다!
완료 체크:
- Git Flow의 브랜치 구조를 안다
- GitHub Flow를 이해했다
- 프로젝트에 맞는 전략을 선택할 수 있다
Week 10 완료! 🎉
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
