때때로, 좋은 게 너무 많아서 문제일 때도 있습니다. 소프트웨어 개발 워크플로우로 잘 알려진 Git Flow의 경우가 그렇습니다. Git Flow는 좋은 기능이 많지만, 역효과가 있을 때도 있습니다.
GitLab은 복잡성을 줄이고 개발 프로세스의 효율을 높 이고자 GitLab Flow를 개발했습니다. GitLab Flow는 Git 워크플로우에 이슈트래킹을 연동함으로써 프로세스를 단순화하고 혼란을 줄입니다. 지금부터 Git Flow의 문제점과 이를 해결하는 GitLab Flow를 알아봅니다.
Git Flow의 문제점
GitLab Flow가 해결하고자 하는 문제점을 살펴보면 GitLab Flow가 어떻게 동작하는지 이해하기 쉽습니다. Git Flow에서는 두 가지의 주요 포인트가 있는데, 두 가지 모두 불필요한 브랜치간의 변환 작업을 수반합니다.
Git Flow는 개발자가 마스터 브랜치보다 개발용 브랜치를 사용하도록 강제합니다. 그런데 많은 도구는 마스터 브랜치에 사용하는 것을 기본 (Default) 으로 하고 있어서 브랜치 간 변환 작업의 양이 아주 많아지게 됩니다. 또 다른 비효율은 hotfix를 브랜치에 업데이트하는 작업인데, 이 작업은 지속 배포 (Continuous Delivery) 구조를 갖춘 대부분의 조직들에게는 필요 없는 작업입니다.
GitLab은 위 문제를 간단하면서도 포괄적으로 해결하기 위해 GitLab Flow를 만들었습니다.
GitLab Flow : 단순화된 브랜치 전략
GitLab Flow는 기능 중심 개발 (feature-driven)과 이슈 트래킹 시스템에 연계되는 기능 개발 브랜치 (feature branch)를 합친 개념입니다. GitLab Flow는 Git 워크플로우와 이슈 트래킹 시스템을 연동 및 통합시킴으로써 단순하고 투명하며 효율적인 Git 작업을 가능하게 합니다.
GitLab Flow는 코드와 이슈 트래커의 연계를 더욱더 투명하게 보여줍니다. 이슈 트래킹 시스템으로부터 모든 코드 베이스 변화 업무가 시작됩니다. 코딩을 끝냈거나 코드에 대해 협의하고 싶다면 머지 리퀘스트 (merge request)를 열 수 있습니다. 코드가 준비되었다면 승인권자는 코드를 마스터 브랜치에 반영되도록 승인하고, 이는 추후 쉽게 확인할 수 있도록 기록이 남습니다. GitLab Flow를 사용함으로써 개발자 및 직원들은 마스터 브랜치를 운영용 브랜치에 반영시킴으로써 (merge) 새로운 버전의 코드를 배포할 수 있으며 어떤 코드가 운영 상태에 있는지 쉽게 구분할 수 있습니다. GitLab Flow에서는 커밋은 다운 스트림으로만 동작하므로 모든 환경에서 테스트 되었음을 알 수 있습니다.
GitLab Flow는 Git Flow에서 자주 있는 릴리즈, 태깅, 머지 (merge) 측면에서의 비효율성을 제거합니다.
GitLab Flow를 간단히 소개하면 아래와 같습니다.
- 모든 기능과 변경 점은 마스터 브랜치로 향함
- ‘운영용’ 브랜치와 ‘안정화된' 브랜치에는 이를 허용함
- 버그 픽스, 핫 픽스 패치들은 우선 마스터 브랜치에서 선별적으로 수용됨