[GitHub 100일 챌린지] Day 41 - 브랜치 개념과 필요성
[GitHub 100일 챌린지] Day 41 - 브랜치 개념과 필요성
100일 챌린지 Day 41 - 브랜치의 개념을 이해하고 왜 필요한지 알아봅니다.
배울 내용
- 브랜치란 무엇인가
- 브랜치가 필요한 이유
- 브랜치 활용 시나리오
Topic1. 브랜치란 무엇인가
브랜치(Branch)는 독립적인 작업 공간입니다.
브랜치의 핵심 개념
나뭇가지처럼 갈라지는 작업 흐름:
gitGraph
commit id: "Initial"
commit id: "Add feature"
branch develop
checkout develop
commit id: "Start new feature"
commit id: "Complete feature"
checkout main
commit id: "Fix bug"
main 브랜치:
- Git 저장소의 기본 브랜치
- 과거에는 master로 불렸으나 main으로 변경
- 보통 배포 가능한 안정적인 코드 유지
브랜치 포인터:
1
2
3
main → C3
↑
develop → C4
브랜치의 작동 원리
1. 커밋은 체인처럼 연결:
1
2
3
C1 ← C2 ← C3 ← C4
↑
main
2. 브랜치는 특정 커밋을 가리키는 포인터:
1
2
3
4
5
6
7
C3 ← C4
↗ ↑
C1 ← C2 main
↘
C5 ← C6
↑
develop
3. HEAD는 현재 작업 중인 브랜치를 가리킴:
1
2
3
main → C4
develop → C6
HEAD → main (현재 main 브랜치에서 작업 중)
해보기: 브랜치 개념 이해하기
시나리오: 웹사이트 개발 중 새 기능 추가
1
2
3
4
5
6
# 현재 상태 확인
git log --oneline --all --graph
# 출력 예시
* a1b2c3d (HEAD -> main) Add homepage
* d4e5f6g Initial commit
브랜치 없이 작업하면?
1
2
3
4
5
# main에서 직접 작업 (위험!)
git add new-feature.js
git commit -m "Add experimental feature"
# 문제 발생! 버그가 있는데 이미 main에 들어감
브랜치를 사용하면?
1
2
3
4
5
# 새 브랜치에서 안전하게 작업
git branch feature-login
git checkout feature-login
# 이제 main은 안전하게 보호됨!
결과
브랜치 구조 시각화:
gitGraph
commit id: "Initial"
commit id: "Homepage" tag: "main"
branch feature-login
checkout feature-login
commit id: "Login form"
commit id: "Auth logic"
장점:
- main은 항상 안전한 상태 유지
- 실험적인 기능은 별도 브랜치에서
- 문제 발생 시 해당 브랜치만 삭제
Topic2. 브랜치가 필요한 이유
실무에서 브랜치가 필수인 5가지 이유입니다.
1. 안전한 실험 환경
main 브랜치 보호:
1
2
3
4
5
# main은 항상 배포 가능한 상태
main (배포 가능) ──────→ 프로덕션
# 새 기능은 별도 브랜치에서
feature ──→ 실험 ──→ 테스트 ──→ main에 병합
실무 예시:
1
2
3
4
5
6
# 새로운 결제 시스템 개발
git checkout -b feature/payment-gateway
# 안전하게 개발 및 테스트
# 문제 없으면 main에 병합
# 문제 있으면 브랜치 삭제
2. 병렬 작업 가능
여러 개발자가 동시에 작업:
gitGraph
commit id: "v1.0"
branch feature-A
branch feature-B
checkout feature-A
commit id: "개발자 A 작업"
checkout feature-B
commit id: "개발자 B 작업"
checkout main
merge feature-A
merge feature-B
commit id: "v1.1"
실무 시나리오:
1
2
3
4
5
6
7
8
9
10
# 팀원 A: 로그인 기능
git checkout -b feature/login
# 팀원 B: 검색 기능
git checkout -b feature/search
# 팀원 C: 버그 수정
git checkout -b hotfix/security-bug
# 모두 독립적으로 작업 가능!
3. 체계적인 코드 관리
작업 단위별로 브랜치 분리:
1
2
3
4
5
6
7
main (배포용)
├─ develop (개발용)
│ ├─ feature/login
│ ├─ feature/payment
│ └─ feature/search
├─ hotfix/bug-123
└─ release/v1.2.0
브랜치 명명 규칙:
1
2
3
4
feature/기능명 # 새 기능 개발
hotfix/버그명 # 긴급 버그 수정
release/버전 # 릴리스 준비
bugfix/버그명 # 일반 버그 수정
4. 안전한 롤백
문제 발생 시 쉽게 되돌리기:
1
2
3
4
5
6
7
8
9
10
11
# 새 기능 개발
git checkout -b feature/new-ui
# 50개 커밋 작업...
git commit -m "..." (x50)
# 문제 발생! 기능 취소하기로 결정
git checkout main
git branch -D feature/new-ui
# main은 여전히 안전한 상태!
5. 코드 리뷰 용이
Pull Request 기반 리뷰:
1
2
3
4
5
6
7
8
9
# 1. 기능 브랜치에서 개발
git checkout -b feature/api-update
# 2. GitHub에 푸시
git push origin feature/api-update
# 3. Pull Request 생성
# 4. 팀원들이 코드 리뷰
# 5. 승인 후 main에 병합
해보기: 브랜치로 안전하게 작업하기
상황: 웹사이트 리디자인 (실험적)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 현재 안전한 main 백업
git checkout main
git log --oneline -3
# 2. 실험용 브랜치 생성
git checkout -b redesign-experiment
# 3. 대담한 변경 시도
echo "New design" > index.html
git add index.html
git commit -m "Experimental redesign"
# 4. 마음에 안 들면?
git checkout main
git branch -D redesign-experiment
# 5. main은 여전히 안전!
결과
브랜치 없이:
1
❌ main에 직접 커밋 → 롤백 복잡 → 위험
브랜치 사용:
1
✅ 브랜치에서 작업 → 마음에 안 들면 삭제 → 안전
Topic3. 브랜치 활용 시나리오
실무에서 자주 사용하는 브랜치 전략입니다.
시나리오 1: 신규 기능 개발
상황: 사용자 프로필 기능 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. main에서 새 브랜치 생성
git checkout main
git checkout -b feature/user-profile
# 2. 기능 개발
touch profile.js
git add profile.js
git commit -m "Add profile page"
touch profile.css
git add profile.css
git commit -m "Style profile page"
# 3. 테스트 완료 후 main에 병합
git checkout main
git merge feature/user-profile
# 4. 브랜치 정리
git branch -d feature/user-profile
브랜치 흐름:
gitGraph
commit id: "v1.0"
branch feature/user-profile
checkout feature/user-profile
commit id: "Add profile"
commit id: "Style profile"
checkout main
merge feature/user-profile
commit id: "v1.1"
시나리오 2: 긴급 버그 수정
상황: 프로덕션에서 버그 발견!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1. main에서 hotfix 브랜치 생성
git checkout main
git checkout -b hotfix/login-error
# 2. 빠르게 버그 수정
git add auth.js
git commit -m "Fix login validation bug"
# 3. 즉시 main에 병합
git checkout main
git merge hotfix/login-error
# 4. 배포 및 브랜치 삭제
git push origin main
git branch -d hotfix/login-error
긴급 수정 흐름:
gitGraph
commit id: "v1.0"
commit id: "발견된 버그!"
branch hotfix/login-error
checkout hotfix/login-error
commit id: "Fix bug"
checkout main
merge hotfix/login-error
commit id: "v1.0.1"
시나리오 3: 여러 기능 동시 개발
상황: 3개 팀이 동시에 작업
1
2
3
4
5
6
7
8
9
10
11
12
13
# 팀 A: 결제 기능
git checkout -b feature/payment
# ... 작업 ...
# 팀 B: 알림 기능
git checkout main # main에서 시작
git checkout -b feature/notification
# ... 작업 ...
# 팀 C: 검색 기능
git checkout main # main에서 시작
git checkout -b feature/search
# ... 작업 ...
동시 개발 흐름:
gitGraph
commit id: "v1.0"
branch feature/payment
branch feature/notification
branch feature/search
checkout feature/payment
commit id: "Payment API"
checkout feature/notification
commit id: "Notification service"
checkout feature/search
commit id: "Search engine"
checkout main
merge feature/payment
merge feature/notification
merge feature/search
commit id: "v2.0"
시나리오 4: 릴리스 준비
상황: v2.0 출시 준비
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. 릴리스 브랜치 생성
git checkout -b release/v2.0
# 2. 버전 번호 업데이트
echo "2.0.0" > VERSION
git commit -am "Bump version to 2.0.0"
# 3. 최종 테스트 및 버그 수정
git commit -am "Fix minor UI issues"
# 4. main에 병합 및 태그
git checkout main
git merge release/v2.0
git tag v2.0.0
# 5. develop에도 병합
git checkout develop
git merge release/v2.0
해보기: Git Flow 전략 실습
Git Flow 브랜치 구조 만들기:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 1. develop 브랜치 생성
git checkout -b develop
# 2. feature 브랜치에서 개발
git checkout -b feature/shopping-cart
# 작업 커밋
echo "cart.js" > cart.js
git add cart.js
git commit -m "Add shopping cart"
# 3. develop에 병합
git checkout develop
git merge feature/shopping-cart
# 4. release 브랜치 생성
git checkout -b release/v1.0
# 버전 업데이트
echo "1.0.0" > VERSION
git add VERSION
git commit -m "Release v1.0"
# 5. main에 병합
git checkout main
git merge release/v1.0
git tag v1.0.0
결과
브랜치 전략의 효과:
1
2
3
4
✅ 각 작업이 독립적으로 진행
✅ main은 항상 안전한 상태
✅ 롤백과 버그 수정이 쉬움
✅ 팀 협업이 원활함
실무 권장 사항:
- 작은 단위로 브랜치 생성: 기능별, 버그별로 분리
- 명확한 이름 사용: feature/login, hotfix/bug-123
- 정기적으로 병합: 브랜치가 너무 오래되지 않도록
- 사용 완료한 브랜치 삭제: 저장소를 깔끔하게 유지
정리
오늘 배운 내용:
1. 브랜치 개념:
- 독립적인 작업 공간
- 커밋을 가리키는 포인터
- HEAD는 현재 브랜치를 가리킴
2. 브랜치가 필요한 이유:
- 안전한 실험 환경
- 병렬 작업 가능
- 체계적인 코드 관리
- 안전한 롤백
- 코드 리뷰 용이
3. 활용 시나리오:
- 신규 기능 개발
- 긴급 버그 수정
- 여러 기능 동시 개발
- 릴리스 준비
다음 단계: Day 42에서 브랜치 생성하는 방법을 실습합니다.
완료 체크:
- 브랜치가 무엇인지 설명할 수 있다
- 브랜치가 왜 필요한지 이해했다
- 실무에서 브랜치를 어떻게 활용하는지 안다
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
