Git - Branch 전략

Jnnsu·2023년 12월 3일
1
post-thumbnail

Git Branch 전략이란?

branch를 규칙 없이 마구잡이로 사용하면 혼란을 불러올 수 있다. 어떤 목적인지, 어디서 분기된 건지, 브랜치를 생성할 때에 어디서 해야할지, 어디에 병합해야할지 뒤죽박죽 될 수 있다. 이 문제를 해결하기 위해 만들어진게 Git Branch 전략이다.

Git Branch 전략은 프로젝트의 Git 브랜치를 효과적으로 관리하기 위한 워크플로우이다.


Git branch 전략들

브랜치 전략은 만들어도 되지만, 이미 브랜치를 효과적으로 관리할 수 있고 관례적으로 사용하는 브랜치 전략이 존재한다. 바로 Git Flow, GitHub Flow 이다.

1. Git Flow

Git Flow는 Vincent Driessen이 2010년에 제시한 브랜치 전략이다.

A successful Git branching model

Git Flow 브랜치는 아래와 같이 나뉜다.

  • Main 브랜치 : 운영환경에 배포될 수 있는 코드를 모아둔다.

  • Develop 브랜치 : 다음 버전 기능이 담긴 코드로, 기능을 운영환경에 업데이트 할 때 main으로 merge한다.

  • Supporting 브랜치

    • Feature 브랜치 : 새로운 기능을 개발하기 위한 브랜치로, develop 브랜치에서 생성하고, 기능 개발이 완료되면 develop으로 merge 한다.

    • Release 브랜치 : 새로운 버전의 배포를 위한 브랜치로, develop 브랜치에서 생성하고, 배포 전 버전 이름 등 사소한 데이터 수정 및 버그를 수정하기 위해 사용된다. 배포 준비가 완료되면 main, develop에 둘 다 merge 한다.

    • Hotfix 브랜치 : 운영환경에 빠르게 수정해야할 사항이 있을 때 main을 빠르게 변경하기 위해 사용한다. main 브랜치에서 생성하고 버그 수정이 끝나면 main, develop에 merge한다.

Main 브랜치와, Develop 브랜치는 개발 프로세스 전반에 걸쳐 항상 유지되는 브랜치이다. 반면, Supporting 브랜치는 필요할 때마다 생성되고, 역할을 다하면 삭제된다. Supporting 브랜치 덕분에 팀이 병렬적으로 업무를 할 수 있게된다.

Git Flow의 장단점

장점

  • 브랜치가 명확하게 나뉘기에 관리가 용이하다.

  • 높은 배포 안정성
    release 브랜치에서의 테스트와 QA 과정을 통해 안정성이 검증된 기능들이 master 브랜치로 병합되어 배포되기에 안정성이 높다.

  • 높은 협업 효율성
    개발자들은 서로의 작업에 영향을 주지 않고, 동시에 병렬적으로 개발을 진행할 수 있다.

  • 버전 관리와 롤백이 용이

  • 유지보수 용이
    hotfix 브랜치를 통해 긴급한 버그 수정이나 보안 취약점에 대한 조치를 즉각적으로 적용할 수 있다.

단점

  • 복잡성
    다양한 브랜치를 사용하기 때문에 초기 설정이 복잡하고, 작은 규모의 프로젝트에는 지나치게 복잡한 구조를 가질 수 있다.

  • 느린 릴리스
    검증이나 테스트 과정이 추가되어 개발의 속도가 느리기에 빠른 배포가 필요한 프로젝트에는 적합하지 않다.

  • 유연성의 한계
    예외 상황이나 특별한 요구사항에 대한 대응이 제한적일 수 있다.

Git Flow는 언제 사용할까?

Git Flow는 명시적으로 버전관리가 필요한 곳에 적합하다. 즉, 모바일 애플리케이션, 오픈소스 라이브러리/프레임워크 등의 개발에 적합하고 웹 애플리케이션 개발에는 적합하지 않다.

Why?

  • 모바일 애플리케이션 : 다양한 버전이 존재, 롤백이 잦음
  • 웹 애플리케이션 : 배포를 하는 동안 항상 최신 버전 유지, 롤백보다 버그를 수정하는 일이 잦다.

그러므로 웹 애플리케이션에서 Git Flow를 사용한다면, 거의 사용하지 않을 브랜치 규칙도 학습해야 하므로 비효율적이고, 필요이상의 브랜치 때문에 혼란을 가중시킬 수 있다.

그럼 웹 애플리케이션은 어떤 브랜치 전략을 가져야 할까? -> GitHub Flow


2. GitHub Flow

GitHub Flow 공식 문서

GitHub Flow의 브랜치 종류는 단 2개이다!

GitHub Flow는 main 브랜치만 엄격한 규칙을 적용하고, 나머지 브랜치는 별다른 규칙이 없다.

  • main 브랜치 : 언제든 배포가 가능한 상태를 유지해야 한다. main으로 merge 하기 전에는 엄격한 테스트를 거쳐야 한다.

  • 나머지 브랜치 : main에서 생성하며 이름, 규칙 등 자유롭게 결정. 그러므로 브랜치 명과 커밋 메세지를 작성할 때 자세하게 작성해야 한다.

GitHub Flow의 Flow

  1. main에서 새로운 브랜치 생성(브랜치 명은 어떤 일을 할지 자세히 작성)

  2. 생성한 브랜치의 작업이 끝나면 main으로 PR

  3. 리뷰 및 피드백

  4. main으로 merge 할 때 CI/CD를 거쳐서 배포를 진행

주의해야 될 점
main에는 항상 배포가 가능한 안정적인 코드가 존재해야 한다.

GitHub Flow의 장단점

장점

  • 간단하고 직관적인 구조

  • 지속적인 배포 가능

  • 유연성과 빠른 피드백

  • 충돌 최소화
    각각 독립적인 브랜치를 생성해 작업하기 때문에 충돌 위험이 적다.

단점

  • 대규모 프로젝트에 제한적
    main 브랜치 이외에는 명확하게 나누어지지 않고 규칙이 따로 없다보니 대규모 프로젝트시에 뒤죽박죽이 될 수 있다.

  • 배포 위험성
    바로 main 브랜치로 merge하기 때문에 잠재적인 배포 위험성을 가지고 있다.

  • 배포 관리의 어려움
    GitHub Flow는 단일 master 브랜치를 사용하여 배포를 관리한다. 이는 여러 버전을 관리하거나 배포 관리를 세밀하게 제어하는데 어려움을 줄 수 있다.


Git FlowGitHub Flow 중에 선택하기

Git Flow

  • 규모가 큰 프로젝트

  • 배포 주기가 잦지 않은 프로젝트

  • 다양한 버전 관리가 필요한 모바일 애플리케이션

GitHub Flow

  • 비교적 규모가 작은 프로젝트

  • 잦은 배포 주기를 가지는 프로젝트

  • 단일 릴리즈 버전만 존재하는 프로젝트

0개의 댓글