- 설정 정보는 엄격히 코드와 분리되어야 한다. 설정은 배포 환경에 따라서 달라지지만 코드는 달라지지 않는다.
- 어플리케이션에서 설정이 분리되어있는지 여부를 확인할 수 있는 간단한 방법은 어플리케이션 내부에 어떠한 인증 정보도 포함시키지 않고 지금 당장 오픈 소스로 공개 할 수 있는지 검토해보는 것이다.
- 여기서
설정
이라는 단어의 정의는 어플리케이션 자체에 영향을 주는 설정은 포함하지 않는다는 점에 주의할 필요가 있다. - 예를 들어, 레일스의 config/routes.rb 나 스프링의 코드 모듈들이 어떻게 연결되어있는지는 어플리케이션의 내부 설정이다.
- 이러한 설정들은 배포 환경 사이에 별 차이가 없으므로 코드에 저장하는 게 좋다.
- 설정을 코드와 분리하기 위해 설정 정보를 담은 파일을 버전 관리에 포함시키지 않는 방법도 있다.
- 어플리케이션 설정을 이름으로 구분하기도 한다.
dev
,stg
,prd
.. - 프로젝트가 커져감에 따라 다양한 환경 변수를 담은 파일들이 생길 수 있다.
- 결과적으로 서로 다른 설정을 가진 환경은 폭발적으로 늘어나며 배포를 관리하는 일은 매우 어려워진다.
- 이 경우 설정을 인스턴스의 환경변수로 관리한다.
- 환경 변수가 “환경”으로 그룹화 되지는 않지만, 대신에 각 배포에 대해서 독립적으로 관리 된다.
- 환경 변수를 통해 설정을 관리하는 방식은 어플리케이션이 더 많은 배포로 확장되어 가는데 있어서 자연스럽게 확장이 가능하다.
- http://the-twelve-factor-app.herokuapp.com/config (Twelve - Factor App)