환경 변수와 설정
어떤 값들은 코드 안에 적어 넣을 수 없습니다: 비밀 키, 데이터베이스 비밀번호, 어떤 서비스의 주소 같은 것들이죠. 그리고 어떤 값들은 앱이 어디서 도는가에 따라 바뀌어야 합니다. 여러분이 노트북에서 테스트하는 코드(dev 환경)는 테스트용 데이터베이스와 대화해야 하고, 사용자들이 실제로 쓰는 살아있는 앱(prod, 즉 프로덕션 환경)은 진짜 데이터베이스와 대화해야 합니다 — 같은 코드를 쓰면서요.
그 답이 환경 변수(흔히 "env vars"라고 부르죠)입니다: 코드 바깥에 머물다가 코드가 실행될 때 코드에 공급되는, 이름 붙은 값들입니다. 코드는 "DATABASE_URL을 줘"라고 말하고, 환경이 어느 것을 건네줄지 결정합니다.
# 설정 파일 (예: .env) — 값은 코드가 아니라 여기에 산다
DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H... # dev = 테스트용 키
SEND_REAL_EMAILS=false # 테스트 중에는 진짜 사용자에게 이메일 보내지 말 것
두 가지 규칙이 진짜 고통을 덜어줄 겁니다:
- 비밀은 절대 코드에 넣지 마세요. 코드 안에 있는 것은 무엇이든 공개될 수 있습니다(특히 공유된 저장소에서요). 그리고 유출된 결제 키나 데이터베이스 비밀번호는 진짜 비상사태입니다. 비밀은 env vars에 속하며, 버전 관리 바깥에 둬야 합니다.
- dev와 prod는 다릅니다. 핵심은 같은 코드가 양쪽 모두에서 올바르게 동작한다는 것입니다. 어느 데이터베이스와 키를 쓸지 결정하는 것이 코드가 아니라 환경이기 때문이죠.