본문으로 건너뛰기

환경설정 원칙

주제 목차 · 다음: 공개 거래와 인증 점검

이 문서의 결과: 코드와 설정을 분리하는 원칙과 HandStack의 설정 계층을 설명한다.

코드와 설정을 분리하는 이유​

코드는 환경이 바뀌어도 그대로 두고, 연결 문자열·포트·인증 키처럼 환경마다 달라지는 값만 설정으로 교체합니다. 설정을 코드에 고정하면 배포 환경이 바뀔 때마다 코드를 수정해야 하므로 운영 위험이 커집니다. 이 원칙은 twelvefactor 설정에서 더 자세히 다룹니다.

HandStack의 설정 계층​

계층역할
appsettings.jsonack 호스트의 포트, 모듈 목록, 경로, 보안 설정
module.json모듈의 계약 경로, 정적 자산 경로, 로그 경로, 외부 연결 설정
환경 변수HANDSTACK_SRC, HANDSTACK_HOME 등
실행 인자--port, --modules, --appsettings 같은 런타임 옵션

03. 프로젝트와 개발 서버에서 다룬 .localhost.json/.development.json/.test.json/.staging.json/.production.json 프리셋이 바로 이 계층을 환경별로 구분해 관리하는 방법입니다.

실습: 지금 로드된 설정 확인하기​

새 기능을 만들기 전에는 항상 다음을 먼저 확인하는 습관을 들입니다.

  1. 현재 HANDSTACK_HOME이 어디를 가리키는지 확인합니다.
  2. 서버 실행 로그에서 어떤 appsettings 파일이 로드됐는지 확인합니다.
  3. 관련 모듈의 module.json에서 이번 작업과 관련된 설정값을 확인합니다.

자주 하는 오해​

"로컬에서 잘 되면 운영에서도 그대로 되는 것 아닌가요?" 아닙니다. 로컬은 보통 .localhost.json 프리셋을 쓰고, 운영은 .production.json 프리셋을 씁니다. 호스트, 포트 등은 유지되지만 데이터베이스 연결이나 외부 서비스 주소처럼 URL이 아닌 값은 프리셋을 바꿔도 자동으로 바뀌지 않습니다. 각 환경 설정 파일을 직접 확인해야 합니다.

이것만 기억하세요​

  1. 환경마다 달라지는 값은 코드가 아니라 설정으로 교체한다.
  2. 작업 전에는 항상 현재 로드된 설정을 먼저 확인한다.