1. 왜 브랜치 보호가 필요한가?
Git에서 브랜치는 단순한 코드 분기점이 아닙니다.
특히 main 또는 dev 는 프로덕션 품질 기준선입니다.
하지만 다음과 같은 문제가 자주 발생합니다:
- 직접 push로 코드 품질 저하
- 테스트 미통과 상태로 머지
- 충돌 상태 방치
- 리뷰 없이 병합
이를 막기 위한 기능이 바로
GitHub Branch Protection입니다.
2. Branch Protection이란?
GitHub에서 특정 브랜치에 대해:
- 직접 push 금지
- PR 필수화
- CI 통과 강제
- 리뷰 승인 필수
- force push 차단
등을 설정하는 기능입니다.
경로:
3. 주요 설정 항목 설명
1️⃣ Require a pull request before merging
- 직접 push 금지
- PR 통해서만 병합 가능
- 리뷰 프로세스 강제
👉 실무에서는 거의 필수
2️⃣ Require status checks to pass
CI가 통과해야 머지 가능
예:
- Backend - Build/Test
- SonarCloud Scan
- Lint Check
품질 게이트 역할을 합니다.
3️⃣ Require branches to be up to date
머지 전 최신 main과 rebase/merge 필요
→ 오래된 브랜치에서 병합 방지
4️⃣ Require review from code owners
CODEOWNERS 파일 기반 승인 필수
대기업/엔터프라이즈에서 사용
5️⃣ Block force pushes
히스토리 변조 방지
4. 브랜치 전략 유형 비교
📌 1) GitHub Flow
가장 단순한 전략
└─ feature/*
특징:
- 항상 main이 배포 가능 상태
- PR 기반 개발
- CI 중심
✔ 스타트업, 소규모 팀에 적합
📌 2) Git Flow
develop
feature/*
release/*
hotfix/*
특징:
- 역할 분리 명확
- 릴리즈 단위 관리
- 복잡도 높음
✔ 대규모 프로젝트, 배포 주기 긴 경우
📌 3) Trunk-Based Development
└─ short-lived branch
특징:
- 브랜치 수명 매우 짧음
- CI/CD 자동화 중심
- 기능 토글 활용
✔ DevOps 조직에 적합
5. 실무 추천 브랜치 전략 (Spring Boot + CI 기준)
르무엘님 같은 백엔드 중심 프로젝트 기준으로 추천:
develop → 통합 테스트 브랜치
feature/* → 기능 단위
hotfix/* → 긴급 수정
6. 권장 Branch Protection 설정 예시
🎯 main 브랜치
✔ Require pull request
✔ Require status checks
✔ Require branch up to date
✔ Block force push
Required Checks:
- Backend - Build/Test
- SonarCloud
- Lint
🎯 develop 브랜치
✔ Require pull request
✔ Require status checks
❌ 리뷰 필수는 선택
7. 모노레포에서의 보호 전략
모노레포 + path filter 구조라면
문제:
- backend만 변경했는데 frontend 체크가 Required면 머지 불가
- skip된 job은 Required 충족 안 됨
해결:
✔ 항상 실행되는 공통 job 1개 Required
✔ 조건부 job은 Optional
8. Branch 전략과 CI 설계의 연결
브랜치 전략은 CI와 함께 설계해야 합니다.
예시:
↓ PR
CI 실행
↓
품질 통과
↓
develop 머지
↓
통합 테스트
↓
main 머지
↓
Docker build & push
9. 흔한 실수
❌ 모든 체크를 Required로 설정
❌ 조건부 job을 Required로 설정
❌ main에 직접 push 허용
❌ 리뷰 없이 merge 허용
10. 결론
Branch Protection은
“코드 저장소를 통제하는 기능”이 아니라
“품질을 자동으로 강제하는 정책 도구”
입니다.
브랜치 전략 + CI + 품질 도구(Sonar, Qodana 등)와 함께 설계해야 합니다.
🔥 정리
| PR 필수 | ✔ |
| CI 통과 | ✔ |
| Force push 차단 | ✔ |
| 리뷰 승인 | 팀 규모에 따라 |
'Spring & Backend' 카테고리의 다른 글
| Claude Code Agents 개념 이해 (0) | 2026.03.04 |
|---|---|
| 자바스크립트에서 메모리 누수가 발생하는 상황들을 설명해주세요. (0) | 2026.03.04 |
| SonarCloud vs Qodana(IntelliJ) – 정적 분석 도구 실무 비교 및 선택 기준 정리 (0) | 2026.03.03 |
| 페이지 교체 알고리즘에 대해서 설명해 주세요. (0) | 2026.03.03 |
| GC 알고리즘은 어떤 것이 있나요? (0) | 2026.03.03 |
