Skip to content

Git Flow에서 Github Flow로의 전환

shl0501 edited this page Dec 1, 2024 · 1 revision

📄Git Flow에서 Github Flow로의 전환

주제 요약

  • 브랜치 전략의 선택과 변경의 필요성 및 도입 배경을 설명합니다.
  • 브랜치 전략 변경 후 느낀 것을 설명합니다.

🧩 배경 및 필요성

기존 main, develop, feature로 이루어진 Git Flow 전략에서 main, feature로 이루어진 Github flow로의 전환이 이루어진 이유입니다.

모노레포

모노레포이므로 FE와 BE 모두 하나의 Git 저장소에 저장됩니다. 따라서 각 프로젝트가 독립적으로 개발되더라도, 하나의 main 브랜치로 배포를 관리하는 것이 더 효율적이라고 판단되었습니다.

짧은 개발 기간과 배포 주기

짧은 기간안에 기능을 개발하고 배포를 해야합니다. 따라서 feature 브랜치에서 바로 main 브랜치로 병합하는 전략을 통해 각 기능을 빠르게 피드백하고 짧은 배포 주기를 유지하는 것이 중요하다고 판단되었습니다.

🔍 기술적 분석 및 비교

Git Flow

주요 브랜치:

  • master: 항상 안정적인 상태를 유지하는 브랜치, 프로덕션에 배포된 버전.
  • develop: 개발 중인 코드가 반영되는 브랜치.
  • feature: 새로운 기능 개발을 위한 브랜치.
  • release: 배포 준비를 위한 브랜치, 개발이 완료되면 master와 develop에 병합.
  • hotfix: 배포된 버전에서 발견된 버그 수정.

Git Flow의 특징:

  • 복잡한 프로젝트나 팀 단위 개발에서 유용.
  • 다양한 브랜치를 관리하므로 브랜치가 많아져 관리가 복잡해질 수 있음.
  • 배포 주기가 길거나 여러 버전을 동시에 관리할 때 적합.

GitHub Flow

주요 단계:

  1. main: 항상 프로덕션 상태인 안정적인 브랜치.
  2. feature branch: 새로운 기능이나 버그 수정을 위한 브랜치, main에서 분기.
  3. Pull Request(PR): 개발이 완료되면 feature branch에서 main 브랜치로 PR을 생성.
  4. Review & Merge: PR 리뷰 후 main 브랜치에 병합.

GitHub Flow의 특징:

  • 간단하고 직관적이며, 작은 팀과 빠른 배포에 적합.
  • 매번 main 브랜치에 바로 변경 사항을 병합하는 방식으로, CI/CD 파이프라인과 잘 결합.
  • 개발 주기가 짧고, 여러 기능을 병렬적으로 진행하며 작은 변경을 자주 배포할 때 유리.

🗺️ 문제 해결 과정

기존 Git Flow 전략

image (20)

(점선이 merge를 의미한다)

각 브랜치의 역할 :

  • main : 자동 배포 걸어두는 브랜치. 버전업 시에만 merge하여 반영한다.
  • develop : feature 브랜치를 묶는 브랜치. 완성한 feature 브랜치들을 develop으로 merge시킨다.
  • feature : 기능 단위 개발을 위한 브랜치. 가장 하위 레벨이다.

기존 Git Flow에서 main, develop, feature 브랜치를 차용하여 브랜치 전략을 설계하였습니다.

변경된 Github Flow 전략

각 브랜치 및 단계:

  • main : 자동 배포 걸어두는 브랜치. 버전업 시에만 merge하여 반영한다.
  • feature : 기능 단위 개발을 위한 브랜치. 가장 하위 레벨이다.
  • Pull Request : 기능 개발 완료시 feature branch에서 main 브랜치로 PR 생성
  • Review & Merge : : PR 리뷰 후 main 브랜치에 병합합니다.

feature에서 개발한 기능의 PR을 리뷰 후 main 브랜치에 merge합니다.

📈 결과 및 성과

Github Flow로 변경한 후 다음과 같은 장점을 느낄 수 있었습니다.

단순한 브랜치 전략의 효율성

작업 충돌 가능성이 줄어들었으며, 코드 리뷰와 병합 과정이 간소화되어 짧은 배포 주기를 유지할 수 있었고, 이를 통해 빠르게 개발과 배포를 할 수 있었습니다.

모노레포 환경

모노레포 환경에서 develop 브랜치를 유지하기 위해 모든 프로젝트 상태를 조율해야하는 부담감을 줄일 수 있었습니다.

Clone this wiki locally