[DAY45] Project Management with Git LFS

베리투스·2025년 10월 14일

TIL: Today I Learned

목록 보기
46/93

언리얼 엔진으로 팀 프로젝트를 진행하다 보면 Git의 용량 제한이라는 큰 벽에 부딪히게 된다. 특히 무료 버전의 GitHub는 100MB 이상의 파일을 올릴 수 없고, 월별로 제공되는 스토리지와 대역폭(Bandwidth)도 넉넉하지 않다. 이번 학습에서는 .gitignore로 불필요한 파일을 제외하고, Git LFS(Large File Storage)로 대용량 파일을 관리하며, 영리한 clone 전략으로 대역폭을 아끼는 방법을 정리했다. 이 방법들을 통해 팀원들과 원활하게 언리얼 프로젝트를 협업하는 것이 가능해졌다.


📌 목표

  • GitHub 무료 버전의 파일 크기, 스토리지, 대역폭 제한 이해하기
  • .gitignore 파일을 사용해 불필요한 언리얼 엔진 파일을 버전 관리에서 제외하기
  • Git LFS를 설정하고, .uasset 같은 대용량 파일을 효과적으로 관리하기
  • clone 대신 클라우드와 fetch를 활용하여 팀의 GitHub 대역폭 소모를 최소화하기

📖 이론

1. GitHub의 용량 제한 😥

언리얼 프로젝트는 텍스처, 모델, 레벨 파일 등 대용량 애셋이 매우 많다. 하지만 GitHub 무료 버전은 다음과 같은 제한이 있다.

  • 파일 크기 제한: 50MB 초과 시 경고, 100MB 초과 시 업로드(push) 차단.
  • 스토리지 제한: 계정당 10GB.
  • 대역폭(Bandwidth) 제한: 월별 10GB. (데이터를 다운로드하거나 업로드할 때 소모)

7명의 팀원이 20GB짜리 프로젝트를 한 번씩만 clone 받아도 20GB * 7 = 140GB의 대역폭이 소모되어 월별 제공량을 아득히 초과하게 된다. 이 문제를 해결해야만 협업이 가능하다.

2. 첫 번째 방어선: .gitignore

.gitignore는 Git이 특정 파일이나 폴더를 추적하지 않도록 설정하는 파일이다. 언리얼 프로젝트의 Binaries, Intermediate, Saved 폴더 등은 각자의 컴퓨터에서 자동으로 생성되는 파일들이므로 버전 관리에 포함할 필요가 없다. 이들을 .gitignore에 등록하면 저장소 용량을 크게 절약하고 충돌 가능성을 줄일 수 있다.

3. 대용량 파일 해결사: Git LFS (Large File Storage) 💡

.uasset 파일처럼 버전 관리는 해야 하지만 100MB를 훌쩍 넘는 파일들이 문제였다. Git LFS는 이런 대용량 파일의 원본을 별도의 LFS 서버에 저장하고, Git 저장소에는 그 파일을 가리키는 작은 포인터(pointer) 파일만 남기는 방식으로 동작한다.

# Git LFS 설치 (최초 1회)
git lfs install

# 특정 확장자(.uasset)를 가진 모든 파일을 LFS로 추적
git lfs track "*.uasset"

이렇게 하면 Git은 100MB 제한에 걸리지 않고 대용량 파일을 처리할 수 있게 된다.

4. 대역폭 절약 전략: 클라우드 + fetch/pull ☁️

모든 팀원이 clone을 실행하는 것은 대역폭 낭비가 심하다. 이를 해결하기 위해 우리 팀은 다음과 같은 전략을 사용했다.

  1. 팀장(혹은 Git 관리자) 1명이 최초 프로젝트를 생성하고 모든 대용량 애셋을 LFS로 push한다.
  2. 작업이 완료된 로컬 저장소 폴더(.git 폴더 포함)를 통째로 압축하여 구글 드라이브 같은 무료 클라우드에 올린다.
  3. 팀원들은 클라우드에서 이 압축 파일을 다운로드하여 압축을 푼다.
  4. 이후의 모든 업데이트는 git fetchgit pull 명령어로 주고받는다.

이 방법을 사용하면 대용량 애셋 파일은 클라우드를 통해 딱 한 번만 받고, 이후에는 변경된 코드나 작은 파일들만 Git을 통해 주고받으므로 대역폭을 극적으로 아낄 수 있다.


⚠️ 실수

  • .gitignore.txt 라는 이름: .gitignore 파일을 만들 때, 윈도우에서 기본적으로 파일 확장자가 숨겨져 있어 나도 모르게 .gitignore.txt로 만드는 실수를 했다. 반드시 파일 확장자 보기를 활성화하고, 확장자 없이 .gitignore로 만들어야 한다.
  • 이미 올라간 파일 무시하기: 이미 원격 저장소(remote)에 올라간 파일은 나중에 .gitignore에 추가해도 소용이 없다. 원격 저장소에서 해당 파일을 삭제하고 .gitignore를 적용한 뒤 다시 커밋해야 해서 매우 번거로웠다. 프로젝트 시작 시점에 .gitignore를 설정하는 것이 가장 중요하다.
  • 커밋 쌓아두기 (멘토스 + 콜라) 💣: 초반에 작업 내용이 완벽하지 않다는 생각에 커밋을 미루고 로컬에 10개 이상 쌓아둔 적이 있다. 이걸 한 번에 push했더니 다른 팀원의 작업과 충돌(conflict)이 발생해 해결하느라 반나절을 썼다. 커밋은 작은 단위로 자주 하고, 주기적으로 push하는 것이 팀 전체를 위한 길임을 깨달았다. 쌓아둔 커밋은 터지기 직전의 폭탄과 같다.

✅ 핵심 요약

개념설명비고
.gitignoreGit이 추적하지 않을 파일/폴더 목록을 지정하는 설정 파일.Binaries, Intermediate 등 자동 생성 폴더를 무시하는 데 필수적이다.
Git LFS대용량 파일을 Git 저장소 외부 서버에 저장하고 포인터로 관리하는 확장 기능.git lfs track "*.uasset"처럼 추적할 파일 형식을 지정해야 한다.
대역폭 (Bandwidth)GitHub 저장소에서 데이터를 주고받을 수 있는 월별 총량. (무료 10GB)clone은 대역폭을 가장 많이 소모하므로 팀 전체가 반복하지 않도록 주의해야 한다.
클라우드 + fetch 전략최초 저장소를 클라우드로 공유하고, 이후 변경분만 fetch/pull로 받는 대역폭 절약 방법.팀 프로젝트 시작 시 규칙으로 정해두면 매우 효율적이다.
profile
Shin Ji Yong // Unreal Engine 5 공부중입니다~

0개의 댓글