Featured image of post Git은 왜 빈 폴더를 추적하지 않을까요? .gitkeep과 .gitignore의 용도는 무엇일까요?

Git은 왜 빈 폴더를 추적하지 않을까요? .gitkeep과 .gitignore의 용도는 무엇일까요?

Git이 빈 폴더를 무시하는 이유와 프로젝트 디렉토리 구조를 관리하기 위해 .gitkeep과 .gitignore를 올바르게 사용하는 방법을 자세히 알아봅니다. 실제 사례와 모범 사례가 포함되어 있습니다.

간단히 말해, .gitkeep관례적인 더미 파일입니다. 이 파일의 존재 목적은 단 하나, 원래 비어 있어야 할 폴더를 Git이 강제로 추적하게 만드는 것입니다.

왜 필요한가요?

Git의 설계 논리는 **“파일 변경 사항 추적”**이지 **“폴더 추적”**이 아닙니다. 프로젝트에 빈 폴더가 있다면, Git은 이를 완전히 무시하고 GitHub나 서버에 업로드하지 않습니다.

이로 인해 문제가 발생할 수 있습니다. 때로는 코드가 실행되기 위해 특정 디렉토리가 존재해야 하지만, 테스트 데이터나 임시 파일을 업로드하고 싶지는 않을 수 있습니다. 만약 디렉토리가 존재하지 않는다면 프로그램이 충돌할 수도 있습니다.

이러한 폴더는 보통 다음과 같습니다:

  • logs/: 로그 파일용
  • uploads/: 사용자가 업로드한 파일
  • tmp/: 임시 파일
  • cache/: 캐시 데이터

이러한 디렉토리는 런타임에 필요하고, 그 내용물은 커밋하면 안 되지만, 폴더 자체는 존재해야 합니다.

작동 원리

Git을 속여서 이 폴더를 유지하게 하려면, 아무 기능이 없는 숨김 파일을 그 안에 넣어 Git이 “아! 여기 뭔가 있네, 기록해야겠다"라고 생각하게 만듭니다.

실무적 비유:

집을 짓고 있다고(프로젝트를 작성 중이라고) 상상해 보세요:

파일 설명
.gitignore **“쓰레기 투기 금지 라벨”**과 같습니다. 청소부(Git)에게 어떤 물건(유통기한 지난 음식, 폐지 등)을 새 집으로 절대 옮기지 말아야 하는지 알려줍니다.
.gitkeep **“자리 표시용 상자”**와 같습니다. 새 집에 아직 가구가 없지만 창고 공간을 확보해야 해서, 이삿짐 센터 직원에게 이 구역도 집의 일부이니 철거하지 말라고 알리기 위해 상자를 놓아두는 것과 같습니다.

어떻게 사용하나요?

  1. 빈 폴더 안에 .gitkeep이라는 이름의 파일을 생성합니다.
  2. 파일 내용은 비워두거나 “Keep this directory"라고 작성해도 됩니다.
  3. 이 파일을 git add 하고 commit 합니다.

.gitkeep vs .gitignore 비교

특징 .gitkeep .gitignore
공식 신분 비공식 (단순 커뮤니티 관례) 공식 (Git 내장 기능)
주요 기능 폴더를 유지하여 Git이 잊어버리지 않게 함 파일을 제외하여 Git이 추적하지 않게 함
일반적인 시나리오 빈 로그 폴더, 캐시 폴더 비밀번호 파일, node_modules, 임시 파일

실용적인 조언: 고정관념 깨기

.gitkeep이 흔히 사용되지만, 사실 Git의 공식적인 부분은 아닙니다. 실제로 README.md.placeholder를 사용해도 같은 효과를 낼 수 있습니다. 하지만 왜 다들 .gitkeep을 선호할까요? 설명이 필요 없기 때문입니다: **“이 파일은 아무것도 안 하지만 Git이 이 폴더를 삭제하지 않게 할 뿐이야”**라는 뜻이 명확하니까요.

조금 더 전문가처럼 보이고 싶다면, 단순히 .gitkeep을 사용하는 것보다 더 기능적이고 창의적인 방법이 있습니다:

빈 폴더에 다음과 같은 내용의 .gitignore를 배치하세요:

# 이 디렉토리의 모든 것을 무시
*
# 하지만 나(이 .gitignore 파일 자체)는 무시하지 마
!.gitignore

이렇게 하면 폴더는 유지하면서 안에 있는 쓰레기 파일이 실수로 커밋되는 것은 방지할 수 있습니다. 이것이야말로 진정한 “실수 방지(Foolproof)” 방법입니다.

결론

  • .gitkeep은 Git의 설계 논리에 대한 인간의 타협입니다.
  • 공식 규격은 아니지만 개발자들 사이에서 사실상의 표준이 되었습니다.
  • 진짜 중요한 것은 .gitignore가 어떻게 작동하는지 이해하는 것입니다. .gitkeep은 Git이 빈 폴더를 “이해"하도록 돕는 작은 도구일 뿐입니다.

Reference

All rights reserved,未經允許不得隨意轉載
Hugo로 만듦
JimmyStack 테마 사용 중