[Git] Git-flow와 Fork로 팀 브랜치 전략 정리하기
팀 프로젝트에서 Git을 사용할 때 가장 중요한 것은 효율적인 브랜치 전략입니다.
이번 글에서는 업계 표준인 Git-flow와 Fork 워크플로우를 활용하여 체계적이고 안전한 협업 환경을 구축하는 방법을 알아보겠습니다.
Git-flow란?
Git-flow는 Vincent Driessen이 제안한 Git 브랜치 전략으로, 프로젝트의 생명주기에 따라 브랜치를 체계적으로 관리하는 방법입니다.
주요 브랜치 구조
main (master)
├── develop
├── feature/기능명
└── release/버전명
브랜치별 역할
- main (master): 프로덕션 배포 가능한 안정적인 코드
- develop: 다음 릴리즈를 위한 개발 브랜치
- feature/: 새로운 기능 개발 브랜치
- release/: 릴리즈 준비 및 배포 브랜치
Git-flow 설치 및 설정
1. Git-flow 설치
# macOS (Homebrew)
brew install git-flow-avh
# Ubuntu/Debian
sudo apt-get install git-flow
# Windows (Git Bash)
# Git for Windows에 포함되어 있음
2. Git-flow 초기화
# 프로젝트 디렉토리에서 실행
git flow init
# 기본 설정으로 진행 (Enter 키로 확인)
Git-flow 워크플로우
1. Feature 브랜치로 기능 개발
# 새로운 기능 브랜치 시작
git flow feature start 사용자-로그인
# 개발 작업 후 커밋
git add .
git commit -m "feat: 사용자 로그인 기능 구현"
# develop 브랜치에 병합
git flow feature finish 사용자-로그인
2. Release 브랜치로 배포 준비
# 릴리즈 브랜치 시작
git flow release start 1.0.0
# 버전 번호 업데이트, 문서 수정 등
git commit -m "chore: 버전 1.0.0 준비"
# 릴리즈 완료 (main과 develop에 병합)
git flow release finish 1.0.0
3. Hotfix 브랜치로 긴급 수정
# 핫픽스 브랜치 시작
git flow hotfix start 로그인-버그수정
# 버그 수정 후 커밋
git commit -m "fix: 로그인 인증 버그 수정"
# 핫픽스 완료
git flow hotfix finish 로그인-버그수정
Fork를 활용한 협업 워크플로우
1. Fork 생성 및 클론
# 원본 저장소를 Fork한 후
git clone https://github.com/your-username/original-repo.git
cd original-repo
# 원본 저장소를 upstream으로 추가
git remote add upstream https://github.com/original-owner/original-repo.git
2. 개발 워크플로우
# 1. 최신 코드 동기화
git fetch upstream
git checkout develop
git merge upstream/develop
# 2. 새로운 기능 브랜치 생성
git checkout -b feature/새로운-기능
# 3. 개발 및 커밋
git add .
git commit -m "feat: 새로운 기능 구현"
# 4. Fork한 저장소에 푸시
git push origin feature/새로운-기능
# 5. Pull Request 생성 (GitHub 웹에서)
3. Pull Request 관리
# PR이 승인된 후 로컬 정리
git checkout develop
git pull upstream develop
git branch -d feature/새로운-기능
git push origin --delete feature/새로운-기능
실무에서의 Git-flow 활용 팁
1. 브랜치 네이밍 컨벤션
# 기능 개발
feature/user-authentication
feature/payment-integration
# 버그 수정
bugfix/login-error
bugfix/payment-timeout
# 핫픽스
hotfix/security-patch
hotfix/critical-bug
2. 커밋 메시지 컨벤션
# 타입별 커밋 메시지
feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 코드 리팩토링
test: 테스트 코드 추가
chore: 빌드 과정 또는 보조 기능 수정
3. 코드 리뷰 프로세스
- 작은 단위로 PR 생성: 한 번에 하나의 기능만
- 명확한 PR 제목과 설명: 무엇을, 왜 변경했는지
- 테스트 코드 포함: 새로운 기능에 대한 테스트
- 리뷰어 지정: 관련 팀원들을 리뷰어로 지정
Git-flow vs GitHub Flow
Git-flow (복잡한 프로젝트용)
- 장점: 체계적인 릴리즈 관리, 안정성
- 단점: 복잡함, 오버헤드
- 적합한 경우: 대규모 팀, 정기적인 릴리즈
GitHub Flow (단순한 프로젝트용)
- 장점: 단순함, 빠른 배포
- 단점: 릴리즈 관리의 어려움
- 적합한 경우: 소규모 팀, 지속적 배포
자주 발생하는 문제와 해결책
1. Merge Conflict 해결
# 충돌 발생 시
git status # 충돌 파일 확인
# 파일 수동 수정 후
git add .
git commit -m "resolve: merge conflict in feature branch"
2. 잘못된 브랜치에서 작업한 경우
# 현재 변경사항을 stash
git stash
# 올바른 브랜치로 이동
git checkout develop
# stash 적용
git stash pop
3. 커밋 히스토리 정리
# 최근 3개 커밋을 하나로 합치기
git rebase -i HEAD~3
# 커밋 메시지 수정
git commit --amend -m "새로운 커밋 메시지"
팀 협업을 위한 추가 도구
1. Git Hooks 활용
# pre-commit hook 예시
#!/bin/sh
# 코드 포맷팅 검사
npm run lint
# 테스트 실행
npm test
2. CI/CD 파이프라인
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Run tests
run: npm test
마무리
Git-flow와 Fork 워크플로우는 팀 협업의 효율성을 크게 향상시킵니다.
핵심 포인트:
- 체계적인 브랜치 전략으로 안정적인 개발 환경 구축
- 명확한 커밋 메시지와 PR 프로세스로 코드 품질 향상
- 팀 규모와 프로젝트 특성에 맞는 워크플로우 선택
처음에는 복잡해 보일 수 있지만, 익숙해지면 개발 생산성과 코드 품질이 크게 향상되는 것을 경험할 수 있습니다.
더 궁금한 점이 있으시면 댓글로 남겨주세요!
댓글남기기