깃이그노어 정비와 텔레그램 봇 토큰 하드코딩 제거로 자동화 레포 보안 강화
목차
보안 이슈가 될 수 있는 두 가지를 한 번에 묶어서 정리한 작업이었다.
배경 — 왜 이게 지금 나왔나
자동화 스크립트를 팀 레포에 점진적으로 넣다 보면 어느 순간 .gitignore가 현실을 못 따라가는 시점이 온다. 초기에는 Python 기본 템플릿 수준으로만 관리하다가 스크립트가 늘고, 로컬 환경 파일이 쌓이고, 새로운 툴이 붙으면서 "이거 혹시 올라간 거 아니야?" 하는 불안감이 팀 내에서 슬슬 나오기 시작한다.
이번에는 거기에 더해 scripts/bulk_seed.py 안에 텔레그램 봇 토큰이 디폴트 값 형태로 박혀 있던 게 같이 발견됐다. 실제 유효한 토큰은 아니었지만, "디폴트 문자열처럼 보이는 자리에 실수로 진짜 토큰을 넣고 커밋하는" 패턴이 생기기 딱 좋은 구조였다. 이런 건 사고가 나기 전에 잡아야 한다.
작업 내용
크게 두 가지.
1. .gitignore 확장
기존에 없던 패턴들을 추가했다. 자동화 프로젝트에서 자주 누락되는 항목들은 대체로 이런 식이다.
# 환경 변수 / 시크릿
.env
.env.*
!.env.example
# 로컬 설정
*.local
config.local.*
# 스크립트 아웃풋 / 임시 파일
scripts/output/
*.tmp
*.log
# Python
__pycache__/
*.pyc
.venv/
특히 !.env.example 패턴은 중요하다. .env.*를 전부 막으면서 예시 파일은 커밋 가능하게 열어두는 것. 이걸 안 해두면 나중에 신규 팀원이 ".env.example도 ignore 됩니까?" 하고 물어보는 상황이 생긴다.
2. bulk_seed.py 토큰 디폴트 제거
| 구분 | 변경 전 | 변경 후 |
|---|---|---|
| 토큰 처리 방식 | 코드 내 디폴트 문자열 하드코딩 | 환경변수에서만 로드 |
| 토큰 없을 때 동작 | 디폴트 값으로 조용히 진행 | 명시적 예외 발생 또는 종료 |
| 의도 전달 | 불분명 (이게 예시인지 실값인지) | 명확히 외부 주입 필요하다는 신호 |
코드 변경은 대략 이런 방향이었을 것이다.
# Before — 디폴트가 있어서 실수 유발
TELEGRAM_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN", "123456:ABC-some-default-string")
# After — 없으면 바로 실패, 의도가 명확
TELEGRAM_TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
if not TELEGRAM_TOKEN:
raise EnvironmentError("TELEGRAM_BOT_TOKEN 환경변수가 설정되지 않았습니다.")
디폴트를 제거하는 게 "엄격해지는 것"처럼 느껴질 수 있는데, 사실 이게 더 안전하다. 조용히 동작하는 것보다 시끄럽게 실패하는 편이 자동화 스크립트에서는 훨씬 낫다. 토큰이 없는 채로 bulk 작업이 돌아가다 중간에 실패하는 것보다, 시작 시점에 "토큰 없음"으로 죽는 게 디버깅도 쉽고 피해 범위도 작다.
회고
이런 작업은 우선순위에서 항상 밀린다. 기능 개발도 아니고 버그 픽스도 아니라서 스프린트 티켓으로 잘 안 잡히는 유형이다. 그래서 팀장이 직접 챙기거나, 코드리뷰 중에 "이거 이번 스프린트 끝나고 바로 하자" 하고 합의를 끌어내야 한다.
이번에 묶어서 처리한 이유도 있다 — .gitignore 이슈를 보다가 bulk_seed.py를 들여다봤고, 거기서 토큰 디폴트를 발견했다. 별개 커밋으로 쪼갤 수도 있었는데, 보안 관련 정비는 한 커밋에 묶는 게 히스토리 추적 면에서 낫다고 판단했다. "보안 설정 관련 작업"이라는 맥락이 하나로 묶여 있으면 나중에 감사 로그를 볼 때도 편하다.
자동화 레포는 조직 내에서 "아무도 제대로 안 보는 레포" 취급받기 쉬운데, 실제로는 시크릿을 제일 많이 다루는 쪽 중 하나다. 그래서 오히려 더 엄격하게 관리해야 한다는 게 요즘 생각이다.
다음은 pre-commit 훅으로 시크릿 패턴 감지를 자동화하는 것까지 연결할 계획이다.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.