
Branch란, 메인 프로젝트와 별개로 새로운 변경 사항을 작업할 수 있는 별도의 작업 공간을 의미한다. Branch에서 작업을 마치면, 메인 프로젝트에 다시 병합할 수 있다.
Branch를 사용하면, 다양한 작업이나 기능을 독립적으로 관리할 수 있으며, 배포된 코드에 영향을 주지 않고 변경 사항을 테스트할 수 있다. 또한 다른 사람과 협업하는 과정에서도 필수적이다.
Fork란, 다른 사용자의 저장소의 사본을 만드는 것을 의미한다.
이렇게 말하면, Clone과 유사해보일 수 있지만, Clone의 경우 로컬에 저장소 사본을 생성하며, 쓰기 권한이 없으면 변경 사항을 저장소에 직접 push할 수 없으며, 다른 사람의 프로젝트에 기여할 때 문제가 된다.
Fork의 경우, github 계정에 저장소 사본을 생성하여 PR을 통해 변경 사항을 제안할 수 있다.
Merge란, 두 브랜치의 변경 사항을 하나로 결합하는 데 사용되는 명령이다. 여러 브랜치의 작업을 손실 없이 하나로 통합할 수 있다.
예를 들어, feature 브랜치에서 새롭게 개발한 내용을 main 브랜치에 병합할 때 merge가 사용된다.
PR이란, 한 브랜치에서 다른 브랜치로 변경 사항을 Merge하자는 제안을 의미한다. 이는 변경 사항을 메인 코드베이스에 통합하기 전에, 협업자들이 제안된 내용을 검토할 수 있도록 해준다.
Git Branch 전략이란, Git을 사용하여 코드를 작성하고, 병합하고, 배포하는 과정을 관리하기 위해 사용되는 규칙 또는 가이드라인이다. 이를 통해, 여러 개발자들이 동시에 작업할 때 발생할 수 있는 병합 충돌(Merge Conflict)를 방지하고, 저장소를 체계적이고 오류 없이 관리할 수 있다.
Git Branch 전략에는 많이 사용되고 있는 여러 종류가 있는데, 각각의 특징과 장단점에 대해서 알아보고자 한다.
Master, Develop, Feature, Release, Hotfix 이렇게 5가지 Branch로 나누는 전략이다.
| 브랜치 유형 | 목적 | 특징 |
|---|---|---|
| Master | 제품 릴리스용 (항상 안정된 상태) | 메인 브랜치 (지속 유지) |
| Develop | 지속적인 개발용 | 메인 브랜치 (지속 유지) |
| Feature | 특정 기능 개발 | Develop에서 생성, 개발 완료 후 Develop으로 병합 (단기) |
| Release | 릴리스 준비 및 버그 수정 | Develop에서 생성, 릴리스 준비 후 Master와 Develop에 병합 (단기) |
| Hotfix | 운영 환경의 긴급 버그 수정 | Master에서 생성, 문제 해결 후 Master와 Develop에 병합 (단기) |
Master, Feature 이렇게 2가지 Branch로 나누는 전략이다.
| 브랜치 유형 | 목적 | 특징 |
|---|---|---|
| Master | 가장 안정적인 최신 코드 (항상 배포 가능한 상태) | 메인 브랜치 |
| Feature | 새 기능 구현 또는 버그 수정 | Master에서 생성, 완료 후 Master로 병합 |
Master, Develop, Feature, Release 이렇게 4가지 Branch로 나누는 전략이다.
| 브랜치 유형 | 목적 | 특징 |
|---|---|---|
| Master | 안정적인 릴리스 준비 코드 | 메인 운영 브랜치 |
| Develop | 새 기능 및 버그 수정 코드 | 신규 개발 통합 브랜치 |
| Feature | 새 기능 구현 또는 버그 수정 | Develop에서 생성, 완료 후 Develop으로 통합 |
| Release | 신규 릴리스를 위한 기능/버그 통합 | Develop에서 생성, 완료 후 Develop과 Master에 병합 |
Develop 간의 차이로 인해 병합 충돌 발생 가능Develop 브랜치에 병합이 필요다양한 브랜치 전략을 찾아본 결과, 팀의 규모 등의 특징에 따라서 적합한 브랜치 전략이 달라진다. 웹 개발자의 입장에서 봤을 때는, 웹 애플리케이션 특성 상 가장 최신의 버전 하나만을 사용자에게 제공하므로, 지속적인 CI/CD가 중요하고한다. 그렇기 때문에 Github Flow 전략이 가장 보편적으로 사용되는 것 같다.