간단히 말해, .gitkeep은 관례적인 더미 파일입니다. 이 파일의 존재 목적은 단 하나, 원래 비어 있어야 할 폴더를 Git이 강제로 추적하게 만드는 것입니다.
왜 필요한가요?
Git의 설계 논리는 **“파일 변경 사항 추적”**이지 **“폴더 추적”**이 아닙니다. 프로젝트에 빈 폴더가 있다면, Git은 이를 완전히 무시하고 GitHub나 서버에 업로드하지 않습니다.
이로 인해 문제가 발생할 수 있습니다. 때로는 코드가 실행되기 위해 특정 디렉토리가 존재해야 하지만, 테스트 데이터나 임시 파일을 업로드하고 싶지는 않을 수 있습니다. 만약 디렉토리가 존재하지 않는다면 프로그램이 충돌할 수도 있습니다.
이러한 폴더는 보통 다음과 같습니다:
logs/: 로그 파일용uploads/: 사용자가 업로드한 파일tmp/: 임시 파일cache/: 캐시 데이터
이러한 디렉토리는 런타임에 필요하고, 그 내용물은 커밋하면 안 되지만, 폴더 자체는 존재해야 합니다.
작동 원리
Git을 속여서 이 폴더를 유지하게 하려면, 아무 기능이 없는 숨김 파일을 그 안에 넣어 Git이 “아! 여기 뭔가 있네, 기록해야겠다"라고 생각하게 만듭니다.
실무적 비유:
집을 짓고 있다고(프로젝트를 작성 중이라고) 상상해 보세요:
| 파일 | 설명 |
|---|---|
.gitignore |
**“쓰레기 투기 금지 라벨”**과 같습니다. 청소부(Git)에게 어떤 물건(유통기한 지난 음식, 폐지 등)을 새 집으로 절대 옮기지 말아야 하는지 알려줍니다. |
.gitkeep |
**“자리 표시용 상자”**와 같습니다. 새 집에 아직 가구가 없지만 창고 공간을 확보해야 해서, 이삿짐 센터 직원에게 이 구역도 집의 일부이니 철거하지 말라고 알리기 위해 상자를 놓아두는 것과 같습니다. |
어떻게 사용하나요?
- 빈 폴더 안에
.gitkeep이라는 이름의 파일을 생성합니다. - 파일 내용은 비워두거나 “Keep this directory"라고 작성해도 됩니다.
- 이 파일을
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이 빈 폴더를 “이해"하도록 돕는 작은 도구일 뿐입니다.