티스토리 뷰
Git Branch 전략이 필요하게 느껴진 계기 💦
인텔리제이에서 GitLab을 연동해서 사용 중이었으며,
개발자들이 늘어남에 따라 브랜치에 commit 하는 기록들이 쌓여 관리가 어려워졌으며, 이렇다 보니 긴급 운영 배포 건이 있을 경우 혼잡해지기 시작
현재 팀에서는
dev : 개발용
staging : 운영 DB를 바라보는 운영 반영 전 테스트 확인용(release 와 비슷한 용도)
prod : 배포용
위와 같이 목적에 맞게 해당 Branch들은 Default로 해놓고 사용 중
dev → staging → prod 로 merge 해서 올리는 방식으로 사용
예시 ❗
1. 2024년 11월 30일 운영 배포 건
2. 2024년 12월 3일 운영 배포 건
dev로 이미 위의 해당 건들이 commit & push가 되어 있는 상황...
2가지 모두가 올라가면 prod에 반영이 되면 안되는 상황에서
1번 건만 staging에 Cherry-pick 을 통해 commit 진행 후 staging 테스트 진행 후 이상이 없으면 staging에서 prod로 merge하여 운영 배포 진행
Cherry-pick ❓
1. 특정 기능/수정만 가져오기: 다른 브랜치에 있는 특정 수정 사항(예: 버그 픽스)을 현재 브랜치에 반영하고 싶을 때
2. 긴급 수정: 프로덕션 환경에서 필요한 특정 패치만 빠르게 가져올 때
3. 테스트: 특정 커밋만 별도로 테스트하고자 할 때
하지만, Cherry-pick을 무분별하게 사용하다 보니 문제점을 마주하게 되는데...! 😥
1. 충돌(Conflict): dev에서 staging으로 올릴 때 staging에 이미 cherry-pick한 건이 있다면 이 건에 대한 충돌이 발생
2. 중복 적용: 동일한 커밋이 이미 병합된 상태라면, 중복 적용으로 인해 문제 발생으로 결국, 충돌까지 일어나게 되는 현상
3. 기록 관리: cherry-pick은 커밋의 복사본을 새로 생성하기 때문에, 커밋 로그가 중복으로 생성 및 복잡
이러한 문제를 더 이상 겪고 싶지 않았고 git을 최대한 전략적으로 관리해보기 위해 Git Branch 전략을 도입하기로 결정 ‼ 🤗
팀에 맞는 브랜치 전략 선택 고민 그리고 결정
팀원들과 함께 Git Branch 전략 중 어떠한 전략을 기반으로 가져올지 많은 고민을 했는데 최종적으로 Git Branch 전략을 도입하기로 했다.
dev : 개발 DB 바라보는 개발 브랜치 (배포할 것 개발)
staging : 운영 DB 바라보는 개발 브랜치
prod : 운영 브랜치 (배포 가능한 상태)
main-feature : 기능 개발 브랜치를 merge한 브랜치, dev로 merge할 브랜치
hotfix : 운영 반영된 기능 중 버그/오류 수정을 위한 브랜치 디렉토리
feature-기능명 : 신규 기능 개발을 위한 브랜치
(hotfix인 경우 디렉토리 구조, feature인 경우 기능명 –로 연결해서 브랜치 생성)
GitLab Merge Request 기반으로 한 관리 도입
MR단위의 코드리뷰도 함께 도입하여 진행하였고 이는 강제성 없이 자율적으로 코드리뷰를 받고 싶은 리뷰어를 지정할 수 있게끔 하였다.
대신 승인자는 본인 기준 선임으로 진행하고 운영으로 MR을 보내는 것은 팀장님을 승인자로 두고 진행.
리뷰어는 코드 리뷰를 자유롭게 진행할 수 있으며 코멘트 룰을 적용하여 코멘트를 달 수 있게끔 규칙을 만들어서 적용시켰다.
전반적인 흐름은 아래와 같이 진행되고 있다.
[ Merge request reviewer comment rules ]
P1: 꼭 반영해 주세요 (Request changes)
P2: 적극적으로 고려해 주세요 (Request changes)
P3: 웬만하면 반영해 주세요 (Comment)
P4: 반영해도 좋고 넘어가도 좋습니다 (Approve)
P5: 그냥 사소한 의견입니다 (Approve)
효과 👏
1) 효율성
- MR 작성으로 어떠한 개발 건인지 한 눈에 확인 가능하며 관리가 용이해짐
- branch merge를 MR을 승인을 통해 가능하게함으로써 무분별한 merge 제한, merge 충돌 발생 가능성이 감소함
2) 코드 품질 향상
- MR을 통해 코드리뷰가 가능해짐으로써 버그 및 실수를 사전에 방지 할 수 있고 코드의 일관성 보장
- 서로 피드백을 해주는 과정 속에 더 나은 코드를 만들 수 있고 협업하는데 좋은 동기 부여가 생김
3) 협업 강화
- 모두가 자유롭게 리뷰를 할 수 있는 공간이 마련되면서 한 모듈만 맡아 진행하고 있던 개발자가 다른 모듈의 개발을 파악하고 이해하기 쉬워짐
- 모든 팀원이 합의된 기준과 리뷰를 거쳐 코드가 병합되므로, 코드베이스의 신뢰도와 안정성이 보장됨
느낀점 💭
팀원들과 회의 끝에 Git Branch 전략과 함께 MR 단위의 코드리뷰 방식을 도입하게 되면서 (도입 시점 2024년 11월 말)
스스로 발전하기에 제한적이었던 환경 내에서 협업을 통해 나아가는 계기가 되었고 한 층 더 성장할 수 있는 계기가 되었다.
아직까지는 적응하고 익숙해지느라 다소 느리지만 이 프로세스를 잘 유지 중이며,
자사 git 관련 가이드 또한 계속 develop하여 완성도 있는 가이드를 만들어 유지하는 것이 목표다 :)
'Git' 카테고리의 다른 글
실무에서 간단하게 Gitlab Merge Request 템플릿 적용하여 관리하기 (0) | 2025.03.26 |
---|---|
간단하게 git bash 를 통해 최초 설정 및 레퍼지토리 생성 후 올리기 (0) | 2024.03.04 |
- Total
- Today
- Yesterday
- 데이터베이스락
- gitlab_merge_request_templates
- redis특징
- SpringDataJpa
- querydsl
- db락
- MVC패턴구조
- 블로킹
- MVC패턴특징
- 비관적락
- git #git_branch_전략 #gitlab_mr
- github사용법
- redis
- 데드락
- 이미지맵
- JPQL
- 동시성이슈해결방안
- 반응형이미지맵
- 동시성이슈
- gitlab
- mybatis
- redisson적용
- MVC패턴정의
- 낙관적락
- Redisson
- GitHub
- MVC패턴
- redisson분산락
- imgmap
- gitlab_mr_templates
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |