icon안동민 개발노트

에셋의 버전 관리


 언리얼 엔진 프로젝트에서 에셋의 효과적인 버전 관리는 팀 협업과 프로젝트 안정성을 위해 필수적입니다.

 이 가이드에서는 에셋 버전 관리의 주요 개념과 실제 적용 방법을 상세히 살펴보겠습니다.

주요 버전 관리 시스템

 Git

  • 분산형 버전 관리 시스템
  • 장점 : 브랜칭과 머징이 용이, 오프라인 작업 가능
  • 단점 : 대용량 바이너리 파일 처리에 비효율적

 Perforce

  • 중앙 집중식 버전 관리 시스템
  • 장점 : 대용량 파일 처리에 효율적, 강력한 잠금 기능
  • 단점 : 서버 의존성, 초기 설정이 복잡

언리얼 엔진과 버전 관리 시스템 통합

 Git 설정

  1. Git LFS (Large File Storage) 설치
  2. .gitattributes 파일 설정
*.uasset filter=lfs diff=lfs merge=lfs -text
*.umap filter=lfs diff=lfs merge=lfs -text
  1. 언리얼 에디터에서 Git 설정
  • Edit > Project Settings > Plugins > Git

 Perforce 설정

  1. 언리얼 에디터에서 Perforce 설정
  • Edit > Project Settings > Plugins > Perforce
  1. 워크스페이스 매핑 설정
//depot/ProjectName/... //workspace/ProjectName/...

에셋 버전 관리 기본 개념과 워크플로우

 기본 개념

  • 체크아웃 : 에셋 수정을 위해 잠금 획득
  • 체크인(커밋) : 변경사항을 저장소에 반영
  • 브랜치 : 독립적인 개발 라인 생성
  • 머지 : 서로 다른 브랜치의 변경사항 통합

 일반적인 워크플로우

  1. 최신 버전 동기화 (Pull / Sync)
  2. 에셋 체크아웃
  3. 수정 작업
  4. 변경사항 검토
  5. 체크인(커밋) 및 설명 추가
  6. 변경사항 푸시(Git) 또는 서밋(Perforce)

대용량 바이너리 파일 관리 전략

 Git LFS 사용

  • 대용량 파일을 별도 저장소에 관리
  • .gitattributes 파일에 LFS 대상 지정
*.psd filter=lfs diff=lfs merge=lfs -text
*.tga filter=lfs diff=lfs merge=lfs -text

 Perforce 사용 시

  • 대용량 파일 자동 처리
  • 필요 시 파일 타입 지정*
p4 typemap
binary+w //depot/....tga
binary+w //depot/....psd

브랜치 관리

 Git Flow 모델

  • main : 안정된 릴리스 버전
  • develop : 개발 중인 버전
  • feature/* : 새로운 기능 개발
  • release/* : 릴리스 준비
  • hotfix/* : 긴급 버그 수정

 Perforce 스트림

  • main : 안정된 버전
  • dev : 개발 버전
  • feature : 기능별 스트림
  • release : 릴리스 준비 스트림

충돌 해결 방법

 텍스트 기반 파일 (예 : 블루프린트)

  1. 충돌 발생 시 수동 병합
  2. 언리얼 에디터의 diff 도구 활용

 바이너리 파일 (예 : 3D 모델, 텍스처)

  1. 최신 버전 다운로드
  2. 로컬 변경사항 백업
  3. 수동으로 변경사항 재적용
  4. 필요 시 아티스트 간 직접 협의

효과적인 협업을 위한 Best Practices

  1. 명확한 커밋 메시지 작성
[Asset Type] Brief description
 
- Detailed change 1
- Detailed change 2
  1. 정기적인 동기화 및 커밋
  2. 기능/에셋 단위로 브랜치 생성
  3. 코드 리뷰 및 에셋 리뷰 프로세스 도입
  4. 자동화된 테스트 및 빌드 시스템 구축

에셋 종류별 버전 관리 고려사항

 3D 모델

  • 원본 파일(.max, .mb)과 익스포트 파일(.fbx) 모두 관리
  • LOD 버전 별도 관리

 텍스처

  • 고해상도 원본과 게임용 최적화 버전 분리 관리
  • 텍스처 세트(Diffuse, Normal, Specular 등) 그룹화

 블루프린트

  • 텍스트 기반 병합 가능
  • 복잡한 로직의 경우 모듈화하여 충돌 최소화

 레벨

  • 하위 레벨로 분할하여 동시 작업 가능성 높이기
  • 라이팅 데이터는 별도 관리 고려

백업 및 복원 전략

 정기적 백업

  • 일일 증분 백업, 주간 전체 백업 설정
  • 오프사이트 백업 활용 (예 : 클라우드 스토리지)

 복원 프로세스

  1. 가장 최근의 안정적인 백업 식별
  2. 테스트 환경에서 복원 테스트
  3. 성공 시 실제 환경에 적용

 버전 관리 시스템을 활용한 백업

  • Git : 태그 기능을 활용한 중요 시점 마킹
git tag -a v1.0 -m "Release version 1.0"
  • Perforce : 레이블을 사용한 스냅샷 생성
p4 label -o MyProject_v1.0
p4 labelsync -l MyProject_v1.0

버전 관리가 프로젝트에 미치는 영향

 프로젝트 안정성

  • 변경사항 추적으로 버그 원인 파악 용이
  • 안정적인 버전으로의 롤백 가능
  • 병렬 개발을 통한 리스크 분산

 팀 생산성

  • 동시 작업 가능으로 개발 속도 향상
  • 명확한 변경 이력으로 커뮤니케이션 개선
  • 자동화된 워크플로우로 반복 작업 감소

 품질 관리

  • 코드 리뷰와 에셋 리뷰를 통한 품질 향상
  • 지속적 통합(CI)을 통한 빠른 피드백
  • 실험적 기능의 안전한 개발 환경 제공

 언리얼 엔진 프로젝트에서의 효과적인 에셋 버전 관리는 단순한 파일 관리를 넘어 전체 개발 프로세스의 효율성과 안정성을 좌우하는 핵심 요소입니다. 적절한 버전 관리 시스템의 선택과 올바른 사용은 팀 협업을 원활하게 하고, 프로젝트의 품질을 높이며, 개발 과정에서 발생할 수 있는 다양한 리스크를 줄여줍니다.

 특히 대규모 프로젝트에서는 체계적인 버전 관리가 더욱 중요합니다. 여러 팀원이 동시에 작업하는 환경에서 충돌을 최소화하고, 각자의 작업 내용을 효과적으로 통합하는 것은 프로젝트의 성공에 직접적인 영향을 미칩니다. 또한, 잘 구축된 버전 관리 시스템은 긴급 상황 발생 시 빠른 대응을 가능하게 하며, 프로젝트의 전체 히스토리를 추적할 수 있게 함으로써 장기적인 유지보수와 개선에도 큰 도움을 줍니다.

 마지막으로, 버전 관리는 기술적인 측면뿐만 아니라 팀 문화와도 밀접한 관련이 있습니다. 명확한 커밋 규칙, 코드 리뷰 프로세스, 브랜치 전략 등을 팀 전체가 일관되게 따르는 것은 효율적인 협업 문화를 형성하는 데 중요한 역할을 합니다. 이러한 체계적인 접근은 단기적인 프로젝트 진행뿐만 아니라 장기적인 팀의 성장과 프로젝트의 확장성을 보장하는 기반이 됩니다.