git tips

소프트웨어 개발을 하다 보면 누구나 한 번쯤은 민감한 정보를 실수로 저장소에 올리는 상황을 겪는다. 특히 API 키, 인증서, 데이터베이스 접근 정보 같은 보안 자격 증명은 한 번 유출되면 되돌릴 수 없다. 단순히 파일을 지우고 다시 커밋하는 것으로 끝나는 문제가 아니라, Git의 구조적 특성 때문에 모든 과거 커밋에 흔적이 남기 때문이다.


왜 문제가 되는가

Git은 스냅샷 기반의 버전 관리 시스템이다. 특정 시점에 파일이 추가되면, 이후 삭제되더라도 과거 커밋에는 그대로 보관된다. 따라서 비밀 키를 올린 순간부터 그 저장소의 전체 히스토리는 더 이상 안전하지 않다. 이는 오픈소스 프로젝트뿐 아니라, 비공개 레포지토리에서도 동일하게 적용된다. 원격 저장소나 클라우드 서비스는 대부분 자동 백업과 미러링을 수행하기 때문에 노출 범위는 생각보다 훨씬 넓다.


즉시 취해야 할 조치

  1. 노출된 키를 폐기하고 재발급한다.
    가장 중요한 단계다. 키는 노출 순간부터 무효화해야 하며, 새로운 키를 발급받아 애플리케이션에 반영해야 한다. 이 과정을 건너뛰면 다른 모든 조치는 의미가 없다.
  2. .gitignore 설정을 강화한다.
    .env, *.key, venv/, Pods/ 등 비밀이나 대용량 바이너리가 포함될 가능성이 있는 패스를 반드시 무시 목록에 추가해야 한다. 이는 예방 조치이자 재발 방지책이다.
  3. 과거 히스토리에서 해당 파일을 제거한다.
    git filter-repo를 사용하면 특정 경로나 확장자를 모든 커밋에서 제거할 수 있다. 예를 들어: git filter-repo --path-glob '*.env' --invert-paths 이를 통해 불필요한 기록을 전부 삭제할 수 있다. 이후에는 git push --force로 원격 저장소를 갱신해야 한다.
  4. 원격 저장소와의 싱크 확인.
    GitHub, GitLab 같은 서비스는 종종 캐싱을 유지한다. 따라서 공식 문서에 안내된 절차에 따라 민감 데이터 제거 요청을 해야 할 수 있다.

대용량 파일과 Git LFS

실수로 큰 파일(예: 머신러닝 모델, 영상 데이터, 라이브러리 바이너리)을 커밋하는 경우도 비슷한 문제를 유발한다. GitHub는 100MB 이상의 단일 파일을 거절하고, 50MB 이상은 경고를 표시한다. 이러한 파일은 Git LFS(Large File Storage)로 관리하거나 아예 버전 관리에서 제외하는 것이 바람직하다. 그렇지 않으면 푸시 거절이나 LFS 객체 불일치와 같은 문제가 반복된다.


조직 차원의 대응

개발자가 혼자 해결할 문제가 아니라, 팀 차원에서 가이드를 마련해야 한다.

  • 보안 키 관리 도구: HashiCorp Vault, AWS Secrets Manager, GCP Secret Manager 같은 전문 솔루션을 활용한다.
  • 프리커밋 훅(pre-commit hook): .env나 특정 패턴을 가진 파일이 커밋 단계에서 자동 차단되도록 설정한다.
  • 코드 리뷰 프로세스: 민감 데이터 유입 여부를 확인하는 절차를 포함시킨다.

맺음말

민감 정보 유출은 단순한 실수 같아 보이지만, 실제로는 심각한 보안 사고로 이어질 수 있다. Git의 특성을 정확히 이해하고, 초기에 적절한 도구와 프로세스를 마련해 두는 것이 장기적으로 비용을 줄이는 길이다. 무엇보다 중요한 것은 실수 직후 즉각적인 키 폐기와 재발급이며, 그 뒤에 히스토리 정리와 원격 저장소 동기화가 따라와야 한다.

이 과정은 귀찮고 복잡해 보이지만, 한 번만 경험해 보면 왜 보안 키 관리와 Git 사용 원칙을 제대로 지켜야 하는지 뼈저리게 느끼게 된다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다