Git 워크플로우 완벽 가이드 | 브랜치 전략부터 협업까지

Git 워크플로우 완벽 가이드 | 브랜치 전략부터 협업까지

이 글의 핵심

Git 워크플로우 완벽 가이드입니다. 브랜치 전략, 커밋 컨벤션, PR 리뷰 등 실무 협업 방법을 상세히 설명합니다.

들어가며: Git은 협업 도구

”혼자 개발할 때는 괜찮은데, 팀에서는 충돌이 자주 나요”

Git은 단순한 버전 관리 도구가 아니라 팀 협업의 핵심입니다. 좋은 Git 워크플로우는 충돌을 줄이고 코드 품질을 높입니다.

이 글에서 다루는 것:

  • Git 브랜치 전략 (Git Flow, GitHub Flow, Trunk-Based)
  • 커밋 컨벤션
  • PR(Pull Request) 작성 및 리뷰
  • 충돌 해결
  • 팀 규모별 권장 전략

목차

  1. Git 브랜치 전략
  2. 커밋 컨벤션
  3. PR 작성 및 리뷰
  4. 충돌 해결
  5. 팀 규모별 전략
  6. 정리

1. Git 브랜치 전략

Git Flow

Git Flow는 Vincent Driessen이 제안한 브랜치 모델로, 대규모 프로젝트에 적합합니다.

브랜치 구조:

gitGraph
    commit
    branch develop
    checkout develop
    commit
    branch feature/login
    checkout feature/login
    commit
    commit
    checkout develop
    merge feature/login
    branch release/1.0
    checkout release/1.0
    commit
    checkout main
    merge release/1.0 tag: "v1.0"
    checkout develop
    merge release/1.0

브랜치 종류:

  1. main: 프로덕션 배포 브랜치 (항상 안정)
  2. develop: 개발 통합 브랜치
  3. feature/: 기능 개발 브랜치 (feature/login, feature/payment)
  4. release/: 릴리스 준비 브랜치 (release/1.0, release/2.0)
  5. hotfix/: 긴급 수정 브랜치 (hotfix/security-patch)

워크플로우:

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

# 2. 개발 및 커밋
git add .
git commit -m "feat: 로그인 UI 추가"
git commit -m "feat: 로그인 API 연동"

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

# 4. release 브랜치 생성
git checkout -b release/1.0

# 5. 버그 수정 및 버전 업데이트
git commit -m "chore: 버전 1.0.0으로 업데이트"

# 6. main에 병합 및 태그
git checkout main
git merge release/1.0
git tag -a v1.0.0 -m "Release 1.0.0"

# 7. develop에도 병합
git checkout develop
git merge release/1.0
git branch -d release/1.0

장점:

  • ✅ 명확한 릴리스 관리
  • ✅ 안정적인 main 브랜치
  • ✅ 병렬 개발 가능

단점:

  • ❌ 복잡한 브랜치 구조
  • ❌ 느린 배포 주기
  • ❌ 소규모 팀에는 과함

GitHub Flow

GitHub Flow는 단순하고 빠른 배포에 적합합니다.

브랜치 구조:

gitGraph
    commit
    branch feature/login
    checkout feature/login
    commit
    commit
    checkout main
    merge feature/login tag: "deploy"
    branch feature/payment
    checkout feature/payment
    commit
    checkout main
    merge feature/payment tag: "deploy"

워크플로우:

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

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

# 3. PR 생성
git push origin feature/login
# GitHub에서 PR 생성

# 4. 리뷰 및 병합
# PR 승인 후 main에 병합

# 5. 배포
# main 병합 시 자동 배포 (CI/CD)

장점:

  • ✅ 단순한 구조
  • ✅ 빠른 배포
  • ✅ CI/CD 친화적

단점:

  • ❌ 릴리스 관리 약함
  • ❌ 롤백 어려움

Trunk-Based Development

Trunk-Based Development는 main 브랜치에 직접 커밋하거나, 매우 짧은 수명의 브랜치만 사용합니다.

워크플로우:

# 1. main에서 작업
git checkout main
git pull

# 2. 짧은 브랜치 (1-2일)
git checkout -b fix-bug

# 3. 빠른 병합
git commit -m "fix: 버그 수정"
git push origin fix-bug
# PR 생성 및 즉시 병합 (몇 시간 내)

# 4. 브랜치 삭제
git branch -d fix-bug

장점:

  • ✅ 매우 빠른 통합
  • ✅ 병합 충돌 최소화
  • ✅ 지속적 배포 (CD)

단점:

  • ❌ 높은 테스트 커버리지 필요
  • ❌ 자동화 필수
  • ❌ 팀 숙련도 요구

브랜치 전략 비교

특징Git FlowGitHub FlowTrunk-Based
복잡도높음낮음매우 낮음
배포 속도느림빠름매우 빠름
릴리스 관리우수보통약함
팀 크기대규모중소규모소규모
학습 곡선높음낮음중간

2. 커밋 컨벤션

Conventional Commits

형식:

<type>(<scope>): <subject>

<body>

<footer>

Type 종류:

  • feat: 새 기능
  • fix: 버그 수정
  • docs: 문서 변경
  • style: 코드 포맷팅 (기능 변경 없음)
  • refactor: 리팩토링
  • test: 테스트 추가/수정
  • chore: 빌드, 설정 변경

예제:

# 좋은 커밋 메시지
git commit -m "feat: 사용자 로그인 기능 추가"
git commit -m "fix: 회원가입 시 이메일 검증 버그 수정"
git commit -m "docs: README에 설치 가이드 추가"
git commit -m "refactor: 사용자 서비스 로직 개선"

# 나쁜 커밋 메시지
git commit -m "수정"  # 너무 모호
git commit -m "asdf"  # 의미 없음
git commit -m "bug fix"  # 어떤 버그?

상세 커밋 메시지:

git commit -m "feat: 사용자 로그인 기능 추가

- JWT 토큰 기반 인증 구현
- 로그인 API 엔드포인트 추가 (POST /api/auth/login)
- 로그인 UI 컴포넌트 작성
- 세션 관리 로직 추가

Closes #123"

커밋 크기

권장:

  • 하나의 커밋은 하나의 논리적 변경
  • 200-400줄 이내
  • 빌드 가능한 상태 유지

예제:

# ❌ 나쁜 예: 너무 큰 커밋
git add .
git commit -m "로그인, 회원가입, 프로필, 설정 기능 추가"
# 1000줄 변경, 리뷰 어려움

# ✅ 좋은 예: 작은 커밋들
git commit -m "feat: 로그인 UI 추가"  # 100줄
git commit -m "feat: 로그인 API 연동"  # 50줄
git commit -m "test: 로그인 테스트 추가"  # 80줄

3. PR 작성 및 리뷰

PR 템플릿

## 변경 사항
- 로그인 기능 추가
- JWT 토큰 기반 인증 구현

## 테스트
- [ ] 로그인 성공 케이스
- [ ] 잘못된 비밀번호 케이스
- [ ] 존재하지 않는 사용자 케이스

## 스크린샷
(UI 변경 시 스크린샷 첨부)

## 관련 이슈
Closes #123

PR 크기

권장:

  • 200-400줄 이내
  • 리뷰 시간 30분 이내
  • 하루 1-2개

예제:

# ❌ 나쁜 예: 거대한 PR
# 파일 50개, 2000줄 변경
# 리뷰 시간 3시간+

# ✅ 좋은 예: 작은 PR들
# PR 1: 로그인 UI (5파일, 200줄)
# PR 2: 로그인 API (3파일, 150줄)
# PR 3: 로그인 테스트 (2파일, 100줄)

코드 리뷰 체크리스트

기능:

  • 요구사항 충족
  • 엣지 케이스 처리
  • 에러 처리

코드 품질:

  • 가독성
  • 중복 코드 없음
  • 네이밍 명확

테스트:

  • 테스트 코드 포함
  • 테스트 통과
  • 커버리지 유지

성능:

  • 불필요한 연산 없음
  • 메모리 누수 없음

보안:

  • 입력 검증
  • SQL 인젝션 방지
  • XSS 방지

4. 충돌 해결

충돌이 발생하는 이유

gitGraph
    commit id: "A"
    branch feature
    checkout feature
    commit id: "B (파일 수정)"
    checkout main
    commit id: "C (같은 파일 수정)"
    checkout feature
    merge main id: "충돌!"

충돌 예제:

# main 브랜치
# file.txt
line 1
line 2 (main에서 수정)
line 3

# feature 브랜치
# file.txt
line 1
line 2 (feature에서 수정)
line 3

# 병합 시도
git merge feature

# 충돌 발생
<<<<<<< HEAD
line 2 (main에서 수정)
=======
line 2 (feature에서 수정)
>>>>>>> feature

충돌 해결 방법

1. 수동 해결:

# 1. 충돌 파일 확인
git status

# 2. 파일 열어서 수동 편집
# <<<<<<< HEAD
# =======
# >>>>>>> feature
# 위 마커 제거하고 원하는 내용으로 수정

# 3. 충돌 해결 표시
git add file.txt

# 4. 병합 완료
git commit

2. 도구 사용:

# VS Code, IntelliJ 등 IDE의 병합 도구 사용
# 또는 전용 도구
git mergetool

# 충돌 해결 후
git commit

충돌 예방 전략

1. 자주 pull 받기:

# 매일 아침 main 최신 상태로 업데이트
git checkout main
git pull
git checkout feature/my-work
git merge main  # 또는 git rebase main

2. 작은 PR:

  • 변경 범위 최소화
  • 빠른 병합

3. 파일 분리:

  • 큰 파일을 작은 모듈로 분리
  • 팀원마다 다른 파일 작업

5. 팀 규모별 전략

1-3명 팀

권장: GitHub Flow

# 단순한 워크플로우
git checkout -b feature/new-feature
git commit -m "feat: 새 기능"
git push origin feature/new-feature
# PR 생성 및 병합

특징:

  • 빠른 배포
  • 최소한의 규칙
  • 직접 소통 가능

4-10명 팀

권장: GitHub Flow + 릴리스 브랜치

# feature 브랜치
git checkout -b feature/login

# PR 리뷰 필수
# 2명 이상 승인 필요

# 릴리스 브랜치 (선택)
git checkout -b release/1.0
# 버그 수정만
git checkout main
git merge release/1.0
git tag v1.0.0

특징:

  • 코드 리뷰 강화
  • 릴리스 관리
  • CI/CD 자동화

10명 이상 팀

권장: Git Flow

# 명확한 브랜치 전략
main (프로덕션)
├── develop (개발)
   ├── feature/login
   ├── feature/payment
   └── feature/admin
├── release/1.0
└── hotfix/security

특징:

  • 엄격한 릴리스 프로세스
  • 다중 버전 지원
  • 롤백 전략 명확

6. 정리

핵심 요약

브랜치 전략:

  • Git Flow: 대규모, 명확한 릴리스
  • GitHub Flow: 소규모, 빠른 배포
  • Trunk-Based: 지속적 통합

커밋 컨벤션:

  • Conventional Commits 사용
  • 작은 단위로 자주 커밋
  • 의미 있는 메시지

PR 작성:

  • 200-400줄 이내
  • 명확한 설명
  • 테스트 포함

충돌 해결:

  • 자주 pull 받기
  • 작은 PR로 충돌 최소화
  • 도구 활용

팀 규모별 권장 전략

팀 크기전략특징
1-3명GitHub Flow단순, 빠름
4-10명GitHub Flow + 릴리스균형
10명+Git Flow엄격, 안정

다음 단계

Git 워크플로우를 CI/CD와 연결하여 자동화하세요:

  • GitHub Actions CI/CD
  • Node.js CI/CD 파이프라인

관련 주제:

  • Git 고급 기법
  • 코드 리뷰 가이드
  • CI/CD 전략

추가 학습 자료

공식 문서: