목차 LIST
새로운 프로젝트를 시작할 때, 브랜치 전략으로 Git Flow와 Github Flow를 자주 접하게 되는데요. 두 전략의 차이에 대해 알아보겠습니다.
Git Flow
Git Flow 브랜치 전략은 총 5개의 브랜치로 나누어집니다.
- main (or master) - 현재 릴리즈된 코드의 저장소이며, Production에 나가는 버전과 일치해야 합니다.
- develop - main 브랜치를 따서, 릴리즈 이후에 발생한 추가적인 변경 사항을 반영합니다.
- feature - develop 브랜치를 따서, 새로운 기능을 개발하기 위한 feature 브랜치를 생성합니다. main이나 develop과 달리 feature라는 단일 브랜치가 있는 것은 아니고, 변경 사항마다 생성합니다.
예를 들면, bug/StackOverflowFix 처럼 나타내거나 JIRA 티켓이 있다면 feature/PRJ-1234 와 같이 표시할 수 있습니다. - release - 새로운 릴리즈를 만들기 위해 develop에서 브랜치가 병합됩니다. 브랜치 이름을 relase/1.2.3 와 같이 생성됩니다.
주로 QA 테스트나 새로운 버전의 릴리즈를 준비하는 중간 단계로 사용합니다. - hotfix - Production에 긴급한 버그가 발생하여 코드 수정이 필요한 경우 핫픽스 브랜치를 생성합니다. main 브랜치를 따서 생성하며, 브랜치 이름은 hotfix/ABC12-InvalidPageMatch 와 같이 구성됩니다.
기능 개발을 위해 feature 브랜치를 만들고, 완료되면 develop 브랜치로 머지합니다. develop 브랜치는 아직 release 되지 않은 가장 최신 코드가 유지되어야 합니다. develop 브랜치에서 작업이 완료되면 release 브랜치로 분기합니다.
release 브랜치에서 문제가 발생한다면 문제를 해결한 다음 develop 브랜치로 머지합니다. release 브랜치 배포가 정상적으로 완료되면 최종 release 코드는 develop과 master에 각각 머지합니다.
Github Flow
"Git Flow는 Github에서 사용하기 복잡하다" 라는 기조에서 나온 브랜칭 전략입니다.
hotfix 브랜치와 feature 브랜치를 구분하지 않으며, 수시로 배포가 일어나기 때문에 CI와 배포가 자동화되어 있는 프로젝트에 유용합니다.
Github Flow 브랜치 전략은 총 2개의 브랜치로 나누어집니다.
- main (or master) - Git Flow 전략과 유사하게, 현재 릴리즈된 코드의 저장소입니다. (언제든 배포 가능 상태)
- feature - 개발자는 main 브랜치에서 새로운 feature 개발을 위한 브랜치를 생성합니다.
동일하게 기능 개발을 위해 feature 브랜치를 만들고, 개발이 완료되면 master 브랜치로 머지합니다.
여기서 master 브랜치 하나로 개발환경과 운영환경을 같이 가지고 가는게 맞는가? 라고 생각할 수 있습니다.
GitHub Flow에서는 master 브랜치 하나로 모든 것을 관리합니다. 이 모델에서는 모든 변경사항이 master에 병합되기 전에 코드 리뷰와 테스트를 통과해야 하며, 병합된 후에는 즉시 배포가 가능한 상태여야 합니다. 따라서 GitHub Flow는 작은 팀이나 지속적으로 빠르게 배포해야 하는 서비스에 적합할 수 있습니다.
master로 merge 되는 순간 바로 production에 반영되므로 PR 리뷰를 충분히 해야 합니다. master로 merge 된 즉시 배포되어야 합니다.
References
https://velog.io/@gmlstjq123/Git-Flow-VS-Github-Flow
https://www.alexhyett.com/git-flow-github-flow/
https://gist.github.com/ljlm0402/5f69a1e831d8a50bb1b9f4f1fba71f7f
https://velog.io/@kw2577/Git-branch-%EC%A0%84%EB%9E%B5
'IT 기본지식' 카테고리의 다른 글
Cookie vs LocalStorage vs SessionStorage : 차이점은 무엇일까? (0) | 2023.12.26 |
---|---|
CORS(Cross-Origin Resource Sharing)에 대하여 (0) | 2023.12.08 |
JSON Web Token(JWT) 에 대해 살펴보자 (0) | 2023.10.04 |
[Git] 3-way merge와 rebase를 이용한 fast-forward merge (0) | 2023.04.09 |
Git 명령어 기본부터 심화까지 (0) | 2023.04.04 |
댓글