본문 바로가기
IT

Git 저장소 용량 최적화, LFS, 필터 브랜치 활용법 가이드

by IT박사 2026. 5. 6.

Git 저장소가 점점 무거워져서 답답했던 경험, 다들 있으시죠? 이번 글에서는 Git 저장소 용량을 최적화하는 방법, 특히 LFS, 필터 브랜치, BFG Repo-Cleaner를 활용하여 대용량 파일을 효율적으로 관리하는 전략을 꼼꼼하게 알려드릴게요. 이제 Git 저장소 비대화 문제에서 벗어나 쾌적한 개발 환경을 만들어 보세요!

1. Git 저장소 비대화, 왜 해결해야 할까요?

Git 저장소의 크기가 커지는 문제는 협업 효율성을 저하시키는 주요 원인 중 하나입니다. 저장소 크기 증가는 곧 클론, 브랜치 전환, 푸시, 풀과 같은 Git 작업 시간 증가로 이어집니다. 이는 개발 생산성을 저해하며, 심각한 경우 협업 환경에 부정적인 영향을 미칠 수 있습니다.

저장소 비대화의 주된 원인은 버전 관리 대상이 아닌 대용량 파일의 포함입니다. 예를 들어, 디자인 에셋, 빌드 결과물, 미디어 파일 등이 Git 저장소에 불필요하게 포함되는 경우가 있습니다. 이러한 파일들은 텍스트 기반의 코드와 달리, Git의 차등 저장 방식의 효율성을 떨어뜨립니다.

Git 저장소 크기 문제는 다음과 같은 구체적인 어려움을 야기합니다.

  • 클론 속도 저하: 저장소를 처음 내려받는 시간이 길어집니다.
  • 브랜치 전환 지연: 브랜치 간 이동 시 파일 시스템에 부담을 줍니다.
  • 푸시/풀 시간 증가: 변경사항을 공유하고 동기화하는 데 시간이 오래 걸립니다.
  • 저장 공간 낭비: 불필요한 파일들이 저장 공간을 차지합니다.

따라서 Git 저장소의 크기를 최적화하는 것은 매우 중요합니다. 효과적인 대용량 파일 관리 전략을 수립하고, 불필요한 데이터를 제거하는 것은 개발 효율성을 높이는 데 필수적입니다. 본 가이드에서는 Git LFS (Large File Storage), 필터 브랜치, BFG Repo-Cleaner 등 다양한 방법을 소개하고, 대용량 파일 관리 전략을 제시하여 Git 저장소를 효율적으로 관리하는 방법을 안내합니다.

2. 대용량 파일, Git 관리의 숨겨진 적?

Git은 텍스트 기반의 소스 코드 관리에 최적화되어 있습니다. 하지만 이미지, 비디오, 오디오 파일과 같은 대용량 파일은 Git 저장소의 크기를 급격하게 증가시키는 주범이 될 수 있습니다. 이러한 파일들은 텍스트 파일과 달리 변경 사항을 효율적으로 압축하거나 저장하기 어렵기 때문입니다.

저장소에 대용량 파일이 누적되면 여러 가지 문제가 발생합니다. 우선, 저장소를 클론하거나 업데이트하는 데 필요한 시간이 늘어납니다. 또한, 저장소 크기가 커짐에 따라 백업 및 복원 작업도 더 많은 시간과 리소스를 소모하게 됩니다.

→ 2.1 대용량 파일로 인한 문제점

대용량 파일은 협업 과정에서도 어려움을 야기할 수 있습니다. 예를 들어, 개발자가 새로운 브랜치를 생성하거나 기존 브랜치를 병합할 때, 대용량 파일로 인해 작업 시간이 지연될 수 있습니다. 결과적으로 팀 전체의 생산성이 저하될 가능성이 있습니다.

2026년 현재, 많은 프로젝트에서 멀티미디어 자료를 적극적으로 활용하고 있습니다. 따라서 Git 저장소 내 대용량 파일 관리 문제는 더욱 중요해지고 있습니다. 효율적인 대용량 파일 관리 전략은 개발 생산성을 유지하고 협업 효율성을 높이는 데 필수적입니다.

예를 들어, 게임 개발 프로젝트의 경우 고해상도 텍스처 파일이나 오디오 파일이 Git 저장소에 포함되는 경우가 많습니다. 이러한 파일들은 크기가 매우 커서 저장소를 비대하게 만들고, 팀원 간의 협업을 어렵게 할 수 있습니다. 따라서, 이러한 파일들을 효과적으로 관리하는 것은 프로젝트 성공에 중요한 요소로 작용합니다.

대용량 파일로 인한 Git 작업 시간 증가

3. LFS 완벽 가이드: 설치부터 사용법 마스터

Git LFS(Large File Storage)는 대용량 파일을 효율적으로 관리하기 위한 Git 확장입니다. Git LFS를 사용하면 이미지, 오디오, 비디오와 같은 파일을 Git 저장소에 직접 저장하는 대신, 파일의 포인터만 저장합니다. 실제 파일은 별도의 저장소에 저장하여 Git 저장소의 크기를 줄이고 성능을 향상시킵니다.

→ 3.1 LFS 설치

Git LFS를 사용하기 위해서는 먼저 설치해야 합니다. 운영체제에 따라 설치 방법이 다릅니다. macOS의 경우, Homebrew를 통해 brew install git-lfs 명령어로 설치할 수 있습니다. Windows에서는 Git LFS 공식 웹사이트에서 설치 파일을 다운로드하여 설치할 수 있습니다. Linux에서는 패키지 관리자를 사용하여 설치할 수 있습니다 (예: apt-get install git-lfs 또는 yum install git-lfs).

설치가 완료되면 git lfs install 명령어를 실행하여 Git LFS를 초기화해야 합니다. 이 명령어는 Git 설정에 LFS 관련 후크를 추가하여 Git이 LFS를 인식하도록 합니다. 초기화는 저장소마다 한 번씩 수행하면 됩니다.

→ 3.2 LFS 사용법

Git LFS를 사용하여 파일을 추적하려면 git lfs track 명령어를 사용합니다. 예를 들어, 모든 .psd 파일을 LFS로 관리하려면 git lfs track "*.psd" 명령어를 실행합니다. 이 명령어는 .gitattributes 파일에 해당 파일 형식을 추가하여 Git이 해당 파일을 LFS로 처리하도록 합니다. 따라서 .gitattributes 파일도 Git 저장소에 커밋해야 합니다.

파일을 추적하도록 설정한 후에는 일반적인 Git 워크플로우와 동일하게 파일을 추가하고 커밋합니다. Git은 LFS로 추적되는 파일을 자동으로 처리합니다. LFS로 관리되는 파일은 Git 저장소에 포인터만 저장되고 실제 파일은 LFS 저장소에 업로드됩니다. 2026년 현재 대부분의 Git 호스팅 서비스(GitHub, GitLab, Bitbucket)는 LFS를 지원합니다.

→ 3.3 LFS 저장소 설정

Git LFS는 기본적으로 Git 저장소와 동일한 원격 저장소를 사용합니다. 하지만 별도의 LFS 저장소를 구성할 수도 있습니다. 이를 위해서는 .lfsconfig 파일을 생성하고 LFS 저장소의 URL을 지정해야 합니다. 예를 들어, 다음과 같이 설정할 수 있습니다:


[lfs]
    url = https://example.com/lfs

이 설정을 통해 Git은 LFS로 관리되는 파일을 지정된 URL의 LFS 저장소에 업로드합니다. 별도의 LFS 저장소를 사용하면 저장소 관리 및 보안 측면에서 이점을 얻을 수 있습니다. 예를 들어, 접근 제어를 LFS 저장소에만 적용하여 대용량 파일에 대한 접근을 제한할 수 있습니다.

📌 핵심 요약

  • ✓ ✓ Git LFS는 대용량 파일 관리 Git 확장
  • ✓ ✓ 운영체제별 설치 후 `git lfs install`로 초기화
  • ✓ ✓ `git lfs track` 명령어로 파일 추적 설정
  • ✓ ✓ `.lfsconfig` 파일로 별도 LFS 저장소 설정 가능

4. 필터 브랜치 활용: 히스토리 클리닝 A to Z

git filter-branch는 Git 히스토리에서 특정 파일이나 폴더를 제거하거나 수정하는 강력한 도구입니다. 이 명령어를 사용하면 저장소의 크기를 줄이고 민감한 정보 유출을 방지할 수 있습니다. 하지만 히스토리를 변경하는 작업이므로 주의해서 사용해야 합니다. 백업 후 진행하는 것을 권장합니다.

→ 4.1 필터 브랜치 사용법

필터 브랜치는 특정 조건을 만족하는 커밋들을 재작성합니다. 파일 제거, 커밋 메시지 변경, 작성자 정보 수정 등 다양한 작업이 가능합니다. 다음은 특정 파일 또는 폴더를 히스토리에서 제거하는 예시입니다.


git filter-branch --index-filter \
    'git rm --cached --ignore-unmatch YOUR-FILE-OR-FOLDER' \
    --prune-empty --tag-name-filter cat --all

위 명령어는 모든 브랜치와 태그에서 지정된 파일 또는 폴더를 제거합니다. --index-filter는 각 커밋의 인덱스를 수정하는 필터를 지정합니다. --prune-empty는 빈 커밋을 제거하고, --tag-name-filter cat은 태그를 유지합니다.

→ 4.2 필터 브랜치 사용 시 주의사항

필터 브랜치는 히스토리를 변경하므로, 협업하는 저장소에서는 사용에 신중해야 합니다. 히스토리가 변경되면 다른 개발자들이 로컬 저장소를 업데이트하는 데 어려움을 겪을 수 있습니다. 따라서 필터 브랜치 사용 전에 팀원들과 충분히 논의하고, 필요한 경우 저장소를 복제하여 테스트하는 것이 좋습니다.

필터 브랜치 작업 후에는 변경된 히스토리를 원격 저장소에 푸시해야 합니다. 이때 --force 옵션을 사용하여 강제로 푸시해야 할 수 있습니다. 하지만 강제 푸시는 기존 히스토리를 덮어쓰므로, 신중하게 결정해야 합니다. 팀원들에게 변경 사항을 알리고, 로컬 저장소를 업데이트하는 방법을 안내해야 합니다.

예를 들어, 실수로 저장소에 포함된 민감한 정보(API 키, 비밀번호 등)를 제거해야 하는 경우 필터 브랜치를 사용할 수 있습니다. 이 경우, 해당 파일이 커밋된 시점부터 현재까지의 모든 히스토리에서 해당 파일을 제거해야 합니다. 필터 브랜치를 사용하여 과거의 커밋 기록까지 수정함으로써, 민감한 정보 유출 위험을 최소화할 수 있습니다.

5. BFG Repo-Cleaner: 더 강력한 히스토리 정리 도구

BFG Repo-Cleaner는 Git 저장소의 히스토리를 정리하는 데 특화된 도구입니다. git filter-branch보다 빠르고 사용하기 쉬운 것이 특징입니다. 특히 대용량 파일이나 민감한 정보가 실수로 커밋된 경우에 유용합니다. BFG Repo-Cleaner는 저장소의 히스토리를 다시 작성하므로, 사용 전에 반드시 백업을 수행해야 합니다.

BFG Repo-Cleaner는 Java로 작성되어 있으며, 실행 파일을 다운로드하여 사용할 수 있습니다. 특정 파일 제거, 파일 내용 변경, 특정 커밋 이후의 히스토리 정리 등 다양한 기능을 제공합니다. 예를 들어, 실수로 저장소에 포함된 비밀 키 파일을 제거하는 데 활용할 수 있습니다. 또한, 민감한 정보가 포함된 파일의 내용을 '*' 문자로 변경하여 히스토리에서 완전히 제거할 수도 있습니다.

→ 5.1 BFG Repo-Cleaner 사용 예시

BFG Repo-Cleaner를 사용하여 특정 파일을 제거하는 방법은 다음과 같습니다. 먼저, BFG Repo-Cleaner 실행 파일을 다운로드하고 실행 권한을 부여합니다. 다음으로, 다음 명령어를 실행하여 저장소에서 특정 파일을 제거합니다.


bfg --delete-files id_rsa  your-repository.git

위 명령어는 your-repository.git 저장소에서 id_rsa 파일을 제거합니다. BFG Repo-Cleaner는 해당 파일이 포함된 모든 커밋을 수정하여, 히스토리에서 완전히 제거합니다. 작업 완료 후에는 git reflog expire --expire=now --all && git gc --prune=now --aggressive 명령어를 사용하여 정리 작업을 마무리합니다.

BFG Repo-Cleaner는 대용량 파일 관리뿐만 아니라, 민감한 정보 유출 방지에도 효과적입니다. 하지만 히스토리를 변경하는 작업이므로, 신중하게 사용해야 합니다. 사용 전 백업은 필수이며, 작업 후에는 팀원들과 협의하여 변경 사항을 공유하는 것이 좋습니다.

📊 BFG Repo-Cleaner 핵심 정보

특징 활용 예시 주의 사항
git filter-branch 대비 빠름 민감 정보 제거 사용 전 반드시 백업
Java 기반 대용량 파일 제거 히스토리 변경
히스토리 정리 도구 파일 내용 수정 reflog 정리 필요
실행 파일 다운로드 특정 커밋 이후 정리 작업 후 저장소 푸시

6. Git 용량 최적화, 5가지 함정과 해결책

Git 저장소 용량 최적화는 효율적인 협업을 위해 중요하지만, 간과하기 쉬운 함정들이 존재합니다. 이러한 함정들을 제대로 이해하지 못하면 오히려 저장소를 손상시키거나 개발 프로세스를 지연시킬 수 있습니다. 따라서 발생 가능한 문제점을 미리 파악하고 적절한 해결책을 준비하는 것이 중요합니다.

본 섹션에서는 Git 저장소 용량 최적화 과정에서 흔히 발생하는 5가지 함정과 그 해결책을 제시합니다. 이를 통해 독자들은 안전하고 효율적으로 Git 저장소를 관리할 수 있도록 돕는 것을 목표로 합니다. 각 함정별로 구체적인 예시와 해결 방안을 제공하여 실질적인 도움이 될 수 있도록 구성했습니다.

→ 6.1 1. 히스토리 완전 삭제의 위험성

히스토리에서 대용량 파일을 삭제할 때, git filter-branch나 BFG Repo-Cleaner를 사용하는 것은 효과적입니다. 하지만 히스토리를 완전히 삭제하면 과거의 모든 변경 이력을 잃게 될 수 있습니다. 이는 문제 발생 시 원인 분석을 어렵게 만들고, 특정 시점으로 되돌아가는 것을 불가능하게 합니다.

해결책으로는 히스토리 삭제 전 반드시 백업을 수행하는 것이 있습니다. 백업된 히스토리는 별도의 저장소에 보관하여 필요할 때 참조할 수 있도록 합니다. 또한, 삭제 범위를 신중하게 결정하여 필요한 히스토리까지 삭제되는 것을 방지해야 합니다.

→ 6.2 2. LFS 미사용으로 인한 용량 증가

이미지, 비디오, 오디오 파일과 같은 대용량 파일을 Git LFS (Large File Storage) 없이 Git 저장소에 직접 저장하는 것은 저장소 용량 증가의 주범입니다. Git은 텍스트 파일에 최적화되어 있으며, 대용량 파일을 효율적으로 처리하지 못합니다. 따라서 LFS 미사용은 저장소 성능 저하를 야기합니다.

해결책은 Git LFS를 적극적으로 활용하는 것입니다. LFS를 설치하고 추적할 파일 형식을 지정하여 대용량 파일을 효율적으로 관리할 수 있습니다. 기존 저장소에 이미 대용량 파일이 있는 경우, git lfs migrate 명령어를 사용하여 LFS로 이전할 수 있습니다.

→ 6.3 3. 잘못된 필터 브랜치 사용법

git filter-branch는 강력한 도구이지만, 잘못 사용하면 저장소를 손상시킬 수 있습니다. 특히 필터 조건 설정 시 오류가 발생하면 예상치 못한 파일이 삭제되거나 변경될 수 있습니다. 잘못된 필터 브랜치 사용은 데이터 손실로 이어질 수 있으므로 주의해야 합니다.

해결책으로는 필터 브랜치 사용 전 충분한 테스트를 거치는 것이 중요합니다. 작은 규모의 테스트 저장소를 만들어 필터 조건을 검증하고, 실제 저장소에 적용하기 전에 결과를 확인해야 합니다. 또한, 필터 브랜치 사용 후에는 반드시 저장소의 무결성을 검사해야 합니다.

→ 6.4 4. 민감 정보 유출 방지 실패

API 키, 비밀번호, 개인 정보와 같은 민감한 정보가 실수로 Git 저장소에 커밋되는 경우가 있습니다. 이러한 정보는 외부에 유출될 경우 심각한 보안 문제를 야기할 수 있습니다. 민감 정보 유출 방지 실패는 기업의 신뢰도를 떨어뜨리고 법적 문제로 이어질 수 있습니다.

해결책으로는 커밋 전에 민감 정보가 포함되지 않도록 주의하는 것이 가장 중요합니다. .gitignore 파일을 사용하여 민감 정보가 포함된 파일을 추적하지 않도록 설정하고, pre-commit 훅을 사용하여 커밋 전에 자동으로 검사하는 방법을 활용할 수 있습니다. 이미 유출된 정보는 git filter-branch 또는 BFG Repo-Cleaner를 사용하여 히스토리에서 제거해야 합니다.

→ 6.5 5. 정기적인 저장소 관리 소홀

Git 저장소는 시간이 지남에 따라 불필요한 파일이나 히스토리가 누적될 수 있습니다. 이러한 정기적인 저장소 관리 소홀은 저장소 크기를 증가시키고 성능 저하를 유발합니다. 저장소 관리를 위한 노력이 없다면 저장소는 점점 비대해지고 관리하기 어려워집니다.

해결책으로는 정기적인 저장소 관리 계획을 수립하고 실행하는 것이 중요합니다. 최소한 분기별로 저장소 크기를 점검하고, 불필요한 파일이나 히스토리를 제거해야 합니다. 또한, Git LFS 사용 현황을 점검하고, 대용량 파일이 제대로 관리되고 있는지 확인해야 합니다.

오늘부터 Git 저장소 최적화 시작하세요!

이제 Git LFS, 필터 브랜치, BFG Repo-Cleaner를 활용하여 저장소 용량 문제를 해결하고 효율적인 협업 환경을 구축할 수 있습니다. 제시된 전략들을 통해 개발 생산성을 높이고, 더욱 쾌적한 Git 환경을 경험해보세요. 작은 실천이 큰 변화를 가져올 것입니다.

📌 안내사항

  • 본 콘텐츠는 정보 제공 목적으로 작성되었습니다.
  • 법률, 의료, 금융 등 전문적 조언을 대체하지 않습니다.
  • 중요한 결정은 반드시 해당 분야의 전문가와 상담하시기 바랍니다.