
우테코 팀 프로젝트를 서로 다른 분야 프론트엔드-백엔드 또는 안드로이드-백엔드 가 한 팀이 되어 하나의 Github Repository 에서 작업을 같이 하게 됩니다.
저희 팀 펭쿡 은 안드로이드 3명, 백엔드 5명으로 구성되어있었는데요, 안드로이드 1명과 백엔드 1명이 서로 머리를 맞대어 브랜칭 전략을 담당하여 몇 시간 회의를 끝으로 결론을 짖고 팀에게 알려주기로 하였습니다.
최종적으로 성공하여 아래와 같이 깔끔한 브랜치 그래프를 그릴 수 있게 되었고 모두 팀원들이 잘 작업을 해주고 있다는 증거입니다!

팀원들이 믿고 맞겨주었기에 둘이서 한 컴퓨터로 작업을 시작하였습니다.
main 브랜치 폴더 분리폴더를 유지하기 위해 .gitkeep 이라는 빈 파일을 만들고 README.md 를 우선 전부 지우고 업로드 하였습니다.

prod 및 dev 파생이제 main 에서 각 파트별로 브랜치를 분리하게 될텐데 여기서 추후에 있을 CI/CD 작업을 위해 prod(production) 와 dev(develop) 브랜치가 각각 있어야 한다고 판단하여 아래와 같이 분리되었습니다.
mainan/prodan/devbe/prodbe/devmain 브랜치를 기준으로 an/prod 와 be/prod 를 각각 만들어주었고prod 브랜치에서 dev 브랜치도 만들었습니다.아래는 CI/CD 가 용어가 나와 간략하게 정리한 것으로 추후에 나올 글에서 더욱 자세히 기술하게 되니 모두를 이해하려 하실 필요는 없습니다.
CI (Continuous Integration)
각 팀원이 자신의 코드를 개발 서버에 적용하기 위해
be/dev브랜치로Pull Request를 보내게 될텐데 목표 브랜치로 오려는 기반 브랜치be/feat/00에서 빌드와 테스트를 수행하여 잘 문제가 없는지 점검한 후 코드를 안전하게 병합하기 위한 사전 작업입니다.
CD (Continuous Deployment)
be/dev또는be/prod로 새로운 커밋(Push가 아닌 Pull Request의 병합) 이 발생할 때 개발서버 또는 실제서버로 배포를 자동화 하는 작업입니다.
be/ 의 의미be/dev 와 같이 중간에 / 를 준 이유는 Intellij 와 같은 IDEA 에서 편리하게 보기 위함입니다.
보통 - 로 하는 경우도 많은데 / 로 하게 되면 폴더로 정리가 알아서 됩니다.

그러면 자신이 열어 볼 필요가 없어지는 다른 파트의 브랜치 폴더를 닫고 작업을 할 수도 있게 됩니다.
또한 최상위를 be 나 an 으로 둔 이유 또한 최상위를 분야로 구분함으로써 서로의 브랜치를 볼 필요가 없어지게 되는 것이죠!
팀원에게 앞으로 Git 이렇게 사용해주세요 알리는 것은 굉장히 중요하고 큰 문제입니다.
저희는 대부분 Git 에 대한 두려움이 크기 때문에 따로 시간을 내어 다 함께 연습용 리포지토리에서 깃 연습을 해보았습니다.
main prod dev 만들기dev 를 기반으로 번호 하나씩 선택하여 feat/1 feat/2 등 만들기README.md 에 서로 다른 내용을 적거나 수정하는 랜덤한 작업 해보기 (모두가 병렬로 작업하는 부분)feat/1 브랜치에서 dev 브랜치로 Pull Request 작성하기여기까지 모두 작성하였다면 PR 에서는 문제 없이 다 Merge가 가능하고 Conflict 가 없다고 할것입니다.
feat/1 을 가서 Rebase and Merge 를 누릅니다!
만약 Create a merge commit를 한다면...
모든 커밋들이 다른 줄로 기록되고 기존
feat브랜치를 지워도 아래처럼 그래프가 유지되어 가시성이 확 떨어질 것입니다.
또한 Pull Request 를 Rebase and Merge 하게 되면 커밋들이 dev 로 합쳐진 커밋들 위해 자신의 작업들이 올라가게 됩니다. (이전 날짜의 작업임에도 불구하고)

feat/2 에 대한 Pull Request 를 가면 Conflict가 나거나 회색으로 Rebase and Merge 가 작동이 불가능한 것을 보실 수 있을겁니다.여기서 커밋들 유지하고 싶은 욕심과 브랜치를 깔끔하게 만들고 싶은 욕심으로 인해 한가지 트릭이 들어가게 됩니다.
feat/2 브랜치에서 dev 브랜치를 git pull git rebase 하여 Conflict 난 것을 해결하거나 그냥 합치게 됩니다.git push -f 로 강제 푸시를 하여 오리인의 피쳐 브랜치 커밋들을 재정렬 해주는 겁니다...!CI 가 빌드와 테스트를 하여 검증을 해줄 것이기에 이런 선택을 하게 되었습니다.
feat/2 브랜치에 대한 Pull Request 에서 Rebase and Merge 를 한다.
나머지 팀원들도 6부터 작업 반복
feat 브랜치기능 구현을 하거나 버그를 픽스할 때 항상 Github Issue 를 먼저 생성하자는 팀 컨벤션이 있습니다.
62 번 이슈에 대해서는 be/feat/62 와 같이 브랜치를 생성해 작업한 후 be/dev 로 Pull Request 를 보내도록 정하였습니다.

이로써 각 팀원이 각자의 브랜치에서 개발을 하고 코드를 하나로 합치는 것을 완료할 수 있었습니다.
팀 프로젝트에서 이렇게 브랜칭을 나누어 잘 다루어 보는 것도 처음이었기에 많이 두렵고 걱정되었지만 결과적으로 현재 브랜치 그래프도 너무 안정적인 직선이고 기능 구현 및 코드 합치기도 잘되고 있어 정말 만족스럽습니다.
사전에 연습은 했음에도 불구하고 실수를 어쩔 수 없이 생기기 마련이었습니다.
mainan/prodan/devan/feat/1 1번 이슈에 대한 기능 개발an/feat/4 4번 이슈에 대한 문서 작성be/prod 실제 서버로 배포be/dev 개발 서버로 배포be/feat/2 2번 이슈에 대한 기능 개발be/feat/3 3번 이슈에 대한 버그 수정브랜치 main 혹은 an/prod 어느 곳에서 앱 배포 할지에 대해서는 조금 더 상의를 해볼 것 같습니다.
main 에 모든 코드를 합치고 Github Release Tag 도 붙이고 배포도 할지main 은 단순 README, an/prod 에 따라 배포 할지브랜치 가지가 잘못 엇나가 영영 사라지지 않고 따라 다니는 것을 두려워 하지 말자 라고 생각했습니다.
그 이후로 팀원들 모두 도전해보게 되었고 실수나 충돌이 생기면 같이 해결해 나감으로써 실전으로 Git 공부를 할 수 있었습니다.
추후 Issue Automation 작업을 통해 이슈를 생성하면 브랜치를 자동으로 생성하는 Workflow 를 제작할 예정입니다.