백엔드 개발자 블로그

Branch 전략 본문

Git/Branch 전략

Branch 전략

backend-dev 2023. 8. 20. 11:33

여러명의 개발자가 1개의 저장소를 사용하는 환경에서 충돌없이 효과적으로 사용하기 위해서는 Git Branch 전략이 필요합니다. 그래서 주로 사용하는 Git Branch를 정리해봤습니다.


1. GitHub Flow

  • Github에서 만든 단순한 구조의 branch 전략입니다.
  • 마스터 브랜치를 중심으로 운영되며, 기능 개발, 버그 수정 등의 작업용 브랜치를 구분하지 않고 사용하는 단순한 구조를 사용하고 있습니다.
  • 단순한 구조를 사용하여 수시로 배포가 일어나는 소규모 프로젝트에 유용합니다.

Github flow단계

1. 브랜치 생성

  • 기능 개발, 버그 수정 구분 없이 master 브랜치로부터 새로운 브랜치를 생성하여 사용합니다.
  • 기능 개발, 버그 수정 구분이 없으므로 브랜치 이름은 간결하고 정확하게 작성해야 합니다.

2. 기능 개발

  • 생성한 브랜치 내에서는 각각의 목적에 맞는 작업을 수행합니다.
  • 이 떄 기능별로하는 commit들은 서버의 동일한 브랜치에 push해줘야 합니다.

 

3. Pull Request 생성

  • 기능 개발 또는 오류 수정 등의 작업이 끝났으면 master브랜치로 PR을 보냅니다.

4. 리뷰와 논의

  • 요청이 올라온 PR을 통해 팀원들은 작성한 코드에 대한 리뷰와 논의를 진행합니다.

5. 공개 및 테스트

  • merge이전에 먼저 브랜치 내에서 코드를 배포하여 사용을 해보며, 해당 branch에 문제가 발생할 시에는 안정적인 기존의 master브랜치를 다시 배포하고 branch코드는 다시 수정한 후 다시 배포할 수 있습니다.

6. 합치기(Merge)

 

  • 개발 branch가 안전하다는 검증이 완료된다면 master 브랜치에 합칩니다.

 2. Git Flow

  • Vincent Driessen가 제안한 Branch model을 기반으로 만들어졌으며 현재는 많은 기업에서 표준으로 사용하는 브랜치 전략입니다.
  •  5개의 브랜치를 운영하며 관리합니다.
    • 메인 브랜치 : master, develop
    • 보조 브랜치 : feature, release, hotfix
  • 배포 주기가 길고 대규모 프로젝트에 적합합니다.

 

Git Flow의 Branch

Master & Develop

  • Master Branch :  현재 배포할 수 있는 코드들이 위치한 브랜치입니다.
  • Develop Branch : 개발자들이 다음 버전을 위해 사용하고 있는 브랜치입니다.
  • 다음 버전의 구현이 완료되어 배포를 하고 싶을 때 Master Branch로 합치는 방식으로 운영됩니다.

 

feature

  • 추가적인 기능 개발을 위해 develop branch로부터 생성하는 Branch입니다.
  • 개발을 완료한 후에는 develop branch으로 merge하는 방식으로 운영됩니다.
    • --no-ff옵션을 이용하여 브랜치에서 merge가 되었음을 git 기록에 남겨두도록 해야합니다.

release

  • Production의 다음 출시 버전을 위한 브랜치입니다. 
    • develop브랜치에서 개발을 완료한 후, release 브랜치로 옮겨 release 브랜치에서 QA를 진행합니다.
  • QA를 진행하며 release 브랜치에서는 버그 픽스에 대한 부분만 commit합니다.
  • 배포를 할 준비가 되었다고 판단되면 master 브랜치로 merge합니다.
    • --no-ff옵션을 이용하여 브랜치에서 merge가 되었음을 git 기록에 남겨두도록 해야합니다.
    • master로 머지 후 tag 명령을 이용하여 릴리즈 버전에 대해 명시를 하고, -s 나 -u 옵션을 이용하여 merge한 사람의 정보를 남겨두도록 합니다. 그런 뒤 develop 브런치로 merge합니다.

hotfix

  • master로부터 버그가 발생하면 hotfix 브랜치를 생성하여 해당 버그를 빠르게 수정합니다.
  • 버그를 수정한 후에는 develop, master브랜치에 merge해줍니다.
    • master에 반영할 때는 master에 tag를 추가해줍니다.
  • release브랜치가 존재한다면 release브랜치에도 merge해줍니다.

 

 

Git Flow 전략의 단계

  1. repository를 생성하면 master브랜치에 위치할 것입니다.
  2. 개발을 할 때는 develop 브랜치를 만들어 해당 브랜치에서 개발을 합니다.
  3. develop브랜치에서도 특정 기능을 개발할 때는 feature브랜치를 생성하여 개발을 합니다.
  4. feature브랜치의 개발이 끝나면 develop브랜치로 pull request를 보냅니다.
  5. develop브랜치의 개발 리더 또는 동료 직원들이 해당 request를 확인하고 문제가 없다면 merge를 합니다. merge이후에는 feature브랜치가 필요가 없어 삭제를 해줍니다.
  6. develop브랜치에서 어느정도 개발이 완료된다면 release브랜치를 생성하여 QA를 진행합니다. release 브랜치에서 발생한 버그들은 release브랜치에서 수정을 합니다.
  7. QA를 통과하여 제품이 출시될 수 있다면 master와 develop브랜치로 merge합니다.
  8. 마지막 master 브랜치에 버전 태그를 추가합니다.