[Git] Git 브랜치 전략(Git Flow, GitHub Flow, GitLab Flow)

해피몬·2023년 4월 18일
0
post-thumbnail

Git Flow

Git Flow는 Vincent Driessen이 제안한 브랜칭 모델로, 매우 구조화된 브랜치 전략을 제공합니다. 다양한 브랜치를 사용하여 기능 개발, 릴리즈 준비, 핫픽스 등을 분리하여 관리합니다.

브랜치

  • main 브랜치: 배포 가능한 안정된 코드가 모이는 브랜치입니다. 배포된 버전을 관리합니다.
  • develop 브랜치: 개발 중인 코드가 모이는 브랜치입니다. 새로운 기능이 이 브랜치에 병합됩니다.
  • 기능 브랜치 (Feature Branch): develop 브랜치에서 분기하여 새로운 기능을 개발합니다. 기능 개발이 완료되면 다시 develop 브랜치로 병합합니다.
  • 릴리즈 브랜치 (Release Branch): 배포를 준비하기 위해 develop 브랜치에서 분기합니다. 여기서 최종적인 테스트나 버그 수정을 진행한 후 main과 develop에 병합합니다.
  • 핫픽스 브랜치 (Hotfix Branch): 배포된 코드에서 긴급한 수정이 필요할 때 main에서 분기하여 버그를 수정하고, 수정된 코드를 main과 develop에 병합합니다.

Git Flow의 장점

  • 체계적인 브랜치 구조로 릴리즈 관리가 명확합니다.
  • 안정성과 개발 속도를 모두 고려할 수 있습니다.

Git Flow의 단점

  • 브랜치가 많아 관리가 복잡할 수 있습니다.
  • 빠르게 배포해야 하는 환경에서는 비효율적일 수 있습니다.

GitHub Flow

GitHub Flow는 Git Flow보다 더 단순하고 직관적인 브랜칭 모델로, GitHub에서 널리 사용됩니다. 모든 작업은 main 브랜치를 중심으로 이루어지며, 기능 브랜치를 사용하여 작업합니다.

브랜치

  • main 브랜치: 항상 배포 가능한 상태를 유지합니다.
  • 기능 브랜치 (Feature Branch): 새로운 기능이나 버그 수정을 위해 main에서 분기합니다. 작업이 완료되면 Pull Request를 통해 main에 병합하고, 배포할 준비를 합니다.
  • Pull Request: main 브랜치로 병합하기 전에 코드 리뷰를 통해 코드 품질을 검토합니다.

장점

  • 단순하고 빠른 개발 사이클을 지원합니다.
  • Pull Request를 활용하여 코드 리뷰를 쉽게 진행할 수 있습니다.
  • 브랜치 관리가 간단하여, 작은 팀이나 단기 프로젝트에 적합합니다.

단점

  • 안정적인 릴리즈 관리가 필요한 프로젝트에는 적합하지 않습니다.
  • 복잡한 배포 환경이나 여러 릴리즈 버전을 관리하기 어렵습니다.

GitLab Flow

GitLab Flow는 Git Flow와 GitHub Flow의 장점을 결합한 전략으로, 배포 환경과 연동할 수 있는 브랜칭 모델입니다. GitLab의 CI/CD 기능과 잘 맞아떨어지며, 배포 환경에 따라 코드를 관리할 수 있습니다.

브랜치

  • main 브랜치: 항상 배포 가능한 상태를 유지합니다. 배포가 진행되는 주요 브랜치입니다.
  • 기능 브랜치 (Feature Branch): 새로운 기능 개발을 위해 main에서 분기합니다. 작업 완료 후 main에 병합합니다.
  • 환경별 브랜치: 각 배포 환경(예: development, staging, production)에 대해 브랜치를 만들어 코드를 관리할 수 있습니다. 각 환경에 따라 자동으로 배포할 수 있는 설정을 연동할 수 있습니다.

장점

  • 배포 환경에 맞는 브랜치 전략을 설정할 수 있어 환경별 코드 관리를 쉽게 할 수 있습니다.
  • CI/CD와의 연동이 용이하여, 자동화된 배포 파이프라인 구축이 쉽습니다.
  • 복잡한 배포 시나리오에서도 유연하게 대처할 수 있습니다.

단점

  • 환경별 브랜치와 다양한 워크플로를 관리해야 하므로 설정이 다소 복잡할 수 있습니다.
  • 작은 팀이나 단순한 프로젝트에서는 오버헤드가 될 수 있습니다.

어떤 전략을 선택해야 할까?

  • Git Flow: 릴리즈 관리가 중요하고, 여러 단계의 배포가 필요한 대규모 프로젝트에 적합합니다.
  • GitHub Flow: 단순한 구조를 원하거나 작은 팀에서 빠른 개발과 배포가 필요한 경우에 적합합니다.
  • GitLab Flow: 배포 환경이 다양하고, CI/CD를 활용한 자동화된 배포 파이프라인이 필요한 경우에 적합합니다.
profile
슬기로운개발생활🤖

0개의 댓글