모락의 Git branch 전략
Git branch 전략을 도입한 이유?
프로젝트 이전까지는 혼자서 개발을 진행했기 때문에 하나의 branch에서 편하게 작업할 수 있었다.
모락 프로젝트에서 6명의 개발자가 함께 코드를 공유한다. 6명이 하나의 branch에서 작업을 진행한다면 매우 많은 conflict들이 발생했을 것이다. 따라서 우리는 6명이 동시에 여러 작업을 수월하게 수행하기 위해 Git branch 전략을 도입했다.
Git branch 전략 버전 1
다음 그림은 제일 처음으로 생각했던 branch 전략이다. 가장 간단하고 도입하기 쉬운 전략이다.
이 전략은 main branch와 feature branch 2개로 이루어진다.
main : 실제 서버에 배포되는 production 코드가 존재하는 branch
feature : 기능 개발을 위해 존재하는 branch
이 branch 전략에 대한 설명은 다음과 같다.
1. 개발자는 개발을 진행하기 위해 main branch에서 feature branch를 따온다.
2. feature branch에서 기능 개발을 마치면 main branch로 머지한다.
3. main branch에 머지된 내용을 서버에 배포한다.
정말 간단하고 쉽다.
하지만 우리 프로젝트 진행에는 적합하지 않은 점이 있었다.
개발자가 feature branch에서 기능을 개발하면 바로 main으로 머지가 된다. 이때 feature에서 개발한 내용이 서버에서 제대로 동작하는지에 대한 검증과정이 존재하지 않는다. 따라서 검증이 되지 않은 코드가 바로 배포가 되므로 질 낮은 서비스가 된다.
따라서 우리는 검증 과정을 포함할 수 있는 branch 전략을 도입해야 했다.
Git branch 전략 버전 2
이 전략에서는 develop branch가 추가되었다. 결론적으로는 이 전략을 이용하여 프로젝트를 진행했다.
develop : 기능 개발이 완료된 코드를 갖고 있는 branch
이 branch 전략에 대한 설명은 다음과 같다.
1. 개발자는 개발을 진행하기 위해 develop branch에서 feature branch를 따온다.
2. feature branch에서 기능 개발을 마치면 develop branch로 머지한다.
3. main branch에 배포하기 전, develop branch에서 개발된 내용이 올바른 지 검증한다.
4. 검증이 완료되면 devleop branch에서 main branch로 머지한다.
이 branch 전략에서는 develop branch에서 검증을 진행하므로, main branch에는 검증된 코드만이 존재할 수 있었다. 모락 프로젝트에서는 develop 서버를 추가적으로 생성하여, develop branch에 있는 코드를 직접 실행하며 검증해볼 수 있었다.
추가적으로 이 branch 전략에 hotfix branch도 추가했다.
develop branch에서 검증을 진행하고 main branch에 머지를 하였지만, main branch에서 예상치 못한 오류가 발생했던 상황들이 있었다. 이런 오류 해결은 기능 개발이 아니고, 빠르게 수정해서 main에 반영해야 했으므로 develop branch에서 진행하지 않고 hotfix branch에서 진행했다.
팀에 맞는 Git branch 전략 도입하기
팀에서 Git branch 전략을 직접 설계해보고 도입해본 경험을 통해 팀에 맞는 Git branch 전략을 세우는 것이 중요하다고 느꼈다. 팀에 맞지 않는 Git branch 전략을 세웠다면, 프로젝트 진행이 수월하지 않았을 것이다.
그렇다면 팀에 맞는 Git branch 전략은 어떻게 세워야 할까?
이번 프로젝트를 통해 branch의 필요성을 느껴야 좋은 branch 전략을 세울 수 있다고 생각이 들었다.
우리는 버전1에서 추가적인 branch의 필요성을 느꼈기 때문에 버전 2로 업그레이드할 수 있었다.
이때 우리는 우아한 형제들 기술 블로그에서 다음과 같은 사진을 참고할 수 있었다.
이 사진에서는 우리의 버전2 전략에 추가적으로 release branch가 존재한다.
이 release branch는 QA를 진행할 수 있는 branch이다.
우리는 회의를 진행해보며 이 branch 전략에 대해 고민을 해보았다.
고민 결과, 우리팀에는 release branch의 존재의 필요성을 느낄 수 없었다.
release branch에서 진행하는 QA를 develop branch에서도 진행할 수 있기 때문이다.
우리는 프로젝트 진행 과정에서도 release branch의 필요성을 못 느꼈고, 그 결과 버전 2 전략으로 끝까지 진행할 수 있었다.
이런 식으로 팀에 필요한 branch들을 팀 branch 전략에 추가하고 제거하는 과정을 거치다 보면 팀에 맞는 branch 전략을 세울 수 있다.
Git branch 전략 도입하고 느낀점
그동안 git을 코드 저장소로만 이용해왔지만, 여러 branch에 역할을 부여하여 사용해보고 git을 더 효율적으로 사용해볼 수 있었다. 또한 git을 더 다양하게 사용하다보니 git에 대해 더 깊숙이 알아갈 수 있었다.
여러 프로젝트에서 다양한 전략을 이용하면서 다양한 경험을 해봐야겠다.