Git Branching
1. 브랜치 전략 세우기
다양한 직업과 교육 배경을 가진 팀원들이 함께 일할 때, 워크플로우에 대한 상반된 접근법이 있을 수 있습니다. 혼란스러운 개발 경험을 막기 위해 리더는 단일 브랜치 전략을 파악하고 널리 소통해야 합니다. 브랜치 워크플로우를 결정하는 것은 팀 규모, 경험 수준, 확장 요구사항 및 업계 제한과 같은 몇 가지 요인에 따라 달라집니다. 팀들이 정해진 워크플로우를 따르기로 선택할 수도 있지만, 특정 요구에 따라 맞춤화된 워크플로우를 만들 수도 있습니다. 어떤 전략을 선택하든 팀에게 워크플로우를 전달하고 필요한 경우 교육을 제공하는 것이 중요합니다.
협업에 미치는 영향
모든 사람이 동일한 워크플로우에서 조화롭게 작업할 경우 코드를 덮어쓰거나 마스터를 손상시킬 위험이 줄어 듭니다. 게다가, 모든 사람들이 개발 및 배포 프로세스에 익숙하기 때문에, 팀원들은 서로의 작업에 쉽게 기여할 수 있습니다. 명확하고 간결한 브랜치 전략은 새로운 코드를 병합하고 프로젝트를 진전시키는 리듬을 설정한다. 이러한 적응감은 팀원들이 회의를 준비하고 마감일과 작업량을 관리하는 데 도움이 됩니다.
중앙 집중식 워크플로우
중앙 집중화된 워크플로우에서는 단일 저장소와 마스터 브랜치를 사용합니다. 팀들은 다른 브랜치를 개발용으로 사용하지 않기 때문에 변경사항을 덮어쓸 위험이 큽니다.
이러한 유형의 워크플로우에는 공동 작업 흐름이 없지만, 좋은 커뮤니케이션을 사용하는 소규모 팀(개발자 5명 미만)에서 잘 작동하여 두 개발자가 동일한 코드를 동시에 작업하려고 하지 않도록 할 수 있습니다.
Feature branching
Feature branching이란 추가해야 하는 각 기능에 대해 새 분기를 만드는 것을 의미합니다. 기능에 대해 작업을 수행해야 하는 모든 사용자는 기능 브랜치에 커밋합니다.
feature branch는 더 큰 코드 리뷰, 푸시 규칙, 코드 승인자, 더 광범위한 테스트 세트가 필요하기 때문에 다양한 팀을 연결합니다.
GitFlow
GitFlow는 Feature branch의 극단적인 버전입니다. GitFlow로 개발하면 마스터 브랜치와 별도의 개발 브랜치뿐만 아니라 Feature, Release, Hotfix를 지원하는 분기가 존재합니다. Develop 브랜치에서 개발되고, Release 브랜치로 이동하며, Master 브랜치로 병합됩니다.
feature branching과 마찬가지로 팀들을 연결합니다.
👍 GitLab Flow(Task-branch development) 👏
GitLab Flow는 이러한 개발 유형의 예로 기능 중심 개발 및 Feature 브랜치와 이슈 추적을 결합한 것이 특징입니다. GitLab Flow는 별도의 전용 브랜치를 사용하여 스테이징, 사전 프로덕션, 프로덕션과 같은 여러 환경을 프로비저닝하여 다운스트림 흐름을 커밋하여 모든 환경에서 모든 것이 테스트되었음을 보장합니다.
태스크 브랜치 개발은 팀원들이 요구사항을 작은 덩어리로 분해하고 태스크 브랜치를 통해 빠른 속도로 전달되도록 합니다. 이러한 유형의 워크플로우에는 코드 스니펫, 코드 리뷰 및 단위 테스트와 같은 협업 방식을 포함합니다. 게다가, 만약 테스트가 실패하면, 팀원들이 함께 작업하여 무엇이 잘못되었는지 확인할 수 있습니다.
2. 자주 그리고 작은 변경 사항을 만들어라
팀들은 이용 가능한 크고 거의 완성된 프로젝트가 있을 때에만 커밋할 수 있고, 완벽함이 배포의 전제조건이라고 믿습니다. 그러나, 더 작은 단계를 밟지 않고 더 단순한 기능을 제공함으로써, 팀은 잘못된 기능에 대한 작업을 하거나 잘못된 방향으로 가는 데 시간을 할애할 위험이 있습니다. 비즈니스 가치를 전달하고 고객의 요구를 충족시킬 목적으로 소프트웨어를 개발하는 가장 효과적인 방법은 작업 세트인 테스트와 코드가 있을 때마다 커밋하는 것입니다. 프로젝트를 작은 단계로 단순화하는 방법을 찾은 다음 더 큰 목표를 달성하기 위해 자주 커밋해야 합니다.
협업에 미치는 영향
잦은 커밋 문화는 모든 사람들이 코드 저장소를 볼 수 있기 때문에 팀 동료들이 어떤 작업을 하고 있는지 알 수 있도록 합니다. Feature 브랜치나 Merge Request로 작업을 공유하면 동료가 작업을 복제하는 것을 방지 할 수 있으므로 리뷰 준비가 되지 않은 경우에도 Feature 브랜치에 자주 푸쉬 해야 합니다. 완료되기 전에 작업을 공유하면 토론과 피드백을 쉽게 할 수 있으므로 리뷰 전에 코드를 개선하는 데 도움이 될 수 있습니다.
개별 커밋으로 작업을 세분화하면 나중에 코드를 리뷰할 개발자 및 기타 팀(예: 품질 및 보안)에게 컨텍스트가 제공됩니다. 더 작은 커밋은 기능이 어떻게 개발되었는지 명확하게 식별되어 특정 시점으로 쉽게 롤백하거나 관련 없는 여러 변경사항을 되돌리지 않고 하나의 코드 변경 사항을 되돌릴 수 있습니다.
3. 커밋 메시지 기술하기
커밋 메시지는 커밋의 내용만이 아니라 의도를 반영해야 한다. 커밋에서 변경 사항을 쉽게 볼 수 있기 때문에 커밋 메시지에는 변경된 이유를 설명해야 합니다.
팀 간의 일관성을 보장하고 혼란과 잘못된 의사소통을 줄이기 위해 커밋 메시지 규칙(commit message convention)을 설정하는 것이 중요합니다.
좋은 커밋 메시지의 예는 다음과 같다. "사용자 뷰에서 중복 코드를 줄이기 위해 템플릿 결합"
"변경(change)", "개선(improve)", "수정(fix)" 및 "리팩터(refactor)"라는 단어는 커밋 메시지에 많은 정보를 추가하지 않습니다.
예를 들어, "XML 생성 개선"은 "XML 생성 시 특수 문자는 적절히 이스케이프로 처리"로 작성하는 것이 좋습니다.