💡 개발자라면 반드시 알아야 할 .env 보안 구조와 GitHub Push Protection 경험기

웹 서비스나 앱 개발에 있어 환경변수 파일(.env)은 마치 집 열쇠처럼 중요한 존재다.
특히 GPT API와 같은 외부 서비스를 호출하는 경우, API 키가 코드에 노출되면 예상치 못한 요금 폭탄이나 계정 해킹까지 이어질 수 있다. 나는 최근 GPT-4 기반 첨삭 도구를 개발하면서 GitHub 저장소에 코드를 푸시하려다 메시지를 발견했고, 이 글을 보는 사람들은 같은 실수를 하지 않기를 바라면서 포스팅을 시작하겠다.

🚨 GitHub의 Push Protection 경고 메시지

코드를 정리하고 git push -u origin main을 실행했더니 다음과 같은 에러가 발생했다. 대충 요약하면 API 키를 노출하는 바람에 Git push가 거절당했다는 메시지다.


remote: error: GH013: Repository rule violations found for refs/heads/main.
remote: Push cannot contain secrets
remote: —— OpenAI API Key ————————————
remote: locations:
remote:   - commit: 6c0f0b17f745626f1d9eff1ad69233ea1c78e099
remote:     path: essay_feedback_app/.env:1
remote:   - commit: 6c0f0b17f745626f1d9eff1ad69233ea1c78e099
remote:     path: essay_feedback_app/main.py:3
  

요점은 단순하다: API 키가 포함된 커밋은 GitHub에서 거절된다.

🔐 .env 파일이 왜 중요한가?

.env 파일은 앱 내부에서 사용하는 민감한 정보를 저장하는 공간이다. 예를 들어 다음과 같이 메인 폴더에 API를 그대로 입력하는 하드코딩 방식은 위험하다:

openai.api_key = "sk-xxxxxxx"  // ❌ 하드코딩

올바른 보안 방식은 환경변수로 불러오는 것이다. 먼저 메인 브랜치에 .env라는 파일을 하나 만들고, 거기에 민감한 사항들을 저장해야한다. 그 후 메인 파일에서 .env 파일을 불러오는 것이다.


import os
from dotenv import load_dotenv

load_dotenv()
api_key = os.getenv("OPENAI_API_KEY")
  

.env에는 아래처럼 저장하고, 반드시 .gitignore에 포함해야 한다. 그럼 git에 올릴 때 .env 안에 있는 내용은 숨겨져 올라가게 되고, 민감한 정보를 숨길 수 있다.


OPENAI_API_KEY=sk-xxxxxxx
  

.env
  

🧼 커밋에 포함된 민감 정보 제거하기

이미 커밋된 키가 있다면 파일 삭제만으로는 부족하다. 이미 수정을 완료하고 민감한 정보를 .env 파일로 만들어 숨겼는데도 계속해서 거부 메시지가 나온다면 아래처럼 커밋 자체를 수정하거나 삭제해야 한다:


git rm --cached essay_feedback_app/.env
git commit --amend
git push -f origin main
  

이것조차 막혀서 아예 전체 기록을 지우고 전체 기록을 새로 만들고 싶다면 아래와 같이 입력해 보자.


git checkout --orphan clean-main
git add .
git commit -m "Clean commit: remove secrets"
git branch -D main
git branch -m main
git push -f origin main
  

✨ 실전에서 배운 보안의 무게

이번 경험을 통해 느낀 건 명확했다:

  • .env 구조는 선택이 아닌 필수다
  • GitHub Push Protection은 귀찮은 기능이 아니라 나를 보호하는 방패다
  • 민감 정보는 실수 한 번으로 노출될 수 있다

나는 즉시 OpenAI 대시보드에서 키를 삭제하고 새 키를 발급받았다. 이후 구조를 보완해 커밋 이력을 초기화했고, 코드도 안전하게 배포할 수 있었다.

.env, 보안, GitHub, Push Protection, OpenAI API, 개발자 보안, 환경변수, git commit, 커밋 이력 제거, GPT API 키, streamlit, 해킹 사례, 팔로알토네트웍스, 사이버 보안, API 키 누출, 실전 보안, 환경설정 보안, 워드프레스 기술 블로그

 

위로 스크롤