Branch 전략이란 프로젝트 진행 시 효율적인 버전 관리를 위해 사용하는 일종의 워크플로우(work-flow)이다.
프로젝트를 진행하며 기능 추가, 기능 테스트 등을 진행하면서 예기치 못한 버그가 발생할 수 있다. 그 과정에서 버그를 찾아 수정하고 최종적으로는 완성된 프로젝트를 배포하게 될 것이다.
이렇게 프로젝트를 진행해 나갈 때에 목적에 맞는 브랜치 사용, 유지보수를 위한 브랜치 효율 관리, 롤백을 위한 전략 등 프로젝트를 효율적으로 관리하기 위해 고안된 것이 Branch 전략이다.
효율적인 프로젝트 진행을 위해 사용하는 Branch 전략에는 대표적으로 아래의 것들이 있다.
Git-flow는 대표적인 branch 전략 중 하나로 대규모 프로젝트에서 사용할 때 큰 장점을 보인다. feature, develop, release, main(master), hotfix 브랜치로 이루어진 전략이다.

feature 브랜치는 develop 브랜치에서 생성되고 기능을 구현할 때 생성하는 기능 단위의 브랜치이다. 생성한 브랜치에서 기능 구현을 완료하였을 경우 develop 브랜치로 기능을 더해 나간다. 일반적으로
feature/기능과 같은 이름을 붙인다.
feature/add브랜치를 생성하고 아래와 같이 2개의 수를 더해주는 코드가 아래와 같다. 이렇게 한 기능을 구현한 뒤, develop 브랜치에 기능을 더해 나간다. 예를 들면, 빼기나 곱하기, 나누기 등의 기능을 추가할 때마다 push를 하는 것이다.//calculator.js function add(a,b){ return a+b; }
develop 브랜치는 feature 브랜치에서 구현된 기능이 모여 브랜치들의 기둥 역할을 하는 브랜치이다. 일반적으로
develop과 같은 이름을 붙인다.//calculator.js function add(a,b){ return a+b; } function sub(a,b){ return a-b; } function mul(a,b){ return a*b; } function div(a,b){ return a/b; }협업을 진행하는 팀원들이 사칙연산의 각 기능들을 구현하고 develop 브랜치로 구현한 기능들을 더하면, 위의 코드처럼 합쳐진다.
release 브랜치는 develop 브랜치에서 생성되며, 실제 배포 전 테스트를 하거나 버그 확인을 하기 위한 브랜치이다. develop 브랜치에서 계획했던 기능의 구현이 완료되었을 때, 기능 테스트 및 버그 확인을 위해 생성한다. 일반적으로
release-1과 같은 이름을 붙인다.//calculator.js function add(a,b){ if(typeof a !== "number" || typeof b !== "number"){ return "숫자만 입력해주세요." } return a+b; } function sub(a,b){...} function mul(a,b){...} function div(a,b){...}위와 같이 사칙연산의 기능을 가진 서비스를 만들었다. release 브랜치에서 테스트하던 중 숫자를 입력하지 않았을 경우에도 계산기가 수행이 되는 버그를 확인하게 되었다고 가정해 보자. 이 경우, 기능을 수정한 후에 develop 브랜치로 merge 하고 다시 기존의 release 브랜치에서 배포 전 테스트 및 버그 확인을 진행한다.
main 브랜치는 release 브랜치에서 생성되며 실제 배포되는 소스의 브랜치이다.
hotfix는 main 브랜치를 통해 배포가 진행되었는데 문제가 발생한 경우 생성하는 브랜치이다. main 브랜치를 통해 생성되며 문제가 해결된 이후 main 브랜치와 develop 브랜치로 merge 된다. 일반적으로
hotfix-1과 같은 이름을 붙인다.
앞서 알아본 Git-flow는 대규모 프로젝트에서 사용할 경우 관리가 용이하다는 장점이 있다. 하지만 그만큼 많은 브랜치를 관리해야 한다는 복잡함도 있다. Github-flow는 이런 Git-flow의 단점을 해결할 수 있는 branch 전략이다. Github-flow는 main(master), (branch) 브랜치로 이루어져 있다. Github-flow 전략은 main 브랜치를 통해 모든 브랜치가 생성되고 생성된 브랜치 이름을 통하여 기능 구현이나 버그 수정 등의 생성 목적을 명시한다.

main 브랜치는 배포를 위한 브랜치이며, 전략의 중심이 되는 브랜치이다.
(branch)는 main 브랜치를 통해 생성된다. 기존 Git-flow와는 다르게 명시적인 브랜치의 역할이 없는 main(master) 브랜치 이외의 브랜치이다. 기능 구현(feature)이나 버그 해결(hotfix) 등의 브랜치 목적을 이름에 명시해주어야 한다.
이 외에도 gitlab-flow를 비롯한 다양한 전략이 있고 전략에는 정답이 없다. 따라서 각 브랜치들의 전략을 잘 이해하고 현재 진행하는 프로젝트의 상황에 따라 효율적인 브랜치 전략을 수립하는 것이 중요하다.
참고: