.gitignore 파일 작성법, 패턴 규칙(와일드카드·디렉터리·부정), 환경변수 파일(.env) 보호, 이미 추적 중인 파일 제외 방법, gitignore.io 자동 생성 도구까지 민감 정보 유출을 완전히 방지합니다.
🎯 학습 목표
이 강을 마치면 다음을 할 수 있습니다.
.gitignore파일을 작성해 원하는 파일과 폴더를 Git 추적에서 제외할 수 있습니다.- 와일드카드, 디렉터리, 부정 패턴 등
.gitignore문법을 이해합니다. - 환경변수 파일(
.env)이 왜 절대 커밋되면 안 되는지 이해하고 설정합니다. - 이미 추적 중인 파일을
.gitignore에 추가하는 방법을 알고 있습니다.
🔐 .gitignore가 반드시 필요한 이유
이 섹션에서는 .gitignore를 설정하지 않으면 발생할 수 있는 심각한 보안 문제와 실용적 이유를 살펴보겠습니다.
Git 저장소의 모든 파일을 커밋에 포함하면 여러 문제가 생깁니다. 그중 가장 심각한 것은 보안 사고입니다.
실제 사례가 있습니다. 개발자가 AWS API 키가 담긴 .env 파일을 실수로 GitHub 공개 저장소에 올렸고, 악의적인 봇이 몇 분 안에 이를 발견해 해당 AWS 계정으로 수천만 원의 가상화폐 채굴을 시작했습니다. AWS는 비용을 환불해주지 않았고 개발자는 큰 피해를 입었습니다. 이런 일이 전 세계에서 매일 발생합니다.
보안 외에도 다음 파일들은 저장소에 포함시키지 않아야 합니다.
- 환경변수·비밀 키:
.env,*.key,*.pem— API 키, 비밀번호, 인증서 - 빌드 결과물:
node_modules/,dist/,build/— 소스로 재생성 가능, 용량이 큼 - OS·에디터 임시 파일:
.DS_Store(macOS),Thumbs.db(Windows),.idea/(JetBrains),.vscode/ - 로그·캐시 파일:
*.log,.cache/,__pycache__/
📝 .gitignore 파일 작성법
이 섹션에서는 .gitignore 파일의 위치, 기본 구조, 다양한 패턴 규칙을 살펴보겠습니다.
.gitignore는 프로젝트 루트(최상위 폴더)에 만드는 텍스트 파일입니다. 파일명 자체가 .gitignore이며, 각 줄에 제외할 파일이나 폴더의 패턴을 작성합니다.
# .gitignore 파일 생성
touch .gitignore # macOS·Linux·Git Bash
파일 내부에는 다음 규칙으로 패턴을 작성합니다.
# === .gitignore 기본 패턴 ===
# 1. 특정 파일 제외
.env
secret.txt
config.json
# 2. 특정 확장자 전체 제외 (와일드카드 *)
*.log # 모든 .log 파일
*.tmp # 모든 .tmp 파일
*.pyc # Python 컴파일된 파일
# 3. 특정 폴더 전체 제외 (슬래시 / 로 끝내기)
node_modules/
dist/
build/
.cache/
# 4. 폴더 안의 특정 파일
logs/*.log # logs 폴더 안의 .log 파일만
# 5. 모든 하위 폴더에서 특정 패턴 제외 (**)
**/*.log # 어디에 있든 모든 .log 파일
**/temp/ # 어디에 있든 temp 폴더
# 6. 주석 (# 으로 시작)
# 이 줄은 무시됩니다
# 7. 부정 패턴 (! 로 제외된 것을 다시 포함)
*.log # 모든 log 파일 제외
!important.log # 단, important.log는 포함
🛡️ 환경변수 파일 보호 — .env 설정
이 섹션에서는 가장 중요한 보안 설정인 환경변수 파일 보호를 살펴보겠습니다.
웹 개발에서 API 키, 데이터베이스 비밀번호, 인증 토큰 같은 민감한 값은 .env 파일에 저장하는 것이 관례입니다. 이 파일은 절대로 Git에 커밋하면 안 됩니다.
# .gitignore에 반드시 포함해야 할 환경변수 관련 패턴
.env
.env.local
.env.development
.env.production
.env.*.local
*.pem # SSL 인증서
*.key # 개인 키 파일
그 대신 .env.example 파일을 만들어 어떤 환경변수가 필요한지 (값은 빼고) 안내하는 것이 좋은 관행입니다.
# .env.example (커밋 가능 — 실제 값이 없음)
DATABASE_URL=your_database_url_here
JWT_SECRET=your_secret_here
AWS_ACCESS_KEY=your_aws_key_here
STRIPE_SECRET_KEY=your_stripe_key_here
팀원이 저장소를 클론하면 .env.example을 복사해 .env를 만들고 실제 값을 채워 넣으면 됩니다.
🔧 실전 .gitignore 예시 — 프로젝트 유형별
이 섹션에서는 주요 개발 환경별 표준 .gitignore 설정을 살펴보겠습니다.
# === Node.js 프로젝트 .gitignore ===
node_modules/
dist/
build/
.npm
*.log
.env
.env.local
.env.*.local
.DS_Store
Thumbs.db
# === Python 프로젝트 .gitignore ===
__pycache__/
*.py[cod]
*.pyo
*.pyd
.Python
venv/
.venv/
.env
*.log
.DS_Store
# === 공통적으로 항상 제외할 것들 ===
# OS 관련
.DS_Store # macOS
Thumbs.db # Windows
desktop.ini # Windows
# 에디터 관련
.vscode/ # VS Code 개인 설정
.idea/ # JetBrains IDE
*.swp # Vim 스왑 파일
🔄 이미 추적 중인 파일을 .gitignore에 추가하기
이 섹션에서는 이미 Git이 추적하고 있는 파일을 뒤늦게 .gitignore에 추가할 때 주의할 점을 살펴보겠습니다.
처음부터 .gitignore를 설정하지 않고 진행하다가 나중에 제외하려는 경우가 있습니다. 한 번 Git에 커밋된 파일은 .gitignore에 추가해도 자동으로 제외되지 않습니다. 이미 추적 중인 파일은 Git 캐시에서 먼저 제거해야 합니다.
# 특정 파일을 Git 추적에서 제거 (파일 자체는 삭제되지 않음)
git rm --cached 파일명
# 예: .env 파일 추적 중단
git rm --cached .env
# 폴더 전체를 추적에서 제거
git rm --cached -r node_modules/
# 이후 .gitignore에 해당 항목 추가하고 커밋
echo ".env" >> .gitignore
git add .gitignore
git commit -m "chore: .env를 .gitignore에 추가하고 추적 중단"
주의: 이미 GitHub 같은 원격 저장소에 민감한 파일이 올라갔다면 단순히 삭제 커밋으로는 부족합니다. Git 히스토리에 이전 커밋이 남아있기 때문입니다. 이 경우 API 키 등 민감한 값을 즉시 무효화(revoke)하고 새로 발급받는 것이 우선입니다. 히스토리 재작성은 15강 "되돌리기 전략"에서 다룹니다.
🌐 gitignore.io — 자동 생성 도구
이 섹션에서는 프로젝트 환경에 맞는 .gitignore를 자동으로 생성해주는 도구를 살펴보겠습니다.
모든 항목을 직접 외울 필요 없습니다. gitignore.io는 언어, 프레임워크, IDE, OS를 선택하면 맞춤형 .gitignore 내용을 자동 생성해주는 서비스입니다.
터미널에서 직접 생성하는 방법도 있습니다.
# curl을 사용해 Node.js + macOS + Windows용 .gitignore 생성
curl -sL https://www.toptal.com/developers/gitignore/api/node,macos,windows > .gitignore
# Python + Linux용
curl -sL https://www.toptal.com/developers/gitignore/api/python,linux > .gitignore
GitHub에서 새 저장소를 만들 때 .gitignore 템플릿을 선택하는 옵션도 있습니다. 저장소 생성 화면에서 언어를 선택하면 해당 언어에 맞는 .gitignore가 자동으로 포함됩니다.
📝 핵심 요약
6강에서 배운 내용을 정리해 보겠습니다.
# 이미 추적 중인 파일 추적 중단
git rm --cached 파일명
# 핵심 .gitignore 패턴
*.확장자 # 해당 확장자 전체
폴더명/ # 폴더 전체
!파일명 # 제외된 것 중 다시 포함
**/*.확장자 # 모든 하위 폴더의 해당 확장자
| 반드시 제외할 것 | 이유 |
|---|---|
.env, *.key, *.pem | 보안 — 노출 시 즉각적 피해 |
node_modules/, dist/ | 용량·재생성 가능 |
.DS_Store, Thumbs.db | OS 임시 파일, 의미 없음 |
다음 강인 7강 — 브랜치 개념에서는 Git의 가장 강력한 기능인 브랜치를 배웁니다. 메인 코드에 영향 없이 새 기능을 독립적으로 개발하고, 실험하고, 필요하면 버리는 브랜치 전략은 현대 소프트웨어 개발의 핵심입니다!
관련 주제
- .gitignore 문법
- 와일드카드 패턴
- 환경변수 파일 보호
- .env 유출 방지
- gitignore.io
- 추적 파일 제외
- 개발·프로그래밍
- 개발·프로그래밍 강의
- 깃허브 사용법 18강 — Git & GitHub 협업
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
깃허브 사용법 18강 — Git & GitHub 협업
이 강의가 속한 시리즈는 총 7강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
