애플리케이션을 개발하다 보면 데이터베이스 주소, API 키, 포트 번호 같은 설정값을 어디에 저장할지 고민하게 됩니다. 이런 값을 코드에 직접 하드코딩하면 여러 환경(개발, 스테이징, 운영)에 배포할 때마다 코드를 수정해야 하는 문제가 생깁니다.

12 Factor App이란

12 Factor App은 현대적인 클라우드 네이티브 애플리케이션을 만들기 위한 방법론으로, 그중 세 번째 원칙이 바로 "설정을 환경 변수에 저장하라"는 것입니다. 이 원칙은 코드와 설정을 명확히 분리해 동일한 코드베이스를 여러 환경에서 재사용할 수 있게 합니다.

환경 변수 사용 예시

# .env 파일 (절대 저장소에 커밋하지 않음) DATABASE_URL=postgres://user:pass@localhost:5432/mydb API_SECRET_KEY=your-secret-key NODE_ENV=production
// 코드에서 사용 const dbUrl = process.env.DATABASE_URL;

왜 하드코딩하면 안 되는가

  • 민감한 정보(비밀번호, API 키)가 소스코드에 노출되어 보안 사고로 이어질 수 있음
  • 환경마다 다른 설정값을 적용하려면 코드를 매번 수정해야 하는 비효율 발생
  • 여러 개발자가 협업할 때 각자의 로컬 환경 설정이 충돌할 수 있음

클라우드 환경에서의 시크릿 관리

단순한 환경 변수를 넘어서, 민감한 시크릿은 전용 관리 도구를 사용하는 것이 더 안전합니다. AWS Secrets Manager, HashiCorp Vault, Cloudflare Workers의 Secrets 기능 등은 암호화된 저장과 접근 권한 관리를 제공합니다.

정리

설정과 코드를 분리하는 것은 단순한 모범 사례를 넘어, 안전하고 유연한 배포 파이프라인을 구축하기 위한 기초 공사와 같습니다. 프로젝트 초기부터 이 원칙을 습관화하는 것이 좋습니다.