fix: Dockerfile chmod 에러 수정 및 환경변수 지원 추가
- Dockerfile: chmod 명령어에 RUN 추가 - .env.example: 모든 설정 항목 및 자세한 주석 추가 - config.yaml: 각 설정 항목에 대한 상세 주석 추가 - config.sample.yaml: 샘플 파일 주석 개선 - conf/db.py: 환경변수 우선 적용 기능 추가 - lib/common.py: load_config에 환경변수 오버라이드 지원 - 환경변수로 모든 설정값 제어 가능 (DB, API, POS 등)
This commit is contained in:
@ -40,6 +40,7 @@ def get_logger(name: str) -> logging.Logger:
|
||||
def load_config(config_path: str = None) -> dict:
|
||||
"""
|
||||
conf/config.yaml 파일을 UTF-8로 읽어 파이썬 dict로 반환
|
||||
환경변수가 있으면 우선 적용
|
||||
|
||||
Args:
|
||||
config_path: 설정 파일 경로 (없으면 기본값 사용)
|
||||
@ -59,12 +60,67 @@ def load_config(config_path: str = None) -> dict:
|
||||
config = yaml.safe_load(f)
|
||||
if config is None:
|
||||
raise ValueError(f"설정 파일이 비어있음: {config_path}")
|
||||
|
||||
# 환경변수로 설정 덮어쓰기
|
||||
_apply_env_overrides(config)
|
||||
|
||||
return config
|
||||
except FileNotFoundError:
|
||||
raise FileNotFoundError(f"설정 파일을 찾을 수 없음: {config_path}")
|
||||
except yaml.YAMLError as e:
|
||||
raise yaml.YAMLError(f"YAML 파싱 오류: {e}")
|
||||
|
||||
def _apply_env_overrides(config: dict) -> None:
|
||||
"""환경변수로 설정값 덮어쓰기"""
|
||||
# 데이터베이스 설정
|
||||
if os.getenv('DB_HOST'):
|
||||
config.setdefault('database', {})
|
||||
config['database']['host'] = os.getenv('DB_HOST', config['database'].get('host'))
|
||||
config['database']['user'] = os.getenv('DB_USER', config['database'].get('user'))
|
||||
config['database']['password'] = os.getenv('DB_PASSWORD', config['database'].get('password'))
|
||||
config['database']['name'] = os.getenv('DB_NAME', config['database'].get('name'))
|
||||
|
||||
# 테이블 접두사
|
||||
if os.getenv('TABLE_PREFIX'):
|
||||
config['table_prefix'] = os.getenv('TABLE_PREFIX')
|
||||
|
||||
# API 설정
|
||||
if os.getenv('DATA_API_SERVICE_KEY'):
|
||||
config.setdefault('DATA_API', {})
|
||||
config['DATA_API']['serviceKey'] = os.getenv('DATA_API_SERVICE_KEY')
|
||||
if os.getenv('DATA_API_START_DATE'):
|
||||
config.setdefault('DATA_API', {})
|
||||
config['DATA_API']['startDt'] = os.getenv('DATA_API_START_DATE')
|
||||
if os.getenv('DATA_API_END_DATE'):
|
||||
config.setdefault('DATA_API', {})
|
||||
config['DATA_API']['endDt'] = os.getenv('DATA_API_END_DATE')
|
||||
|
||||
# GA4 설정
|
||||
if os.getenv('GA4_API_TOKEN'):
|
||||
config.setdefault('ga4', {})
|
||||
config['ga4']['token'] = os.getenv('GA4_API_TOKEN')
|
||||
if os.getenv('GA4_PROPERTY_ID'):
|
||||
config.setdefault('ga4', {})
|
||||
config['ga4']['property_id'] = int(os.getenv('GA4_PROPERTY_ID'))
|
||||
if os.getenv('GA4_SERVICE_ACCOUNT_FILE'):
|
||||
config.setdefault('ga4', {})
|
||||
config['ga4']['service_account_file'] = os.getenv('GA4_SERVICE_ACCOUNT_FILE')
|
||||
|
||||
# UPSolution 설정
|
||||
if os.getenv('UPSOLUTION_ID'):
|
||||
config.setdefault('upsolution', {})
|
||||
config['upsolution']['id'] = os.getenv('UPSOLUTION_ID')
|
||||
config['upsolution']['code'] = os.getenv('UPSOLUTION_CODE')
|
||||
config['upsolution']['pw'] = os.getenv('UPSOLUTION_PW')
|
||||
|
||||
# 시스템 설정
|
||||
if os.getenv('MAX_WORKERS'):
|
||||
config['max_workers'] = int(os.getenv('MAX_WORKERS'))
|
||||
if os.getenv('DEBUG'):
|
||||
config['debug'] = os.getenv('DEBUG', 'false').lower() == 'true'
|
||||
if os.getenv('FORCE_UPDATE'):
|
||||
config['force_update'] = os.getenv('FORCE_UPDATE', 'false').lower() == 'true'
|
||||
|
||||
def retry_on_exception(max_retries: int = 3, delay: float = 1.0, backoff: float = 2.0):
|
||||
"""
|
||||
지정된 횟수만큼 재시도하는 데코레이터
|
||||
|
||||
Reference in New Issue
Block a user