반응형
🎮 선택 의도
6인 팀 프로젝트의 코드 충돌을 예방하기 위해 '안전한' Fork-PR(Pull-Request) 전략을 채택했습니다.
선택한 워크플로우: Fork-PR
1. 각자 메인 저장소를 Fork
2. 개인 저장소에서 작업
3. 완료 후 Pull Request 생성
4. 리뷰어(관리자)가 코드 검토 후 Merge
🚨 문제 상황
- 관리자 병목 현상 초기 개발 단계에선 빠른 기능 추가가 필요한데, 관리자의 코드 리뷰가 '병목'이 되었습니다.
- Fork-PR: PR 생성 → 리뷰 대기 → Merge → 팀원 Pull
- 문제: 단순 Getter 함수 하나를 Merge하는 데 10분 이상 소요되어, 의존성이 있는 다른 팀원의 작업이 그대로 멈췄습니다.
- 진짜 문제는 .uasset 충돌 정작 .cpp/.h 코드 충돌은 클래스 단위 작업 분리로 인해 거의 없었습니다. 진짜 문제는 바이너리 파일인 .uasset(블루프린트, 레벨) 충돌이었습니다.
- 치명적 한계: uasset은 텍스트가 아니라 리뷰(Review)가 불가능했습니다.
- 사고 발생: 충돌 시 Git은 자동 병합을 못하고 "내 것" 아니면 "상대 것"을 선택해야만 했습니다. 이 과정에서 한쪽의 작업물이 그대로 유실(lost)되는 사고가 발생했습니다.
- 결국, Fork-PR은 잡지도 못할 uasset 충돌을 예방하지도 못하면서, 코드 리뷰로 인한 속도 저하만 유발했습니다.
🔧 해결 및 교훈
- 긴급 소통 채널 운영
- Discord에 "긴급 PR" 채널 생성
- 급한 PR은 여기 알림
- 관리자가 우선 처리
- uasset 충돌은 Git 기능이 아닌, 사람 간의 '소통'으로 해결했습니다.
- 사전 공지: BP_Ingredient처럼 공용 블루프린트 수정 전, Discord에 미리 공지.
- 수동 병합: 충돌 시, 양쪽 작업자가 구두로 변경 사항을 확인한 뒤, 한 명이 수동으로 두 변경 사항을 모두 재적용했습니다.
- 'git stash'의 발견 프로젝트 후반에 git stash라는 더 효율적인 방법을 알게 되었습니다.
# 현재 작업 임시 저장
git stash
# 최신 코드 가져오기
git pull origin main
# 작업 다시 꺼내기
git stash pop
# 충돌 나면 수동 해결
"이걸 일찍 알았더라면..."
Stash를 알았다면:
A: "기능 완료" → Push
B: 작업 중 → git stash → git pull → git stash pop
→ 충돌 있으면 해결 → 작업 계속
✅ 결과
워크플로우는 팀의 규모와 단계에 맞춰야 합니다.
Fork-PR은 코드 품질이 중요하고 리뷰 인력이 충분한 대규모/안정화 프로젝트에 적합합니다.
우리처럼 '빠른 프로토타이핑'이 중요한 소규모/초기 팀은, git stash 활용법을 익히고 '작업 전 소통'을 강화하는 Direct Push 방식이 훨씬 효율적이었을 것이라는 교훈을 얻었습니다.
반응형
'프로젝트 회고' 카테고리의 다른 글
| [UE5 액션] [리팩토링] CPU 성능 최적화: Tick 의존성 해소, 이벤트 기반(Event-Driven Architecture)으로의 전환 (0) | 2025.12.02 |
|---|---|
| [DirectX 11] Unity 리소스 메타데이터 파싱을 통한 스프라이트 시트 관리 (0) | 2025.12.02 |
| [Dedicated Server] 콜백(Callback) 체인을 활용한 데이터 무결성 확보 (0) | 2025.12.02 |
| [Dedicated Server] SeamlessTravel: 레벨 전환 시 데이터 유실 방지 (0) | 2025.12.02 |
| [Dedicated Server] 비동기 폴링 기반 서버 접속 시도 (0) | 2025.12.02 |
