diff --git a/journey/README.md b/journey/README.md index ceaace1..fafffce 100644 --- a/journey/README.md +++ b/journey/README.md @@ -81,6 +81,7 @@ - [23제어면 gateway workspace-config 단일화](./worklog/260309_23제어면_gateway_workspace_config_단일화.md) - [51123 구IP active runtime 제거 1차](./worklog/260309_51123_구IP_active_runtime_제거_1차.md) - [24서버 robeing runtime workspace-config 단일화](./worklog/260310_24서버_robeing_runtime_workspace_config_단일화.md) +- [260316 runtime env override audit 및 SSOT 원칙 승격](./worklog/260316_runtime_env_override_audit_및_ssot원칙승격.md) - [23 gateway MONITOR_URL 24 monitor 교정 및 실도메인 전수검증](./worklog/260310_23gateway_monitor_url_24monitor_교정_및_실도메인_전수검증.md) - [24전환 배포대상과 ingress 24IP 교정 1차](./worklog/260309_24전환_배포대상과_ingress_24IP_교정_1차.md) - [24서버 NAS 마운트 복원 및 ONNX 백업 실행](./worklog/260309_24서버_nas마운트복원_onnx백업실행.md) diff --git a/journey/worklog/260316_runtime_env_override_audit_및_ssot원칙승격.md b/journey/worklog/260316_runtime_env_override_audit_및_ssot원칙승격.md new file mode 100644 index 0000000..7426e88 --- /dev/null +++ b/journey/worklog/260316_runtime_env_override_audit_및_ssot원칙승격.md @@ -0,0 +1,28 @@ +--- +tags: [infra, runtime, env, ssot, workspace-config, audit, worklog] +--- + +# 260316 runtime env override audit 및 SSOT 원칙 승격 + +## 관련 문서 +- [0_VALUE Infrastructure SSOT Principle](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/infrastructure-ssot-principle.md) +- [0_VALUE Shared Vs Local Boundary](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/workspace-config/shared-vs-local-boundary.md) +- [24서버 robeing runtime workspace-config 단일화](./260310_24서버_robeing_runtime_workspace_config_단일화.md) + +## 작업 +- `0_VALUE` 상위 원칙에 `env_file`을 읽는 compose가 같은 키를 `environment: KEY=${KEY}`로 재선언해 로컬 `.env` placeholder가 `runtime.env`·`secrets.env`를 덮어쓰지 않도록 하는 규칙을 추가했습니다. +- `workspace-config/shared-vs-local-boundary.md`에도 로컬 `.env` placeholder가 active runtime으로 승격되면 안 된다는 경계를 추가했습니다. +- `robeing` 하위 레포들의 `.env`와 `docker-compose.yml`을 전수 검색해 공용 SSOT 키 중복과 compose 오버라이드 잔존을 점검했습니다. + +## 확인된 사실 +- 실제 장애로 확인된 active override는 `rb8001`의 `OPENAI_API_KEY`, `GEMINI_API_KEY`, `DEFAULT_LLM_MODEL` compose 재선언이었습니다. +- 같은 유형의 잔존 후보가 `skill-news`의 `GEMINI_API_KEY`, `skill-rag-file`의 `JWT_SECRET_KEY`, `skill-slack`의 `JWT_SECRET_KEY`, `robeing-monitor`의 `DATABASE_URL` fallback에 남아 있습니다. +- 로컬 `.env`에는 여전히 placeholder 또는 과거 값이 남아 있는 레포가 있습니다. + - `rb8001/.env`: `OPENAI_API_KEY`, `GEMINI_API_KEY`, `JWT_SECRET_KEY` + - `skill_news/.env`: `OPENAI_API_KEY`, `GEMINI_API_KEY`, `DATABASE_URL`, `TEST_DATABASE_URL`, `JWT_SECRET_KEY` + - `skill_email/.env`: `OPENAI_API_KEY`, `GEMINI_API_KEY`, `JWT_SECRET_KEY` + - `skill-rag-file/.env`, `skill-slack/.env`: `JWT_SECRET_KEY` + +## 결론 +- 이번 점검으로 `env_file + environment 재선언`은 개별 프로젝트 실수 수준이 아니라 상위 SSOT 위반 패턴임이 확인됐습니다. +- 따라서 이후 점검 기준은 `값이 중복으로 존재하는가`보다 `공용 키가 compose 재선언으로 active runtime에서 덮이는가`를 먼저 보는 것이 맞습니다.