Git Branch 전략 (Git Flow VS GitHub Flow)

mingoo36·2025년 2월 3일

Git Branch 전략이란?

여러 개발자가 하나의 저장소에 작업을 할 때, 협업을 좀 더 효과적으로 하기 위해 branch에 대한 규칙을 정하고 저장소를 잘 활용하기 위한 workflow를 정의하는 것을 바로 git branch 전략이라고 함

소프트웨어 개발 팀에서는 프로젝트의 특성에 따라 적절한 브랜치 배포 전략을 채택하는 것이 중요함

Git Branch 전략이 필요한 이유

  • 여러 명의 개발자가 동시에 작업할 때 효과적임
  • 각 기능을 독립적인 브랜치에서 작업가능, 서로 영향 없이 진행됨
  • 특정 기능/이슈를 추적하기 쉬우며, 롤백으로 유연한 프로젝트 관리 가능
  • 태그로 배포 버전을 관리해 안정적인 배포 가능
  • 대표적인 브랜치 전략 Git Flow, GitHub Flow

Git Flow


Git Flow 전략의 브랜치

  1. main(master): 이 브랜치는 항상 안정된 제품 버전을 관리함
    1. 실제 배포된 버전만 이 브랜치에 병합되며, 프로젝트의 최종 결과물이 이곳에 저장됨
    2. 사용자에게 제공되는 코드는 바로 이 브랜치에서 나오는 것
  2. develop: 다음 출시 버전을 위한 모든 개발이 진행되는 브랜치
    1. 각 기능을 feature 브랜치에서 개발한 후, 완료되면 이곳에 병합함
    2. develop 브랜치는 새로운 기능을 통합하여 전체적으로 테스트하고, 출시 준비를 완료하는 역할을 함
  3. feature: 새로운 기능 개발을 위해 생성되는 브랜치
    1. 각 기능은 독립적으로 개발되며, 작업이 완료되면 develop 브랜치에 병합됨
    2. 여러 기능을 동시에 개발할 때, 각 기능에 대해 별도의 feature 브랜치를 사용함으로써 작업의 독립성과 코드 안정성을 확보할 수 있음
  4. release: 출시 준비를 위한 마무리 작업이 진행되는 브랜치
    1. develop 브랜치에서 출시할 기능이 모두 완료되면, release 브랜치로 병합되어 최종 테스트 및 버그 수정 작업이 이루어짐
    2. 이 작업이 끝나면 main 브랜치에 병합하고 배포가 이루어지며, develop 브랜치에도 병합하여 다음 개발 주기를 준비함
  5. hotfix: 긴급하게 출시된 제품의 버그를 수정하기 위한 브랜치
    1. 배포 후에 발견된 심각한 문제가 있을 때, 이 브랜치에서 버그를 수정하고 maindevelop 브랜치에 병합하여 빠르게 안정화 작업을 진행함

GitHub Flow


GitHub Flow 전략의 브랜치

  1. main(master)
  2. feature: main에 기능을 추가하기 위한 브랜치

Git Flow 와 GitHub Flow 중 어떤 전략을 사용해야 할까?


  1. 브랜치 수: Git Flow는 다양한 종류의 브랜치를 사용하는 반면, GitHub Flow는 단일 브랜치 (master) 를 사용함

  2. 배포 방식: Git Flow는 release 와 hotfix 브랜치를 통해 명확한 배포 절차를 갖추고 있음

    반면에, GitHub Flow는 단순하며 지속적인 배포를 강조하며, master 브랜치에서 배포를 수행함

  3. 복잡성: Git Flow는 복잡한 프로젝트나 대규모 팀에서 사용하기 좋음

    그러나 이는 작은 팀이나 개인 프로젝트에 적용하기에는 많은 브랜치와 과정이 불필요하고 부담스러울 수 있음, GitHub Flow 는 단순하며 빠른 개발 및 배포를 위해 사용.

결론


각각의 전략은 장, 단점이 존재하기에 프로젝트의 규모, 요구 사항 및 팀의 작업 방식에 맞추어 적절하게 채택하는 것이 좋음

Git Flow는 더 많은 제어와 복잡성을 가지고 있어 특정 기능이나 수정을 빠르게 배포해야 할 경우 유연성이 다소 떨어짐

그러나 그만큼 배포 안정성과 버전 관리 및 롤백 등 체계적인 운영이 가능함

GitHub Flow 는 테스트와 검증 절차를 거치지 않고 바로 master 브랜치로 Merge 되므로 위험성을 가지고 있음

하지만 그만큼 단순하고 빠르게 기능을 테스트하고 Agile 하게 배포할 수 있기 때문에, 주로 각 환경의 구분이 명확하지 않고 작은 규모의 프로젝트에 적합한 전략임

profile
화이팅

0개의 댓글