대용량 프로젝트를 위한 Git LFS(Large File Storage) 설정과 관리
3D 모델링 파일과 텍스처 등 무거운 에셋을 Git으로 관리할 때 발생하는 저장소 용량 문제를 해결하는 Git LFS 설정 방법.
Git의 한계와 LFS의 등장 배경
Git은 기본적으로 소스 코드와 같은 텍스트 파일의 버전 관리에 최적화되어 있습니다. 파일의 변경된 부분(Delta)만을 저장하여 효율적으로 히스토리를 관리하지만, 바이너리 파일(이미지, 오디오, 3D 모델, 비디오 등)은 조금만 수정되어도 파일 전체를 다시 저장해야 하는 특성이 있습니다. 게임 개발 프로젝트처럼 수백 메가바이트 단위의 에셋이 수천 개씩 포함된 경우, 일반적인 Git 저장소는 금방 수십 기가바이트로 불어나며 git clone이나 git pull 속도가 처참하게 느려지게 됩니다.
이러한 문제를 해결하기 위해 탄생한 것이 바로 Git LFS(Large File Storage)입니다. Git LFS는 대용량 파일 자체를 Git 저장소에 직접 커밋하는 대신, 파일의 실제 데이터는 원격의 별도 스토리지에 저장하고 Git 저장소에는 해당 파일을 가리키는 작은 '포인터 파일'만을 남깁니다.
Git LFS 설치 및 초기 설정
Git LFS를 사용하기 위해서는 먼저 로컬 환경에 LFS 확장 기능이 설치되어 있어야 합니다. 설치 후에는 프로젝트 디렉토리에서 한 번만 초기화 명령을 실행해주면 됩니다.
# Git LFS 설치 (Windows/macOS/Linux 공통)
git lfs install
# 특정 확장자를 LFS로 관리하도록 설정
git lfs track "*.psd"
git lfs track "*.fbx"
git lfs track "*.png"
git lfs track "*.mp4"
# 설정된 내용을 확인
git lfs track
.gitattributes의 중요성
git lfs track 명령어를 실행하면 프로젝트 루트에 .gitattributes 파일이 생성되거나 업데이트됩니다. 이 파일은 어떤 파일들이 LFS로 관리되어야 하는지 Git에게 알려주는 지침서 역할을 하므로, 반드시 Git 저장소에 포함되어야 합니다. 협업하는 다른 개발자들도 이 파일을 통해 동일한 LFS 설정을 공유하게 됩니다.
# .gitattributes 예시 내용
*.fbx filter=lfs diff=lfs merge=lfs -text
*.psd filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp3 filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
기존 저장소를 LFS로 마이그레이션하기
이미 프로젝트가 진행 중이고 대용량 파일들이 일반 Git 오브젝트로 커밋되어 있다면, 단순히 track 명령만으로는 저장소 용량이 줄어들지 않습니다. 과거의 히스토리까지 뒤져서 해당 파일들을 LFS로 변환해야 합니다. 이때 사용하는 명령어가 git lfs migrate입니다.
# 기존의 모든 .zip 파일을 LFS 히스토리로 재작성
git lfs migrate import --include="*.zip"
# 특정 브랜치만 마이그레이션
git lfs migrate import --include="*.fbx" --everything
주의: 마이그레이션은 커밋 히스토리를 강제로 재작성하므로, 팀원들과 상의 후에 진행해야 하며 반드시 백업을 해두어야 합니다.
LFS 관리 팁과 주의사항
Git LFS를 사용할 때 가장 흔히 겪는 문제는 대역폭 및 저장소 할당량입니다. GitHub이나 GitLab 같은 플랫폼은 무료 티어에서 제공하는 LFS 저장 공간과 다운로드 대역폭이 매우 제한적입니다. 프로젝트 규모가 커지면 추가 비용을 결제해야 할 수도 있습니다.
또한, LFS 파일을 커밋할 때는 .gitattributes가 제대로 설정되어 있는지 확인해야 합니다. 만약 실수로 .gitattributes를 수정하기 전에 대용량 파일을 커밋했다면, 해당 파일은 일반 Git 오브젝트로 저장되어 저장소 용량을 차지하게 됩니다.
효율적인 워크플로우를 위한 명령어
# LFS 오브젝트 상태 확인
git lfs status
# 현재 브랜치에서 필요한 LFS 파일만 명시적으로 다운로드
git lfs pull
# 로컬에서 사용하지 않는 오래된 LFS 데이터 삭제 (디스크 공간 확보)
git lfs prune
마무리하며
Git LFS는 현대적인 게임 개발과 데이터 중심 프로젝트에서 선택이 아닌 필수입니다. 초기 설정이 조금 번거로울 수 있지만, 한 번 구축해두면 쾌적한 개발 환경을 제공합니다. 특히 Unity나 Unreal Engine 프로젝트를 Git으로 관리하고자 한다면, 가장 먼저 Git LFS 설정을 검토해보시길 권장합니다.
심화 분석: 기술적 도전과 해결책
프로젝트의 성공은 기술력뿐만 아니라 팀 내 원활한 커뮤니케이션과 체계적인 파이프라인 구축에 달려 있습니다. 자동화된 빌드 시스템과 코드 리뷰 프로세스는 개발 속도를 비약적으로 높여줍니다. 1인 개발일지라도 스스로의 작업 규칙을 명확히 하는 것이 중요합니다.
기술적 구현의 디테일
저는 이번 개발 과정에서 모든 기능을 모듈화하여 독립적으로 테스트할 수 있는 환경을 구축했습니다. 이는 추후 기능 확장이나 버그 수정 시 발생할 수 있는 사이드 이펙트를 최소화하는 데 큰 역할을 했습니다. 또한 문서화를 병행하여 기술 부채가 쌓이는 것을 방지했습니다.
성능 벤치마크 및 최적화 지표
협업 툴 및 자동화 시스템 도입 이후 작업 히스토리 추적 시간이 50% 단축되었으며, 휴먼 에러로 인한 빌드 실패율이 눈에 띄게 줄어들었습니다. 이는 전체적인 개발 사이클을 20% 이상 단축시키는 결과를 가져왔습니다.
실무 적용 시 주의사항
완벽한 설계를 추구하기보다 빠르게 프로토타입을 만들고 피드백을 수용하는 애자일(Agile)한 자세가 특히 중요합니다. 기술에 매몰되기보다 유저가 실제로 느끼는 가치에 집중하는 균형 잡힌 시각을 유지하세요.