18.2.환경별 설정 패키징하기

  • 여러 가지 애플리케이션 프레임워크에서 환경별 설정 파일을 모두 배포에 포함시킬 수 있는 기능을 제공한다.
  • 애플리케이션 플랫폼이 환경 이름과 일치하는 설정 파일을 읽어 들여 이를 기초로 애플리케이션을 설정한다.
  • 닷넷 코어는 다음과 같은 두 파일로부터 기본 설정값을 읽어 들이는 방식으로 이것이 구현돼 있다.
  • appsettings.json: 모든 환경에 공통적으로 적용되는 설정
  • appsettings.[환경_이름].json: 환경별로 적용되는 오버라이드 설정 파일
  • 환경 변수: 환경 이름 정의 및 오버라이드 설정
  • 미리 정해진 환경 변수의 값으로 현재 환경 이름을 지정해 주면 해당 환경의 설정 파일을 다른 파일보다 먼저 읽어 들인다.

실습 to-do 애플리케이션을 기본 설정(개발 환경)으로 실행한 다음, 테스트 환경 설정으로 다시 실행하라.

# to-do 애플리케이션을 기본 설정으로 실행 docker container run -dp 8083:80 diamol/ch18-todo-list
e01c02342f3720dd0806091a5e43d0b9d36108b90a60b27cda3e9bf82ddb1feb

# to-do 애플리케이션을 테스트 환경 설정으로 실행 docker container run -dp 8084:80 -e DOTNET_ENVIRONMENT=Test diamol/ch18-todo-list 
7dc1c7adb1c87fd70093fc837d6e520d089bcc883433f8649a8cd35cb07df328

  • CI/CD 파이프라인에서 설정 파일을 소스 코드로 가져와 이미지를 빌드하는 방법으로 개발과 설정 관리를 분리할 수 있다.
  • 단점은 이미지에 포함시킬 수 없는 민감한 정보 때문에 여전히 따로 외부에서 컨테이너에 주입해야 하는 정보가 남는다는 것이다.

실습 to-do 애플리케이션은 이미지에 모든 환경의 설정 파일을 포함하고 있지만, 오버라이드 설정 파일도 사용할 수 있다. 운영 환경 설정으로 애플리케이션을 실행하면 데이터베이스 서버를 찾지 못해 오류를 일으키지만, 오버라이드 설정 파일로 로컬 데이터베이스 파일을 사용하도록 설정할 수 있다.

  • 이 컨테이너의 설정은 appsettings.json + appsettings.production.json + prod-local/local.json 을 병합하여 구성한다
001)  ch18/exercises/todo-list
002) 
003)  docker container run -d -p 8085:80 \
004)   -e DOTNET_ENVIRONMENT=Production \
005)   -v "$(pwd)/config/prod-local:/app/config-override" \
006)   diamol/ch18-todo-list
007) 59324e6e1918bcfba76beb45e25ae09744164e8c944d82e44dcb8c35fa893e83

  1. 004: node-config를 사용하면 환경 변수 값으로 JSON 문자열을 지정해야 설정을 오버라이드할 수 있지만, 닷넷 코어에서는 각각의 환경 변수 형태로 설정을 오버라이드 할 수 있다.

실습 앞서와 마찬가지로 운영 환경 설정으로 로컬에서 애플리케이션을 실행하되, 환경 변수를 이용해 릴리스 주기 정보를 오버라이드하라.

docker container run -d -p 8086:80 \
  -e DOTNET_ENVIRONMENT=Production \
  -e release=CUSTOM \
  -v "$(pwd)/config/prod-local:/app/config-override" \
  diamol/ch18-todo-list

주의 * 이미지에 설정 파일을 모두 포함시키는 방법은 보안상 좋지 않다 * ex) appsettings.json, appsettings.production.json * 스스로 판단하기에 민감하지 않은 정보만을 이미지에 포함시키겠지만 서버 이름, URL, 파일 경로, 로그 수준, 캐시 크기까지 생각지도 못한 것이 공격자에게 유용한 정보가 될 수 있다.

links

social