Git, 개발의 필수 툴이다. 그러나 초보 개발자들에게 Git을 어떻게 쓰고 있는지를 물어보면, 의외로 (?) commit
- push
- pull
만 치는, 마치 Google Cloud 처럼 사용하는 경우가 많을 것이다.
이번에 GanOverflow 프로젝트를 팀 단위로 작업하며 Git 규칙을 보다 본격적으로 정리할 필요가 있었다. Github Actions와 Docker, Vercel과 Github의 main 브랜치를 묶어서 CI/CD 및 배포 툴을 자동화해서 사용한 것도 이유였지만, 팀단위 작업을 한다는게 컸다.
(대충 그것이 Git을 사용하는 이유니까.. 끄덕짤)
오프라인 미팅을 매일 할 수 있었던것도 아니고, 프런트 - 백엔드를 나눠서 작업한 것도 아니었기 때문에 (모두가 풀스택!), 확실한 작업 규칙이 필요했던 것!
이런 저런 방법론을 찾던 중, Git flow 전략과 Github Flow 전략, Trunk 전략을 찾았다. 우리는 Git flow 를 기반으로 하되, 이 프로젝트의 특성에 맞게 몇가지 개조를 거쳐 작업 규칙을 정했다.
Git flow를 설명하는 글에는 빠지지 않는 그림! 설명하자면,
feature/pagination
, feature/sign-in
과 같이 구현하고자 하는 기능 단위로 브랜치를 생성하고, 완성되면 develop으로 merge 한다.가장 잘 알려져 있고, 많은 팀에서 적용한 전략이다. 처음에 이해하기 까다로울 수 있지만,
(음.. 사실 동의 못한다. 그림만 봐서는 어려울 수 있어도 직접 해보면 체득이 빠르다고 생각함)
의외로 팀 단위 작업에서 자동화 CI/CD가 있을 때 잘 안어울리는 경우가 있는 것으로 보인다.
위 그림에서 빠져있는 것이 바로 코드 리뷰 과정 이기 때문이다. 자동화된 배포가 구축돼있다면 master (혹은 release) 브랜치로 머지되는 순간 배포되는 것이다! 리뷰 과정이 없으면 제대로된 형상 관리가 된다고 할 수 있을까?
그래서 각광받았던 것이 이 전략이라고 한다.
꽤 복잡한 작업규칙이 있는데, 요는 이렇다
자동화 배포, 팀작업에 가장 적합하지만, 그래도 feature 브랜치나 develop 브랜치, hotfix 브랜치를 사용하는 점이 없으면 아쉽다. 너무 간단하다는 점이 장점이자 단점.
그래서 두 전략을 적절히 합쳐서 적용했다.
main
브랜치를 자동 배포 브랜치로 설정했다. (NestJS : 도커+Github Actions, NextJS : Vercel을 물려놓음) main
으로 merge할 때는 항상 dev
에서만 PR을 날려서 수행한다 ! ex. PR : dev
→ main
. 다른 브랜치에서는 절~~~대로 직접 merge 하거나 PR 날리지 않는다.dev
브랜치가 사실상 Git Flow 전략에서의 develop 역할이지만, main 역할처럼 사용! 태그까지는 못달았지만,, 언제나 배포 가능하게끔 관리했다. 역시나 dev
merge 시 무조건 PR을 날려서 코드리뷰를 거쳐야 한다. 코드가 복잡해서 이해가 안될 때 오프라인 미팅을 거치기도 했음 (ㅋㅋ)feature
, hotfix
, chore
등등 새로운 브랜치를 생성하고 머지하는 기준이 바로 dev
이고, hotfix
의 소소한 변동사항이 아니라면 절대 직접 merge하지 않고 PR을 통해 코드리뷰를 거친다는 점이다.feature
브랜치 : 기능 단위로 생성, PR을 통해 dev
로 merge. 기능 단위로 feat-pagination
과 같은 브랜치를 판 뒤에 작업한 뒤 dev
로 PR. 사실상 feature
라는 이름을 가진 브랜치는 없다! 기능 브랜치들의 집합을 일컬은 것.hotfix
브랜치 : feature
와 달리, 핫픽스 하나마다 브랜치를 새로 파지는 않았고, hotfix
브랜치를 항상 dev
와 동기화하도록 노력해서 한줄씩 간단한 수정할 때 사용했다. main
으로 머지하지 않는것을 주의해야 함. main
은 항상 LTS (Long Term Support) 버전처럼 관리했다.chore
브랜치도 사용했다. .gitignore
파일을 수정하거나 docker.compose
같이 코드 로직은 아닌데.. 기능도 아니고 핫픽스도 아닌 애매한 경우에 이 브랜치를 사용했다. 용례는 hotfix
와 비슷함.
잘 봤습니다. 좋은 글 감사합니다.