본문 바로가기

트러블 슈팅

GitHub Flow와 Git Flow 중에 어떤 걸 선택해야하지?

원래는 Git Flow를 적용해보려고, Git Flow에 대해서 공부하고 있었는데 공부를 하면서 점점 이상하다고 느껴졌습니다. 우선 지금 진행하고 있는 프로젝트가 소규모이기도하고, 빠르게 배포하고 수정해야했기 때문에 release 브랜치를 생성하여 CI/CD가 가능하게 제작해놓았는데, Git Flow 경우에는 버전에 맞게 배포를 진행하기 때문에 이게 맞나...?라는 생각이 문득 들었는데 그 와중에 GitHub Flow라는 것을 알게 되었습니다.

 

Git 브랜치 전략

브랜치 전략은 여러 개발자가 하나의 저장소를 사용하는 환경에서 저장소를 효과적으로 활용하기 위한 work-floew며, 브랜치 생성에 규칙을 만들어서 협업을 유연하게 하는 방법론이다.

 

Git-Flow

Git Flow 전략 간단하게 살펴보기

Git Flow에는 5가지의 종류의 브랜치가 존재합니다. 항상 유지되는 메인 브랜치들(master, develop)과 일정기간 동안만 유지되는 보조 브랜치들(feature, release, hotfix)가 있습니다.

 

- master: 제품으로 출시될 수 있는 브랜치

- develop: 다음 출시 버전을 개발하는 브랜치

- feature: 기능을 개발하는 브랜치

- release: 이번 출시 버전을 준비하는 브랜치

- hotfix: 출시 버전에 발생한 버그를 수정하는 브랜치

개발 흐름

1. master에서 develop 브랜치를 생성한다.

- develop 브랜치는 상시로 버그를 수정한 커밋들이 추가된다.

2. develop브랜치에서 새로운 기능을 추가하기 위해서 feature 브랜치를 생성한다.

3. 기능 추가 작업이 완료되었다면 feature 브랜치는 develop 브랜치로 merge한다.

4. develop에 이번 버전에 포함되는 모든 기능이 merge되었다면 QA를 하기 위해 develot브랜치에서 release브랜치를 생성한다.

5. QA를 진행하면서 발생한 버그들은 release 브랜치에 수정된다.

6. QA를 무사히 통과했다면 release 브랜치를 master와 develop 브랜치로 merge gksek.

7. 마지막으로 출시된 master 브랜치에서 버전 태그를 추가한다.

장점

- 브랜치별로 책임이 명확하다

- 매우 디테일하게 버전 정보를 제공한다.

-  master에 있는 코드는 매우 깔끔한 상태를 유지한다. (테스트되고 최종 수정된 것만 반영)

- 브랜치별로 역할이 있으므로 문제가 있더라도 문제 발생시 각 브랜치를 대기 시킬 필요가 없다.

 

단점

- 각 릴리스 별로 브랜치를 요구한다. 그러나 이미 릴리스를 위해 버전 별 태그가 존재는 상황에서 릴리스 브랜치는 불필요하다.

- master 브랜치는 최신 안정 릴리스를 표현하는 것이 전부일 뿐 별다른 역할을 하지 않는다.

 

GitHub-Flow

GitHub-Flow 전략 간단하게 살펴보기

- master : 제품으로 출시될 수 있는 브랜치

 

개발흐름

1. master 브랜치에서 새로운 일을 할 때 새로운 브랜치를 생성한다.

- master 브랜치는 언제든 배포가 가능한 상태이다.

- 새로운 브랜치는 항상 master 브랜치에서 만든다.

- 새로운 브랜치의 이름은 자세하게 어떤 일을 하고 있는지 작성해야한다.

2. 기능 구현이 완료되면 feature 브랜치는 master로 pr을 날려서 merge한다.

3. master로 merge되고 push 되었을 때 즉 시 배포가 진행된다.

장점

- release branch가 명확하게 구분되지 않은 시스템에서의 사용이 유용하다.

- 지속적인 통합과 개발이 편리하다.

- feature 개발 이후 develop, release 까지 전달할 필요가 없다.

 

단점

- 전체적인 개발 프로세스 관리가 더 힘들어질 수 있음

짧은 주기가 아닌 큰 주기의 release의 환경에는 맞지 않음

운영과 개발 브랜치 모두를 감당하는 master 브랜치는 코드가 지저분 할 수 있음

release 준비와 버그 수정이 모두 master 브랜치에 있으므로 특별한 주의가 더 필요함

GitHub-Flow vs Git Flow

- 1개월 이상의 긴 호흡으로 개발하여 주기적으로 배포, QA 및 테스트, hotfix 등 수행할 수 있는 여력이 있는 팀이라면 git-flow가 적합하다.

- 수시로 릴리즈 되어야 할 필요가 있는 서비스를 지속적으로 테스트하고 배포하는 팀이라면 github-flow 같은 간단한 work-flow가 적합하다.

출처

 

[Git] Git Flow 개념 이해하기

Git flow전략은 소스코드를 관리하고 출시하기 위한 브랜치 관리 전략(branch management strategy) 중 하나입니다.

velog.io