import os from config.config_loader import Configs from config.config_models import WebServerConfig, LogConfig, MainDBConfig, LpsDBConfig, JwtToken, StorageConfig, MailConfig # 실행 환경 결정 (기본 local). 환경변수 APP_ENV 로 변경. APP_ENV = os.environ.get("APP_ENV", "local") _config_dir = os.path.dirname(__file__) _config_file = os.path.join(_config_dir, f"config.{APP_ENV}.toml") # 운영 전제: 항상 APP_ENV=local 로 띄운다 → config.local.toml 사용 (test/docker 도 local 로 실행). if not os.path.exists(_config_file): raise FileNotFoundError(f"설정 파일이 없습니다: {_config_file} (APP_ENV={APP_ENV}). APP_ENV=local 로 실행하세요.") configs = Configs(_config_file) web_server_config: WebServerConfig = configs.get(WebServerConfig) log_config: LogConfig = configs.get(LogConfig) main_db_config: MainDBConfig = configs.get(MainDBConfig) # [LpsDBConfig] 섹션이 없는 toml(구버전)에서도 죽지 않게 기본값 폴백(name 빈 값 → LPS 연동 비활성). lps_db_config: LpsDBConfig = configs.get(LpsDBConfig) or LpsDBConfig() jwt_token_config: JwtToken = configs.get(JwtToken) storage_config: StorageConfig = configs.get(StorageConfig) # [MailConfig] 섹션이 없는 toml(구버전)에서도 죽지 않도록 기본값으로 폴백(전 필드 빈 값 → 발송 시 EmailUnavailable). mail_config: MailConfig = configs.get(MailConfig) or MailConfig() # DB 접속 env override (config.local.toml 유지, 도커에서 host 만 교체). 로컬은 env 미설정 → toml 그대로. def _apply_db_env_override(cfg: MainDBConfig): h = os.environ.get("DB_HOST") if h: cfg.write_host = cfg.read_host = h if os.environ.get("DB_PORT"): cfg.write_port = cfg.read_port = int(os.environ["DB_PORT"]) if os.environ.get("DB_USER"): cfg.write_id = cfg.read_id = os.environ["DB_USER"] if os.environ.get("DB_PASSWORD"): cfg.write_pw = cfg.read_pw = os.environ["DB_PASSWORD"] if os.environ.get("DB_NAME"): cfg.name = os.environ["DB_NAME"] _apply_db_env_override(main_db_config) # LPS 결과 DB(읽기전용) env override — 도커에서 host 등만 교체. 로컬은 toml 그대로. def _apply_lps_db_env_override(cfg: LpsDBConfig): if os.environ.get("LPS_DB_HOST"): cfg.read_host = os.environ["LPS_DB_HOST"] if os.environ.get("LPS_DB_PORT"): cfg.read_port = int(os.environ["LPS_DB_PORT"]) if os.environ.get("LPS_DB_USER"): cfg.read_id = os.environ["LPS_DB_USER"] if os.environ.get("LPS_DB_PASSWORD"): cfg.read_pw = os.environ["LPS_DB_PASSWORD"] if os.environ.get("LPS_DB_NAME"): cfg.name = os.environ["LPS_DB_NAME"] _apply_lps_db_env_override(lps_db_config) # LPS API 주소 env override (도커: http://lps-api:9600 또는 host.docker.internal:9600) if os.environ.get("LPS_BASE_URL"): web_server_config.lps_base_url = os.environ["LPS_BASE_URL"] # LPS API guard 키 (LPS 는 toml 단일 관리로 전환 — negodata 쪽은 기존 관례대로 toml+env override 유지) if os.environ.get("LPS_API_KEY"): web_server_config.lps_api_key = os.environ["LPS_API_KEY"]