토이 프로젝트를 시작하기 전에, branch 전략을 어찌할 지 고민하다가 정리를 해보기로 했다.
Git과 Github
1. Git과 Github
먼저, Git과 Github 를 혼용하여 썼던 적이 많아 용어 정리를 해보았다.
Git 은 2005년 Linus Torvalds가 만든 특정 오픈 소스 Version Control 시스템으로, 각 개발자에게 로컬에서 코드 변경의 전체 기록을 제공하는 분산 개발을 지원한다. 대부분의 Git 작업에는 로컬 파일과 리소스만 필요하며 일반적으로 네트워크의 다른 컴퓨터 정보가 필요없다. 또한, 개발자가 서로 다른 branch에서 동시에 작업하고 코드를 병합할 수 있게 한다.
Github 는 웹 기반 Git 리포지토리 호스팅 서비스로, 자체 기능을 추가할 뿐만 아니라 Git의 모든 분산 제어 및 소스 코드 관리(SCM) 기능을 제공한다. Git을 보다 사용자 친화적으로 만들고 개발자가 다른 사람과 코드를 공유할 수 있는 플랫폼을 제공한다.
2. Git 을 선택한 이유
형상관리 툴로 Git을 선택한 이유는, 각 파일에 대한 변경 사항 목록 대신 저장된 각 버전을 스냅샷으로 저장하기 때문이다.
이를 통해 예상치 못한 문제가 생겼을 때 롤백하여 빠르게 복원할 수 있게 된다.
또한, 시스템에 대한 기능 개발 중 급한 요청이 들어오게 되는 경우 Git은 아주 유용하다.
SVN 을 사용했을 때 나는 모든 코드를 원복해야 했지만 branch 전략에 따라 격리된 환경(branch)에서 기능 개발을 한다면 급한 요청은 master branch 로 전환하여 적용하면 된다.
정리하면 아래와 같다.
1. Git은 파일에 대한 변경 사항을 모두 기록하여 필요한 경우 특정 버전으로 되돌릴 수 있게 한다.
2. branch 별 작업이 가능하여 협업이 비교적 쉽고 작업이 유연해진다.
Git Flow
1. Git Flow 브랜치 종류
- main or master : 현재 출시된 버전 ( 운영과 동일 )
- develop : 다음 출시에 대해 추가된 모든 개발 변경 사항
- feature : 다음 출시의 새로운 기능 개발
- release : 이번에 출시하는 버전으로 테스트를 통해 검증
- hotfix : 현재 출시된 버전에서 버그 발생 시 코드 수정
2. Git Flow 개발 흐름
ⓐ main(master) branch 를 생성하고 main branch 에서 develop branch 를 생성한다.
ⓑ develop branch 에서 기능 별 feature branch 를 생성한다.
ⓒ 각 feature branch 에서 기능 개발을 마치면 모든 변경 사항을 develop branch 로 병합한다.
ⓓ 모든 충돌 사항을 해결하면 develop branch 에서 release branch를 생성하여 QA 에서 테스트를 진행한다.
ⓔ 문제가 발생하면 release branch 에서 수정하고 테스트가 끝나면 develop 과 main 로 병합한다.
3. Git Flow 장점 및 단점
여러 버전을 동시에 작업할 수 있고 여러 사람이 동일한 기능에 대해 작업할 수 있다.
또한, 각 릴리스에 태그가 지정되고 개별적으로 테스트되며 추적하기 쉽기 때문에 명확한 Version Control를 제공한다.
branch 별 책임과 규칙이 있기 때문에 지속적으로 배포해야하는 시스템에는 적합하지 않을 수 있다.
Github Flow
1. Github Flow 브랜치 종류
- main or master : 현재 출시된 버전 ( 운영과 동일 )
- feature : 새로운 기능 개발
2. Github Flow 개발 흐름
ⓐ main(master) branch 를 생성하고 main branch 에서 feature branch 를 생성한다.
ⓑ 각 기능별로 feature branch 에서 개발, 테스트 및 코드 검토를 한다.
ⓒ 테스트까지 완료되면 작업된 모든 변경 사항은 main branch 로 병합한다.
3. Github Flow 장점 및 단점
main branch 의 결함을 빠르게 감지하고 롤백과 같은 메커니즘을 통해 결함 코드를 신속하게 복원할 수 있다.
branch 관리가 비교적 간단하지만, 여러 개발자가 같이 작업해야하는 큰 기능에 적합하지 않을 수 있다.
정리
Git Flow branch 는 위에서 언급한 branch 말고도 다양하고 복잡한 규칙들을 가지고 있는 것 같다.
지금 당장은 개인 프로젝트로 젠킨스를 써볼 생각이기 때문에 Github Flow 브랜치 전략으로 가되 나중에 팀 프로젝트를 하게 되면 경험 삼아 Git Flow 전략으로 가보고도 싶다.
참고
https://www.geeksforgeeks.org/difference-between-git-and-github/
https://blog.hubspot.com/website/git-vs-github
https://kinsta.com/knowledgebase/what-is-github/
https://www.nobledesktop.com/blog/what-is-git-and-why-should-you-use-it
https://www.scaler.com/topics/git/git-flow-vs-github-flow/
https://www.alexhyett.com/git-flow-github-flow/
https://nvie.com/posts/a-successful-git-branching-model/
https://techblog.woowahan.com/2553/
https://www.alibabacloud.com/blog/how-to-select-a-git-branch-mode_597255