diff --git a/app/policy/loader.py b/app/policy/loader.py index 36f7f70..794fca6 100644 --- a/app/policy/loader.py +++ b/app/policy/loader.py @@ -11,7 +11,7 @@ import yaml from policy.schema import DomainPolicy -DEFAULT_POLICY_PATH = "domain_policy.yaml" +DEFAULT_POLICY_FILENAME = "domain_policy.yaml" POLICY_PATH_ENV = "POLICY_PATH" @@ -21,8 +21,23 @@ def _resolve_path(path: str | None) -> Path: env_path = os.environ.get(POLICY_PATH_ENV) if env_path: return Path(env_path) - # repo root 기준 상대 경로 — working dir 에 따라 결정 - return Path(DEFAULT_POLICY_PATH) + + # 검색 순서 (multi-env 호환): + # 1. cwd / domain_policy.yaml 로컬 pytest (repo-root 실행) + # 2. /app / domain_policy.yaml container bind-mount 경로 + # 3. /app/../domain_policy.yaml container: /app 의 parent + # 4. .parent.parent.parent / yaml policy 패키지 기준 repo-root + candidates = [ + Path.cwd() / DEFAULT_POLICY_FILENAME, + Path("/app") / DEFAULT_POLICY_FILENAME, + Path("/app").parent / DEFAULT_POLICY_FILENAME, + Path(__file__).resolve().parent.parent.parent / DEFAULT_POLICY_FILENAME, + ] + for c in candidates: + if c.is_file(): + return c + # 찾지 못한 경우 첫 후보 반환 → 나중에 FileNotFoundError 로 명확히 실패 + return candidates[0] @lru_cache(maxsize=8) diff --git a/docker-compose.yml b/docker-compose.yml index e18ca3b..0195397 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -139,6 +139,7 @@ services: volumes: - ${NAS_NFS_PATH:-/mnt/nas/Document_Server}:/documents - ./config.yaml:/app/config.yaml:ro + - ./domain_policy.yaml:/app/domain_policy.yaml:ro - ./scripts:/app/scripts:ro - ./logs:/app/logs - ./migrations:/app/migrations:ro