팀 프로젝트에서 Git을 사용할 때 가장 중요한 것은 효율적인 브랜치 전략입니다.

이번 글에서는 업계 표준인 Git-flowFork 워크플로우를 활용하여 체계적이고 안전한 협업 환경을 구축하는 방법을 알아보겠습니다.

Git-flow란?

Git-flow는 Vincent Driessen이 제안한 Git 브랜치 전략으로, 프로젝트의 생명주기에 따라 브랜치를 체계적으로 관리하는 방법입니다.

주요 브랜치 구조

main (master)
├── develop
├── feature/기능명
└── release/버전명

브랜치별 역할

  1. main (master): 프로덕션 배포 가능한 안정적인 코드
  2. develop: 다음 릴리즈를 위한 개발 브랜치
  3. feature/: 새로운 기능 개발 브랜치
  4. 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. 코드 리뷰 프로세스

  1. 작은 단위로 PR 생성: 한 번에 하나의 기능만
  2. 명확한 PR 제목과 설명: 무엇을, 왜 변경했는지
  3. 테스트 코드 포함: 새로운 기능에 대한 테스트
  4. 리뷰어 지정: 관련 팀원들을 리뷰어로 지정

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 프로세스로 코드 품질 향상
  • 팀 규모와 프로젝트 특성에 맞는 워크플로우 선택

처음에는 복잡해 보일 수 있지만, 익숙해지면 개발 생산성과 코드 품질이 크게 향상되는 것을 경험할 수 있습니다.

더 궁금한 점이 있으시면 댓글로 남겨주세요!


참고 자료

댓글남기기