git branch 전략과 commit 방법은 이미 많은 레퍼런스가 존재합니다.
하지만 지금 내 환경에 적합한 전략을 선택하는 것은 조금 다른 이야기입니다.
이 글에서는 사이드 프로젝트를 진행하면서 내가 해본 선택 과정을 기록합니다.
배경
- github repository 에서 1인 백엔드 개발
- 프론트 개발은 별도의 repository 사용
- dev, prod 배포 환경 지원 필요
전략 선택 과정
1. 초기 전략
feature, dev, main 브랜치만 사용하는 약식 Git Flow 전략
- local 에서 feature 단위로 완성된 기능을 remote feature 브랜치에 머지합니다.
- remote feature 브랜치를 dev 에 머지합니다.
- qa 가 끝나면 main 브랜치에 머지합니다.
github issue 번호 기반으로 commit 기록
이 방법으로 commit 이 어떤 github issue 와 연결되었는지 직관적으로 알 수 있었습니다.
하지만 큰 내용도 아닌 것을 매번 github issue 를 작성하는 게 귀찮았습니다.
그리고 1인 개발이기 때문에 커밋 이상으로 이슈 트래킹 할 일은 없을 것 같았습니다.
2. commit 기록 방법 변경
feature, dev, main 브랜치만 사용하는 약식 Git Flow 전략
milestone 단위로 prefix 를 만들고, 중분류를 나누어 commit 기록
github issue 대신 노션 보드로 작업을 관리했습니다.
그리고 일정 기간 단위로 milestone 뭉쳤습니다.
하지만 dev 브랜치만으로는 프론트 qa 와 배포 관리가 힘든 상황이 생겼습니다.
qa 를 위한 브랜치가 한 개다 보니 qa 완료 기능과 아닌 기능을 분리하기 힘들었기 때문입니다.
3. release branch 도입
feature, dev, release, main 브랜치만 사용하는 약식 Git Flow 전략
- local 에서 feature 단위로 완성된 기능을 remote feature 브랜치에 머지합니다.
- remote feature 브랜치를 dev 에 머지합니다.
- qa 가 끝나면 versioning 후 release 브랜치에 머지합니다.
- 약속된 시간에 release 브랜치를 main 브랜치에 머지합니다.
milestone 단위로 prefix 를 만들고, 중분류를 나누어 commit 기록
하지만 feature 브랜치를 꼭 써야 되나?라는 생각이 들었습니다.
실무라면 특정 feature 만 테스트하거나 history, conflict 방지를 위해서라도 필요하지만, 1인 개발이다 보니 브랜치를 모두 컨트롤하는 게 어렵지 않았기 때문입니다.
4. feature branch 삭제
dev, release, main 브랜치만 사용하는 약식 Git Flow 전략
milestone 단위로 prefix 를 만들고, 중분류를 나누어 commit 기록
dev 브랜치에서 직접 개발을 진행하여 머지 회수를 줄였습니다.
마치며
사실 1인 개발이라면 이런 전략들을 덜 고민해도 됩니다.
conflict 가 발생하더라도 그 commit 이 무엇이었는지 다 내 머릿속에 있을 테니까요.
혹자는 실무라면 여러 사람이 같이 일하고 그라운드 룰이 있기 때문에 이런 약식 전략은 별 의미가 없다고 말할 수도 있습니다.
저는 오히려 반대라고 생각합니다.
- 실무라고 할지라도 특정 프로젝트는 소수의 인원으로 진행할 수 있습니다.
- 신규 프로젝트를 셋업 하는 데는 컨텍스트를 이해하는 소수의 인원이 진행하는 것이 더 효율적일 수 있습니다.
- 그라운드 룰이 있을지라도 각 스쿼드는 독립적인 전략을 사용할 수 있습니다.
저는 모든 것을 실무라는 생각으로 지금에 최소이면서도 확장 가능한 선택을 하려고 노력합니다.
그래야만 실무에서 문제를 만났을 때 그 경험을 활용하여 더 좋은 선택을 할 수 있기 때문입니다.
참고자료
- https://hyeon9mak.github.io/git-branch-strategy/
- https://yozm.wishket.com/magazine/detail/1558/
- https://tech.mfort.co.kr/blog/2022-08-05-trunk-based-development/
- https://udacity.github.io/git-styleguide/
'Series > 내가 해본' 카테고리의 다른 글
ErrorMessage를 관리하는 방법 (1) | 2022.06.15 |
---|---|
현재 환경에 맞는 값을 가져오기 with enum (0) | 2022.05.18 |
DB 값을 enum 으로 표현해보자 (0) | 2021.11.20 |
Elastic Beanstalk 구성 삽질기 - 글쑤시개 (0) | 2021.08.14 |
Slack Bot 으로 채널에 글쓰기 (0) | 2021.08.04 |