개발 환경과 운영 환경에서 어떻게 브랜치를 관리해야 할까?
브랜치는 개발자들이 병렬로 개발하고 실제 운영되는 서비스와 분리하여 개발/테스트 하기 위해 사용된다.
컴파일 : 개발자가 만든 코드를 컴퓨터가 이해할 수 있는 언어로 바꾸는 작업
빌드 : 컴파일된 코드를 실제 동작도록 만드는 과정. 소스코드를 변환하는 것 뿐만 아니라 리소스 포함, 의존성 관리, 패키징도 포함한다. (컴파일을 포함해 jar,war 파일을 만드는 작업을 빌드라고 하기도 함)
배포 : 빌드된 애플리케이션을 특정 환경(개발, 스테이징, 운영)에 배치하여 실행할 수 있도록 하는 과정.
스테이징 환경(Staging) : 운영환경과 거의 유사한 환경. 운영 환경으로 넘어가기 전 최종 점검하는 테스트환경이다.
운영 환경(Production) : 실제 사용자들이 서비스를 이용하는 환경으로 운영 환경으로 넘어가기 전 스테이징 환경에서 최종적으로 모든 테스트를 마쳐야 한다. 장애 발생시 롤백 가능하도록 설정하는 것이 중요하다.
배포 주기가 긴 대규모 프로젝트에 적합한 브랜치 전략.
주요 브랜치로 main , develop 브랜치를 가지고 보조 브랜치로 feature, release, hoxfix 브랜치가 있다.


git branch develop
git checkout develop
git branch feature/a
git checkout feature/a
git commit - m 'service a'
git commit - m 'service a2'
git checkout master
git branch hotfix
git checkout hotfix
git commit -m 'bug fix'
git checkout master
git merge hotfix
git checkout develop
git merge hotfix
git merge feature/a -m 'merge feature/a into develop'
git branch release
git checkout release
// 테스트 완료 커밋 추가
git commit -m 'relaese: finish test'
git checkout develop
git merge release -m 'merge relase into develop'
git checkout main
git merge release -m 'merge release into main'
위의 그림을 보면 알겠지만 브랜치가 너무 많아 복잡하다. 체계적인 브랜치 관리가 가능하고 여러 기능을 병렬적으로 개발할 수 있다는 장점이 있지만 브랜치가 많아 관리가 복잡하다는 단점이 있다. CI/CD 환경이 발전하면서 GitHub Flow나 Trunk-Based Development(TBD) 같은 단순한 전략이 더 선호된다. 간소화된 전략중 하나인 GitLab Flow를 알아보자.
GitLab Flow는 Git Flow보다 단순하면서도 CI/CD에 최적화된 브랜치 전략.
Git Flow는 develop, feature, release, hotfix 등 다양한 브랜치를 사용하지만,
GitLab Flow는 보다 간단한 브랜치 구조로 유지보수와 배포를 쉽게 만들었다.
GitLab Flow의 3가지 모델
1. Production Branch Model (기본적인 GitLab Flow)
2. Environment Branch Model (운영 환경별 브랜치 전략)
3. Release Branch Model (버전 릴리스 전략)
✔ 브랜치 구조:
main -----> (프로덕션 배포)
|
|-- feature/* -----> (기능 개발 후 main으로 Merge Request)
동작 방식:
main 브랜치는 항상 운영 환경(Production) 코드를 유지.
새 기능은 feature 브랜치에서 개발 후, Merge Request(MR, PR)를 생성.
코드 리뷰 후 main에 병합되면 자동으로 배포(CI/CD 활용).
차이점:
Git Flow처럼 develop, release 브랜치 없이 직접 main으로 병합!
빠른 배포(Continuous Deployment, CD)를 목표로 함.
feature 브랜치에서 충분히 테스트한 후 main으로 병합해야 함.
✔ 사용 예시:
스타트업, 빠르게 배포하는 SaaS 서비스, 지속적 배포가 필요한 프로젝트.
✔ 브랜치 구조:
main -----> (프로덕션 배포)
|
|-- staging -----> (사전 테스트 환경)
| |
| |-- feature/* -----> (기능 개발 후 staging으로 MR)
동작 방식:
feature 브랜치에서 개발 후 staging 브랜치로 병합 (테스트 환경)staging에서 QA 테스트 후, 이상 없으면 main으로 병합하여 프로덕션 배포차이점:
main)에 직접 병합하기 전에 staging을 거쳐 안정성을 확보.✔ 사용 예시:
금융 서비스, 의료 시스템, 보안이 중요한 프로젝트.
✔ 브랜치 구조:
main -----> (최신 안정 릴리스)
|
|-- release/2.0 -----> (v2.0 릴리스 준비)
| |
| |-- hotfix/2.0.1 -----> (긴급 수정 후 release 브랜치에 반영)
동작 방식:
release/* 브랜치를 생성해 안정화.hotfix/* 브랜치를 만들어 수정 후 release/*에 병합.main에 병합 후 배포.차이점:
✔ 사용 예시:
소프트웨어 버전 관리가 중요한 프로젝트 (ex. 대형 애플리케이션, 패키지 소프트웨어, 게임 개발).
GitLab Flow vs Git Flow 차이점
| GitLab Flow | Git Flow | |
|---|---|---|
| 브랜치 개수 | 적음 (단순) | 많음 (복잡) |
| 배포 방식 | 지속적 배포 (CI/CD 중심) | 릴리스 중심 |
| 테스트 환경 | staging 브랜치 사용 가능 | develop, release 브랜치 사용 |
| 사용 사례 | 빠른 배포가 필요한 서비스 | 전통적인 소프트웨어 개발 |
GitLab Flow는 배포를 빠르게 하고, 브랜치 관리를 단순하게 하는 데 초점을 맞춘다!
Git Flow는 여러 브랜치를 활용해 명확한 배포 프로세스를 유지하는 데 중점을 둔다!
개발 환경에서는 GitLab Flow의 (환경 기반 브랜치) 전략이 유효해 보이고, 운영 환경에서는 Git Flow나 GitLab Flow (릴리스 브랜치 전략)이 유효해보인다.
GitLab Flow (환경 기반 브랜치 전략)은 개발, 테스트, 운영 등 환경별로 브랜치를 나누는 방식으로 개발환경에서 다음과 같은 이점이 있다.
1) 환경별 배포 안정성 유지
develop 같은 중앙 브랜치 없이 환경별 브랜치를 두면 각 환경에서 안정성을 유지할 수 있음.main (운영 환경 - 프로덕션 배포)
|
|--- staging (테스트 환경 - QA)
|--- develop (개발 환경 - 내부 테스트)
|--- feature/* (기능 개발 브랜치)2) CI/CD 자동 배포와 궁합이 좋음
feature/* → 코드 검토 후 develop에 병합 → 개발 서버 자동 배포develop → 테스트 후 staging에 병합 → QA 환경 자동 배포staging → 운영 준비 완료 후 main에 병합 → 프로덕션 자동 배포따라서 각 브랜치가 특정 환경과 연결되어 있어, 배포 자동화에 적합함.
3) 빠른 피드백 루프 가능
feature/* 브랜치를 develop에 병합하면서 바로 테스트 가능. 결론:
-> 환경 기반 브랜치 전략을 사용하면 환경별 배포 안정성을 유지하면서도, CI/CD와 연계하여 자동 배포 및 빠른 피드백이 가능하기 때문에 개발 환경에서 유효함.
운영 환경에서는 안정성과 긴급 대응이 중요하기 때문에, Git Flow 또는 GitLab Flow의 릴리스 브랜치 전략이 적합하다.
1) 운영 환경에서는 "안정적인 코드만 배포"가 핵심
release/* 브랜치를 사용하면, 운영 배포 전 충분한 QA 및 승인 프로세스를 거칠 수 있음.main (운영 환경 - 최종 안정 코드)
|
|--- release/v1.2 (릴리스 브랜치 - 운영 전 최종 검증)
|--- hotfix/* (긴급 수정 브랜치 - 운영 이슈 대응)release 브랜치를 활용하면 안정적인 배포가 가능.2) "긴급 패치 대응 (Hotfix)"를 고려해야 함
hotfix/* 브랜치를 사용하여, 운영 브랜치(main)에서 바로 긴급 패치를 적용하고, 이후 develop에도 반영.git checkout -b hotfix/urgent-bugfix main
# 버그 수정 후 main에 반영
git checkout main
git merge hotfix/urgent-bugfix
git push origin main
# 이후 develop에도 반영
git checkout develop
git merge hotfix/urgent-bugfix
git push origin develop3) 릴리스 브랜치를 사용하면 "운영 승인 및 테스트 프로세스"를 강화할 수 있음
결론:
운영 환경에서는 안정적인 배포와 긴급 패치 대응이 중요하기 때문에, Git Flow의 release/* & hotfix/* 브랜치를 활용하면 운영 환경에서 유효함.
GitLab Flow의 릴리스 브랜치를 사용하면, 운영 환경에서 배포 안정성을 더욱 강화할 수 있음.
| 환경 | 유효한 브랜치 전략 | 이유 |
|---|---|---|
| 개발 환경 | GitLab Flow (환경 기반 브랜치 전략) | 환경별 브랜치를 두고, CI/CD 자동 배포 및 빠른 피드백 가능 |
| 운영 환경 | Git Flow 또는 GitLab Flow (릴리스 브랜치 전략) | 운영 배포 안정성 확보, release/* 브랜치로 검증 후 배포, hotfix/*로 긴급 대응 가능 |
✔ 개발 환경에서는 GitLab Flow의 환경 기반 브랜치 전략이 CI/CD와 잘 맞기 때문에 유용함
✔ 운영 환경에서는 안정성과 긴급 대응이 중요하기 때문에 Git Flow 또는 GitLab Flow (릴리스 브랜치 전략)이 적합함
https://nvie.com/posts/a-successful-git-branching-model/ (Git Flow 블로그)
https://explorer89.tistory.com/m/213#:~:text=Git%EC%97%90%EC%84%9C%20**%EB%B8%8C%EB%9E%9C%EC%B9%98 (Git에서 브랜치(Branch)를 사용하는 이유와 장점은 무엇인가요?)
https://parkstate.tistory.com/33 (Git브랜치 전략(feat.Git Flow, Github Flow, Gitlab Flow)
https://weaklion1.tistory.com/35 (각 브랜치 전략 비교 (git flow, github flow, gitlab flow, TBD)
https://ujuc.github.io/2015/12/16/git-flow-github-flow-gitlab-flow/(Git flow, GitHub flow, GitLab flow)
https://brownbears.tistory.com/605 ([Git] 브랜치 전략 - GitLab Flow)