Notice
Recent Posts
Recent Comments
Link
Ssul's Blog
실무에서 프로젝트 Git 운영 완벽 가이드 본문
# 1. 브랜치 구조
main <- release <- develop <- feature/(예)로그인기능
# 2. 브랜치별 역할
| main | 실제 운영 서비스 | release → main | Production | 태그 기준 배포 |
| release | QA / 검수 / 버그 수정 | develop → release → main | Staging | 코드 동결 후 QA |
| develop | 통합 개발 | feature/* → develop | Dev | 신규 기능 통합 |
| feature/* | 개인 작업 | develop에서 생성 | 로컬/Preview | 기능 완료 후 PR |
# 3. 운영규칙
3-1. 브랜치 네이밍
| 타입 | 예시 | 설명 |
| 기능 | feature/login-page | 신규 기능 개발 |
| 버그 | fix/user-auth-error | QA 중 버그 수정 |
| 긴급 | hotfix/payment-timeout | 운영 긴급 대응 |
3-2. 커밋 컨벤션
- feat: 기능 추가
- fix: 버그 수정
- refactor: 코드 리팩토링
- docs: 문서 변경
- chore: 설정 변경
- test: 테스트 코드 추가
(예시)
feat: add user profile update API
fix: resolve null token error on login
3-3. Merge 규칙
| 구분 | 방식 | 승인자 | 조건 |
| feature → develop | PR | 1명 이상 | CI 통과 |
| develop → release | PR | 1명 이상 | QA 완료 |
| release → main | PR | 팀장 승인 | 배포 전 최종 확인 |
3-4. 버전 및 태깅
| 변경유형 | 예시 | 설명 |
| 큰 구조 변경 | v2.0.0 | 비호환 수정 |
| 기능 추가 | v1.3.0 | 하위호환 유지 |
| 버그 수정 | v1.3.1 | 기능 동일 |
(예시)
git tag -a v1.3.0 -m "Add profile update feature"
git push origin v1.3.0
3-5. 배포단계
단계 트리거 배포 대상
| 단계 | 트리거 | 배포 대상 |
| feature/* | 브랜치 push | Preview |
| develop | 머지 시 | Dev 서버 |
| release | 머지 시 | Staging |
| main + tag | 태그 push | Production |
3-6. 협업 기본원칙
✅ main 직접 푸시 금지
✅ 모든 작업은 PR 리뷰 후 병합
✅ 작업 전 develop 최신 pull
✅ 완료 후 불필요한 브랜치 정리
# 1. 작업 시작
git checkout develop
git pull
git checkout -b feature/login-api
# 2. 커밋 & 푸시
git add .
git commit -m "feat: add login API"
git push -u origin feature/login-api
# 3. PR → develop
# 4. QA 완료 후 release 생성
git checkout develop && git pull
git checkout -b release/1.2.0
git push -u origin release/1.2.0
# 5. 배포
git checkout main && git merge release/1.2.0
git tag -a v1.2.0 -m "Release 1.2.0"
git push origin main --tags
실제 사용 예시
시나리오
- 개발자 A(민수)와 B(지영)가 로그인 기능을 함께 만듭니다.
- 우리 팀 브랜치 구조: feature/* → develop → release/* → main(+tag)
1) 각자 feature 브랜치에서 작업
민수
git checkout develop
git pull
git checkout -b feature/login-api # 새 작업 브랜치 생성
# ... 코드 작업 ...
git add .
git commit -m "feat(login): add login API endpoint"
git push -u origin feature/login-api # ← "현재 브랜치"로 push
지영
git checkout develop
git pull
git checkout -b feature/login-ui
# ... 코드 작업 ...
git add .
git commit -m "feat(login): build login form UI"
git push -u origin feature/login-ui
❗️왜 push가 main이 아니죠?
git push는 “지금 체크아웃한 브랜치(feature/….)”를 같은 이름의 원격 브랜치로 올립니다.
운영 보호를 위해 main은 직접 push 금지(보호 규칙)하고, PR로만 병합합니다.
2) 두 사람이 PR로 develop에 통합
민수 PR
- GitHub에서 feature/login-api → develop PR 생성
- CI 통과, 지영 리뷰 승인 → Merge
지영 PR
- feature/login-ui → develop PR 생성
- CI 통과, 민수 리뷰 승인 → Merge
이제 develop에 API + UI가 합쳐졌습니다.
(원한다면 자동으로 Dev 서버에 배포되도록 설정)
3) QA 시작을 위해 release 브랜치 생성
릴리즈 매니저(또는 팀장)가 수행:
git checkout develop
git pull
git checkout -b release/1.4.0 # 이번 배포 버전
git push -u origin release/1.4.0
- 이 순간부터 release/1.4.0은 코드 동결(새 기능 금지), QA/버그 수정만 허용
- Staging(검수 서버)에 자동 배포되도록 보통 CI/CD를 연결해둡니다.
QA 중 버그 발견 → release에서 바로 수정
# 민수가 버그 픽스
git checkout release/1.4.0
# ... 수정 ...
git add .
git commit -m "fix(login): handle empty email error"
git push
- Staging에 다시 자동 반영 → QA 통과될 때까지 반복
4) release → main 병합 + 태그로 배포
QA 통과 후, 릴리즈 매니저:
git checkout main
git pull
git merge --no-ff release/1.4.0 -m "merge: release/1.4.0 → main"
git push origin main
# 배포용 태그(프로덕션 트리거)
git tag -a v1.4.0 -m "Release v1.4.0: Login API & UI"
git push origin v1.4.0
- CI가 태그 푸시를 감지하여 프로덕션 배포 실행
- (선택) GitHub Releases에 릴리즈 노트 작성/자동화
5) release → develop 역병합(정리)
QA 중 release에서 고친 버그를 develop에도 반영해 다음 개발 라인과 이력을 맞춥니다.
git checkout develop
git pull
git merge --no-ff release/1.4.0 -m "merge: release/1.4.0 → develop"
git push
(원한다면 release/1.4.0 브랜치는 삭제)
'dev > 까먹지마' 카테고리의 다른 글
| Git 4단계 흐름 이해하기 (0) | 2025.09.15 |
|---|---|
| SwiftUI에서 Markdown(마크다운) 표현하기 (0) | 2025.04.24 |
| swiftUI @StateObject, @ObservedObject, @EnvironmentObject 정리 (0) | 2025.04.18 |
| Django Serializer 이해하기(직렬화, 역직렬화) (0) | 2024.08.16 |
| AWS lambda에서 Layer구성(맥 실리콘-M1에서) (0) | 2024.08.08 |