Git 실무 가이드 · Part 6

저장소 위생과 비밀정보 사고 대응

저장소를 오래 쓸 수 있게 관리하고 유출 사고에 제대로 대응하기

작성 기준2026년 7월

이 파트에서 다루는 내용

무엇을 저장소에 넣지 않는가gitignore 운영대용량 파일 문제비밀정보 커밋 사고 대응
01

저장소에는 소스만 넣습니다

Git은 한 번 들어온 것을 잘 지웁니다. 정확히는 잘 지우지 못합니다. 파일을 삭제해도 그 파일이 있었던 커밋은 이력에 그대로 남습니다.

그래서 저장소 관리의 핵심은 지우는 방법이 아니라 처음부터 넣지 않는 것입니다. 무엇을 넣지 않을지 기준을 먼저 정해야 합니다.

빌드 결과물
넣지 않음

dist, build, target, node_modules처럼 소스에서 다시 만들 수 있는 것은 넣지 않습니다. 용량만 커지고 충돌 원인이 됩니다.

개인 환경 설정
넣지 않음

IDE 설정, 로컬 실행 파일, OS가 만드는 파일입니다. 팀원마다 달라 매번 변경으로 잡힙니다. IDE 코스에서 다룬 기준과 같습니다.

비밀정보
절대 금지

비밀번호, API 키, 인증서, 접속 정보입니다. 한 번 들어가면 이력에 영구히 남습니다.

대용량 바이너리
주의

동영상, 이미지 원본, 데이터 덤프입니다. 저장소가 무거워지고 clone 시간이 길어집니다.

넣어야 하는 것
포함

소스 코드, 팀 공용 설정, 빌드 스크립트, 문서, 예시 설정 파일입니다. 새로 합류한 사람이 clone 후 바로 시작할 수 있어야 합니다.

02

gitignore는 프로젝트 시작할 때 만듭니다

gitignore는 아직 추적하지 않는 파일만 무시합니다. 이미 커밋된 파일은 나중에 규칙을 추가해도 계속 추적됩니다. 그래서 처음에 만들어 두는 것이 중요합니다.

이미 커밋한 뒤에 제외하려면 추적을 먼저 끊어야 합니다. 이때 파일 자체는 남기고 Git 관리에서만 빼는 것이 핵심입니다.

--cached 를 빠뜨리면
사고 주의

git rm 만 쓰면 작업 디렉터리의 실제 파일도 삭제됩니다. 설정 파일을 제외하려다 파일을 잃는 경우가 있습니다.

공용 규칙과 개인 규칙
분리

팀 공통 규칙은 저장소의 gitignore에 두고, 개인 도구가 만드는 파일은 전역 설정으로 처리합니다. 개인 취향을 저장소에 강요하지 않습니다.

예시 설정 파일
권장

실제 설정은 제외하되 형식을 보여 주는 예시 파일을 함께 둡니다. 새 팀원이 무엇을 채워야 하는지 알 수 있습니다.

git check-ignore -v <파일>이 파일이 어떤 규칙으로 무시되는지 확인
git rm --cached <파일>파일은 남기고 추적만 중단 (--cached 필수)
git rm -r --cached .전체 추적 해제 후 gitignore 기준으로 다시 추가할 때
git status --ignored무시되고 있는 파일까지 함께 확인
git add -f <파일>무시 규칙을 무시하고 강제로 추가 (신중히)
실무 팁

이미 추적 중인 파일을 gitignore에 추가했는데 계속 변경으로 잡힌다면, 규칙이 잘못된 것이 아니라 추적을 끊지 않은 것입니다. git check-ignore 로 규칙 적용 여부부터 확인합니다.

03

대용량 파일은 저장소를 영구히 무겁게 만듭니다

100MB 파일을 커밋했다가 다음 커밋에서 지워도 저장소 크기는 줄지 않습니다. 이력에 남아 있어 clone 할 때마다 함께 내려받습니다.

팀원이 늘고 CI가 매번 clone 하는 환경에서는 이 비용이 계속 누적됩니다.

증상
확인
  • clone 이 오래 걸리고 용량이 큽니다
  • CI 빌드 시간이 코드 양에 비해 깁니다
  • 원격 저장소가 용량 제한 경고를 보냅니다
Git LFS
대안

대용량 파일을 별도 저장소에 두고 Git에는 참조만 남깁니다. 디자인 원본이나 미디어를 함께 관리해야 할 때 씁니다.

더 나은 방법
판단

애초에 저장소 밖에 두는 것입니다. 산출물은 아티팩트 저장소나 오브젝트 스토리지에 두고 저장소에는 위치만 기록합니다.

이력 정리
최후 수단

이미 들어간 대용량 파일을 이력에서 제거하려면 저장소 전체를 다시 씁니다. 모든 커밋 해시가 바뀌므로 팀 전체 협의가 필요합니다.

04

비밀정보를 커밋했다면 순서가 정해져 있습니다

가장 중요한 원칙부터 말하면, 파일을 지우는 것보다 값을 폐기하는 것이 먼저입니다.

커밋을 되돌리고 이력을 정리하는 데 시간이 걸리는데, 그동안에도 그 키는 유효합니다. 이미 원격에 올라갔다면 누군가 봤다고 가정해야 합니다.

순서를 지키지 않고 이력 정리부터 시작하다가 실제 유출로 이어지는 경우가 있습니다.

  • 1. 노출된 키와 비밀번호를 즉시 폐기하고 새로 발급합니다. 가장 먼저 할 일입니다.
  • 2. 해당 계정의 접근 로그를 확인해 실제 사용 흔적이 있는지 봅니다.
  • 3. 보안 담당자에게 알립니다. 조직 기준에 따라 보고 의무가 있을 수 있습니다.
  • 4. 코드에서 값을 제거하고 환경변수나 비밀 관리 도구로 옮깁니다.
  • 5. gitignore에 해당 파일을 추가하고 추적을 끊습니다.
  • 6. 이력 정리가 필요한지 판단합니다. 공개 저장소라면 필요하고, 내부 저장소라면 조직 기준을 따릅니다.
가장 흔한 실수
주의

값을 지운 새 커밋을 올리고 해결됐다고 생각하는 것입니다. 이전 커밋을 열면 값이 그대로 보입니다.

force push 로 덮기
불완전

원격 이력을 덮어써도 이미 clone 한 사람의 로컬에는 남아 있습니다. 플랫폼 캐시에 남는 경우도 있습니다.

이력 정리의 대가
판단 필요

모든 커밋 해시가 바뀝니다. 진행 중인 브랜치와 PR이 깨지고 팀 전체가 다시 clone 해야 합니다. 키 폐기로 위험이 해소됐다면 굳이 하지 않는 선택도 있습니다.

예방이 유일한 해법
기준

커밋 전 검사 도구를 붙이거나, 설정 파일을 처음부터 gitignore에 넣어 두는 편이 사고 후 대응보다 훨씬 저렴합니다.

핵심

비밀정보 사고에서 시간을 다투는 것은 이력 정리가 아니라 키 폐기입니다. 이력은 나중에 정리해도 되지만 유효한 키는 지금 이 순간에도 쓸 수 있습니다. 순서를 바꾸지 않습니다.

05

커밋 전에 무엇이 올라가는지 확인합니다

사고 대부분은 확인 없이 전체를 추가하면서 생깁니다. 무엇이 스테이지에 올라갔는지 한 번만 보면 막을 수 있습니다.

add . 의 위험
습관

gitignore가 제대로 없는 상태에서 전체를 추가하면 설정 파일과 로그가 함께 들어갑니다. 최소한 status 로 목록을 보고 실행합니다.

add -p 의 효과
권장

변경을 조각으로 나눠 보여 주므로 디버깅용 코드나 임시 값이 섞이는 것을 걸러 냅니다. 커밋 단위도 자연스럽게 작아집니다.

자동 검사
도구

커밋 직전에 비밀정보 패턴을 검사하는 도구를 붙일 수 있습니다. 사람이 매번 확인하는 것보다 확실합니다.

git status변경 파일 목록 확인. 커밋 전 습관
git diff --staged실제 커밋될 내용 확인. 의도치 않은 변경 발견
git add -p변경을 조각 단위로 확인하며 선택적으로 추가
git add .전체 추가. 무엇이 포함되는지 모르면 위험
체크

이 파트 완료 기준