Tooling, DevOps/GIT

[git] fit flow란

장쫄깃 2022. 9. 21. 15:12
728x90


git-flow란


git-flow는 git이 새롭게 활성화되기 시작하는 10년전 쯤에 Vincent Drissen이 제안한 효율적인 git 브랜치 전략이다. 현재는 git으로 개발할 때 거의 표준과 같이 사용되는 방법론이다.

 

말하자면, git-flow는 기능이 아니라 하나의 방법론이라는 점이다. Vincent Drissen도 언급했듯이 git-flow가 완벽한 방법론은 아니고 각자 개발 환경에 따라 수정하고 변형해서 사용하라고 언급한다.

 

 

git-flow 5가지 브랜치 모델


Vincent Drissen의 브랜칭 모델에는 5개의 브랜치가 사용된다.

  • master
  • develop
  • feature
  • release
  • hotfix

master

정식 배포되는 안정적인 버전의 소스코드가 관리되는 브랜치로, master 브랜치의 HEAD는 소프트웨어의 최신 배포판의 소스코드 버전이 들어있다. master 브랜치에는 지난 배포판 버전의 소스코드를 따라가기 위해 태그(tag)들이 추가되어 있다. 이 태그를 이용해 각 릴리즈 버전의 소스코드를 빠르게 확인할 수 있다.

develop

개발 브랜치로 개발자들이 이 브랜치를 기준으로 각자 작업한 기능들을 병합(Merge)한다. 소스코드들이 끊임없이 추가된다. 버그들을 수정하기 위한 코드와 새로운 기능을 추가하기 위한 코드, 성능을 개선하기 위한 코드 등이 검증을 완료한 후 PR 요청을 거치게 되면 이 곳으로 병합된다.

feature

새로운 기능 개발이나 버그 수정을 위한 일련의 코드 수정이 이뤄지는 브랜치로, 개발자 혼자 작업할 수도 있고 특정 기능 개발을 위해 여러명의 개발자들이 공동으로 작업할 수도 있다.

 

feature 브랜치에서 작업된 내용은 최종적으로 PR을 거쳐 develop 브랜치에 병합(Merge)된다.

release

git으로 관리되는 소프트웨어는 정기적으로 성능 개선, 기능 추가, 버그 수정 등을 반형하면서 릴리즈 된다. release 브랜치는 릴리즈를 하기 위한 목적으로 생성되는 브랜치다.

 

release 브랜치는 develop 브랜치를 base로 생성된다. 다음 릴리즈에 포함되어야 하는 기능들과 버그 수정사항들이 확정된 다음 생성된다. QA 테스트가 release 브랜치를 기준으로 진행된다. 이 과정에서 발견된 버그 수정사항들이 release 브랜치와 develop 브랜치에 적용되며, 그 밖의 메이저 기능들이 중간에 추가되지 않는다.

 

테스트 이후 release 브랜치의 코드가 안정적이라고 판단되면, master 브랜치에 병합되고 release에 해당되는 태그가 생성된다. release 브랜치가 생성된 이후 반영된 수정사항들은 develop 브랜치에도 반영된다.

hotfix

안정성을 높이기 위해 긴급하게 대응되어야 하는 버그 수정을 위해 생성되는 브랜치다. 다음 release 프로세스를 기다릴 수 없을 정도로 긴급한 패치가 필요한 경우 이 브랜치를 사용한다.

 

hotfix 브랜치는 master 브랜치를 기반으로 생성된다. 생성된 hotfix 브랜치에 긴급한 패치들이 반영된다. 이 후에 master 브랜치에 병합되고 태그가 생성된다. 마찬가지로 수정사항은 develop 브랜치에 병합되어 긴급 수정 사항이 이후 release 브랜치에 반영되도록 한다.

 

git-flow

git-flow를 설명할 때 가장 많이 사용되는 이미지이다.

  1. master 브랜치에서 시작
  2. 동일한 브랜치를 develop에도 생성 후 개발자들이 develop 브랜치에서 개발을 진행
  3. 개발을 진행 중 기능 개발(회원가입, 장바구니 등)이 필요한 경우 develop 브랜치에서 feature 브랜치를 생성 후 해당 브랜치에서 기능 구현
  4. 완료된 feature 브랜치는 검토를 거쳐 develop 브랜치에 Merge
  5. 모든 기능 개발이 완료되면 develop 브랜치로부터 release 브랜치를 생성 후 QA를 진행. 버그 발생 시 release 브랜치에 수정
  6. 테스트 완료 후 release 브랜치를 master 브랜치와 develop 브랜치로 Merge하고, master 브랜치에서 해당 release에 대한 태그 생성
  7. 배포 진행
  8. 배포 후 미처 발견하지 못한 버그 발생 시 hotfixes 브랜치를 만들어 긴급 수정 후 master 브랜치에 Merge 및 태그를 생성하고 수정 배포 진행

 

 


참고

https://techblog.woowahan.com/2553/

https://hbase.tistory.com/60

https://uxgjs.tistory.com/183

728x90