Files
2nd/10_Wiki/Topics/Git Branching Strategy.md
T

4.0 KiB

📌 Brief Summary

Git Branching Strategy 및 협업 워크플로우는 다수의 개발자가 하나의 코드베이스에서 안전하고 효율적으로 협업하기 위한 체계적인 약속이다. 브랜치 명명 규칙, 커밋 메시지 표준화, Pull Request(PR) 기반의 코드 리뷰 프로세스를 통해 코드의 안정성을 유지하고 변경 이력의 추적성(Traceability)을 확보하는 것을 목표로 한다.

📖 Core Content

  1. 주요 브랜칭 전략
    • Feature-Branch Workflow: 짧은 수명의 브랜치를 통해 기능을 격리 개발하고 main의 안정성을 유지하는 소규모 팀 최적화 방식.
    • Trunk-Based Development: 메인 브랜치에 매우 빈번하게 병합하여 빠른 피드백을 추구하는 경량화 전략.
    • GitHub Flow: 지속적 배포에 적합한 단순한 구조로 main 브랜치는 항상 배포 가능 상태를 유지한다.
  2. 브랜치 및 커밋 거버넌스
    • 명명 규칙: {type}/{ticket-id}-{description} 형식을 준수하여 작업의 성격과 비즈니스 맥락(티켓 ID)을 연결한다.
    • Conventional Commits: feat:, fix:, refactor: 등 표준 접두사를 사용하여 변경의 의도를 명확히 하고 릴리즈 노트를 자동화한다.
    • 원자적 커밋 (Atomic Commits): 하나의 커밋에는 하나의 논리적 변경만 담아 롤백 및 디버깅을 용이하게 한다.
  3. Pull Request(PR) 및 코드 리뷰
    • 최소 1명 이상의 승인을 거치는 게이트웨이 프로세스를 구축한다.
    • Squash Merge: 기능 브랜치의 자잘한 이력을 압축하여 메인 브랜치의 히스토리를 깔끔하게 관리한다.
    • CI 연동: PR 생성 시 빌드 및 테스트 자동 통과를 필수 조건으로 설정한다.

⚖️ Trade-offs & Caveats

  • 속도 vs 안정성: 엄격한 PR 리뷰와 브랜칭 전략은 안정성을 높이지만, 긴급한 배포가 필요한 상황에서는 병목 지점이 될 수 있다.
  • 수명이 긴 브랜치의 위험: 메인 브랜치와 장시간 동기화되지 않은 브랜치는 병합 시 '머지 지옥(Merge Hell)'을 유발하므로 잦은 리베이스와 동기화가 필수적이다.
  • 커밋 압축의 정보 소실: Squash Merge는 히스토리를 깨끗하게 만들지만, 기능 브랜치 내부의 세부적인 결정 과정을 추적하기 어렵게 만들 수 있다.

🔗 Knowledge Connections

  • Pull Request (PR): 코드 품질의 최종 관문 (관계: 실천 프로세스)
  • Conventional Commits: 변경 이력의 표준화 (관계: 커밋 가이드라인)
  • Trunk-Based Development: 고속 반복 개발을 위한 전략 (관계: 대안 방법론)

Deeper Research Questions

  1. 티켓 ID(Jira/GitHub)와 Git 커밋을 연동하여 개발 진척도를 자동으로 대시보드화하는 최적의 CI 설정은?
  2. 'Merge'와 'Rebase' 중 팀의 히스토리 관리 철학에 따라 어떤 것을 기본 전략으로 삼아야 하는가?
  3. 대규모 충돌을 방지하기 위해 Feature Flag를 도입하여 수명이 긴 브랜치를 Trunk-Based로 전환하는 구체적인 절차는?
  4. 코드 리뷰 시 기술적 결함 외에 아키텍처적 일관성을 검증하기 위한 '체크리스트'의 구성 요소는 무엇인가?
  5. 커밋 메시지 규칙 준수를 강제하기 위해 Git Hooks(Husky)와 commitlint를 연동하는 최적의 환경 구성은?

Practical Application Contexts

  • 팀 협업 표준화: 3인 이상 팀 프로젝트 시작 시 브랜칭 전략과 커밋 컨벤션 합의 및 문서화.
  • 이슈 추적성 강화: 장애 발생 시 특정 티켓 ID와 연관된 커밋을 역추적하여 근본 원인 신속 파악.

Adjacent Topics

  • CI/CD Pipeline Automation
  • GitHub Actions / GitLab CI
  • Semantic Versioning (SemVer)