PREGO v4.0 Implementation Index
Index of code, configuration, and documentation produced from the plan prego-saas-control-platform-v4-implementation-plan.
Phase summaries
| Phase | Summary doc |
|---|---|
| Phase 1 | phase1-implementation-summary |
| Phase 2 | phase2-usage-r2-kv |
| Phase 3 | phase3-governance-summary |
| Phase 4 | phase4-us-autoscaler-summary |
| Phase 5 | phase5-eu-gdpr-summary |
For the full directory-by-directory output and planning doc index, see the 한국어 section below.
flowchart TB I[Implementation Index] --> P[Phase 1-5 summaries] I --> D[Directory output] I --> R[Runbook] I --> Q[Planning docs]
한국어 {#korean}
PREGO v4.0 구현 산출물 인덱스
기획서 prego-saas-control-platform-v4-implementation-plan 기준으로 생성된 코드·설정·문서 일람.
Phase별 요약 문서
| Phase | 요약 문서 |
|---|---|
| Phase 1 | phase1-implementation-summary |
| Phase 2 | phase2-usage-r2-kv |
| Phase 3 | phase3-governance-summary |
| Phase 4 | phase4-us-autoscaler-summary |
| Phase 5 | phase5-eu-gdpr-summary |
디렉터리별 산출물
| 경로 | 내용 |
|---|---|
migrations/ | D1 0001_init ~ 0008_rag_ai |
workers/rag-query/ | RAG Query Worker (Vectorize + Workers AI) — 스켈레톤·스텁 응답. |
.github/workflows/ | pulumi-preview, pulumi-up, pulumi-destroy |
prego-pulumi/ | main.py, config/region.py, Pulumi.sg/us/eu.yaml |
workers/control-plane/ | Stripe Webhook, D1, trace_events, audit_logs, provision trigger |
workers/usage-writer/ | POST /usage → R2 usage_raw |
workers/usage-aggregator/ | Cron R2 → usage_rollups |
workers/cycle-close/ | Cron 월말 → usage_cycle_totals, Stripe |
workers/purge-job/ | Cron 30일 Pending_Deletion → Hard Purge §5.8 |
workers/autoscaler/ | Cron Health Score, scaling_events, Scale Out/In |
| prego-ansible/ (별도 레포) | Ansible playbook, inventory, roles (docker, mariadb_server, frappe_bench, frappe_site). Ref: ansible-implementation-plan.md, ansible-implementation-sequence.md. bench rc:127 해결: ansible-frappe-bench-rc127-resolution-plan.md. |
| prego-docker/ (별도 레포) | Docker 이미지 빌드: Dockerfile(apps.json·tag pinning), build-and-push(repository_dispatch 전용·Verify image apps·멀티아키텍처), trivy-scan.yml, compose(prod·bluegreen). Ref: prego-docker-implementation-plan.md. |
| prego-control-plane/ (별도 레포) | Control Plane Worker: POST /v1/tenants(202+job_id), GET /v1/jobs/:id, Stripe webhook, provision-complete 콜백, KV(TENANT_ORIGINS) 갱신, internal/trace·nodes. D1 migrations 0001~0006. Ref: api-control-plane-implementation-plan.md Phase A. |
apps/www/ | 데모 테넌트 온보딩 웹: 위저드(패키지·서브도메인·로그인·결제·테넌트 정보·제출·프로비저닝 대기), api.js(Control Plane 연동), billing.html. PREGO_CONTROL_PLANE_URL·PREGO_AUTH_URL·PREGO_BILLING_PROXY_URL. Ref: tenant-onboarding-demo-www-plan.md, tenant-onboarding-flow.md. |
infra/zuplo_sync.ts | Zuplo API Key 등록 (tenant_id, slug, subdomain 메타) |
infra/logpush_setup.ts | Logpush Job 생성·목록·삭제 (R2), create-all-email-workers·workers_trace_events·script-name 필터. |
infra/logpush_r2_lifecycle_example.json | R2 Logpush prefix별 90일 만료 Lifecycle 규칙 예시. |
docs/runbook/github-secrets.md | Secrets·Environment 안내 |
scripts/smoke-verify-control-plane.sh | Control Plane R1·R5·R7 스모크 검증 (CONTROL_PLANE_URL, INTERNAL_API_KEY). Ref: prego-control-plane-dashboard §배포 후 검증. |
API·Worker
- Worker·API 개요: API_OVERVIEW.md — Control Plane, usage-writer, usage-aggregator, cycle-close, purge-job, autoscaler 엔드포인트·Cron 요약.
배포·운영
- 배포 체크리스트: DEPLOYMENT_CHECKLIST.md — Phase별 첫 배포·첫 실행 전 점검 항목.
- D1 마이그레이션 적용: 적용 순서 및 wrangler 명령은 배포 체크리스트·Control Plane 레포 참조. (migrations/APPLY 문서는 본 docs 트리 외부.)
- 인수·검증 체크리스트: QA_CHECKLIST.md — Phase 1~5 배포 후 최소 확인 항목.
- 운영 Runbook 요약: docs/runbook/OPERATIONS.md — Pulumi Up/Destroy, 실패 시 확인, Secrets, Worker 수동 트리거.
- Ansible 초기화 후 재설치: docs/runbook/ansible-clean-and-reinstall.md — 기존 Frappe/MariaDB 제거 후 playbook 처음부터 재실행.
- Redis 서버 분리 전환·롤백: docs/runbook/redis-migration.md — 전용 Redis 전환 절차, 검증, 체크리스트, 롤백.
- MariaDB 백업 → R2: docs/runbook/mariadb-backup-r2.md — 일별 덤프·rclone·R2 설정·Cron. GTape §3.2–3.3.
- MariaDB 10.6→10.11 마이그레이션: docs/runbook/mariadb-10.6-to-10.11-migration.md — v16 전제 DB 업그레이드·덤프 복원·In-Place·롤백. frappe-v15-to-v16-upgrade-plan Phase 4.
- Frappe v16 롤백: docs/runbook/frappe-v16-rollback.md — v16→v15 복귀·이미지·DB·Ansible 변수 롤백 절차.
- DiRT 복구 검증: docs/runbook/dirt-restore-verify.md — 월 1회 R2 백업 복원·무결성 검증. GTape §3.4.
- Logpush 설정 (R2): docs/runbook/logpush-setup.md — 에지 로그 → prego-logs R2, create/list/delete. cloudflare-logpush-observability-plan.md. 이메일·Workers 로그:
infra/logpush_setup.tscreate-all-email-workers,--dataset workers_trace_events·--script-name, 버킷cloudflare-managed-f6a80c57; §1b·§5 Lifecycle. 기획: cloudflare-logpush-email-workers-r2-plan.md. Lifecycle 예시:infra/logpush_r2_lifecycle_example.json. - prego_saas → prego-docker 트리거: docs/runbook/prego-saas-app-trigger-prego-docker.md — custom app push 시 이미지 재빌드 트리거 설정(PAT·워크플로 복사).
- prego-saas-app 프로비저너 사이트 설치: docs/runbook/prego-saas-app-provisioner-install.md — bench get-app/install-app, prego_provisioner_sites·Stripe·(선택) BENCH_DIR/MARIADB_ROOT_PASSWORD, 확인 항목.
- prego-docker 이미지 서버 배포: docs/runbook/prego-docker-image-deploy.md — iamfork/prego-repo Compose 기동, digest 고정, Blue/Green·승격 요약.
- prego-docker 이미지 검증·취약점: docs/runbook/prego-docker-image-verify.md — 앱 포함 여부 검증(ls apps/), 빌드 후 CI Verify image apps 단계(build.yml), Trivy 로컬·주기 스캔(trivy-scan.yml). 기획: prego-docker-image-verify-and-vulnerability-plan.md §5 정책. 취약점 수치 미개선 원인·감소 기획: prego-docker-vulnerability-reduction-plan.md.
- 프로비저닝 파이프라인 (수동 Ansible·Zuplo): docs/runbook/provision-tenant-pipeline.md — 인벤토리·Ansible 실행·Zuplo Sync·콜백·§3.5 테넌트 상세(additional_users) 조회, §5 Zuplo 플랜별 Rate Limit (R6).
- DB·Redis 증설·배치 정책 (R7): docs/runbook/db-redis-scaling-policy-r7.md — DB/Redis 배치 규칙, 상한, 수동 증설 절차.
- 테넌트 온보딩 플로우 (www→프로비저닝): docs/runbook/tenant-onboarding-flow.md — www 환경 변수, Control Plane 연동 요약, 워크플로 입력, 장애 시 확인 순서.
기획서
- 구현 기획서: prego-saas-control-platform-v4-implementation-plan.md
- 통합 아키텍처: saas-unified-architecture-hetzner-cloudflare-zuplo-plan.md
- 지능형 자동화 구현 계획: intelligent-automation-implementation-plan.md — 전 구간 자동화(Pulumi→Ansible→Zuplo→D1), 모니터링, AI 서버 배치 구현 순서·산출물·검증.
- 전 구간 자동화 워크플로 설계: provision-tenant-workflow-design.md — provision-tenant.yml / Provision Worker 설계 기획(입출력·단계·콜백·보안). Zero-Touch 이벤트 흐름(수신→큐→Worker: Ansible→KV→완료), Playbook 태스크 구성·확장성(DB 부하 분산·리소스 격리·로그 통합) 전략 반영.
- API 기반 컨트롤 플레인: api-control-plane-implementation-plan.md — Control Plane vs Data Plane 분리, 5단계 워크플로(진입·큐·오케스트레이션·상태·콜백), Contract(비즈니스 의도만 API로), Plan별 DB·Zuplo KV 라우팅·Self-Healing·Dry-run/Idempotency/Shadow. Queues·보상 트랜잭션·Update/Delete 큐(§12–§15). 서비스 자원 모니터링·보안·데이터백업 §16–§20. 구현 Phase A→B→C→D(§21). Appendix A 퀵 레퍼런스 · B 현행 분석·개선안 · C 테넌트 생애주기(시나리오 1~8·Placement·Grace·Purge). (기존 3개 문서 통합)
- RAG AI 엣지 아키텍처: rag-ai-edge-architecture-plan.md — Full Edge-Computing, Zuplo+Workers, Vectorize 멀티테넌시, D1/R2, 엔터프라이즈 기능(Guardrail·Document Intelligence·Privacy Masking·Audit), Phase 1–4 로드맵.
- RAG AI Phase 1 구현 계획: rag-ai-phase1-implementation-plan.md — Data Ingestion Worker, RAG Query Worker, Zuplo 메터링 Policy, Vectorize·D1 프로비저닝, Wrangler 배포 순서·검증.
- Worker AI 구현 기획서: worker-ai-implementation-plan.md — Edge-Native Data Ingestion·RAG Query·Compliance Checker·PII Filter 요구사항, UI/UX·보안·배포 순서·Phase, 코드 없이 명세만.
- 네이밍 규칙: naming-conventions.md — 서버·DB·테넌트·DNS·Ansible·로그 등 프로젝트 전반 네이밍 규칙.
- 테넌트 서브도메인·DNS: tenant-subdomain-dns-design.md — 가입 시 subdomain.pregoi.com 등록, 채택 방식 C: 내부 canonical
tenant-{short_id}.pregoi.com+ 사용자 CNAME. 라우팅은 canonical로만 처리. - www.pregoi.com 가입→결제→프로비저닝 플로우: www-pregoi-com-signup-to-provisioning-flow.md — 클라이언트가 www.pregoi.com 접속, Gmail SSO/이메일 가입, 패키지(무료/유료) 선택·결제, 리소스 할당 로직, 초기 인프라 자동화 단계 정리 및 단계별 현재 구현 상태.
- 테넌트 온보딩 데모 www 기획·체크리스트: tenant-onboarding-demo-www-plan.md — Slug·서브도메인 Rule, 위저드 단계, 결제 후 테넌트 정보·additional_users, §10 구현 체크리스트(전 항목 구현 완료). 운영: tenant-onboarding-flow.md.
- 5단계 확인 및 제출 → 제출 후 실제 진행 기능: step5-confirm-submit-to-provisioning-flow.md — 5단계(확인 및 제출) 화면 요약, 「시작하기」 클릭 시 www·Control Plane·워크플로·Ansible·Zuplo·콜백까지 단계별 동작 및 확인 항목→백엔드 사용처 매핑 (코드 기준 분석, 코드 없음).
- 온보딩 상세 변경 (통합): tenant-onboarding-demo-www-plan.md §16 — Step 2 제거·6단계 전환, Step 4 필드·UI(회사명·서브도메인·약어·관리자 First/Last), 플랜별 팀원 한도(Free/Basic 5, Pro/Ent 10), Step 6 백엔드 연동·관리자 URL. (기존 3개 문서 통합)
- 테넌트 온보드 후 리소스 할당 플로우·케이스별 관리: tenant-onboard-resource-allocation-flow-plan.md — Submit 후 단계별 리소스 할당 플로우(API·Placement·Queue/workflow·서버 해석·DNS·Ansible·Zuplo·콜백), Control Plane의 현재 Placement·노드·메트릭 관리, 시나리오별(서버 메모리 포화·DB/Redis 증설·패키지별 설치·Ansible/Zuplo limit) 현재 vs 추천 정의. §6 R1~R8 상세 요건. §7 구현 Phase·우선순위·의존성. §8 Runbook·운영 절차 제안. §10 R1–R8 구현 완료 상태·배포·검증 체크리스트 (prego-control-plane, Prego workflow, prego-ansible, Runbook 반영). R7 GET /internal/db-host·워크플로 resolve-server 연동. R2/R8 기준값 env(PLACEMENT_, SATURATION_) 조정 가능. 배포 후 스모크 검증:
scripts/smoke-verify-control-plane.sh. - Placement 테스트 데이터·시뮬레이션·모니터링 페이지: placement-test-data-and-simulation-dashboard.md — Placement(기존 노드 vs 새 서버) 로직 검증용 Order 10건 테스트 데이터 정의(free/basic/professional/enterprise, sg/us/eu), 초기 상태(시나리오 A/B), 드라이 런 시뮬레이션 vs E2E 프로비저닝 검증 범위, 모니터링 페이지 요건(테스트 데이터 로드·Placement 실행 결과·노드·메트릭·provision_jobs·단계별 타임라인·동적 적층 시각화). 코드 없음.
- Hetzner·Pulumi·Trial·독립 서버 리소스 모델: hetzner-pulumi-trial-dedicated-server-resource-model.md — 모든 서버 Hetzner, prego-pulumi 연동이 기획서·워크플로에 반영된 여부 확인. 무료 Trial(~3개월) 종료 후 유료 전환/서비스 종료, 처음부터 유료·독립(전용) 서버(테넌트당 Frappe 1 + MariaDB 1 + Redis 1 = 3대) 현재 설계 반영 여부 및 서버 리소스 관리 모델 추천(공유 풀 vs 독립 풀). 코드 없음.
- 프로비저닝 완료 후 테넌트 URL 테스트: tenant-url-testing-plan.md — www 7단계 생성 URL 검증 요건·테스트 관점(DNS·TLS·도달성·Frappe)·수동 절차·선택 자동화. 코드 없음.
- DB 분리·사용량 기반 확장: saas-db-separation-and-scaling-plan.md — Frappe와 별도 DB 서버 MariaDB 연동, Pulumi로 DB 서버 프로비저닝·사용량 모니터링 기반 확장(Replica/샤딩), Ansible로 설치·연동. Phase 1(단일 DB 서버) → Phase 2(Primary+Replica) → Phase 3(샤딩) 로드맵.
- 확장 SaaS 멀티테넌시(Redis·R2): saas-expanded-multitenancy-redis-storage-plan.md — Redis 별도 서버 분리, 각 고객(테넌트)별 저장공간 R2 분리, Full HA(DB+Redis HA)·샤딩·프로비저닝 자동화. 테넌트 100+ 확장 목표.
- Redis 서버 분리 (Pulumi·Ansible): redis-separation-pulumi-ansible-plan.md — A안 단일 Redis, DB 1/2/3 역할 분리. 설계 목표(테넌트 격리·중앙 집중형 Redis·운영 자동화), Competing Consumers·Throttling·Health Check 인사이트, Phase 1~3 로드맵(L7·K8s·멀티DC). Pulumi Redis VM·방화벽, Ansible redis_server Role·App Redis URL, 전환·롤백·체크리스트.
- Cloudflare 오케스트레이션·GTape 백업: cloudflare-orchestration-and-gtape-backup-plan.md — Workers 동적 테넌트 라우팅(KV→오리진 프록시), Tunnel Gatekeeper(Zero Trust), GTape 4단계(Soft Delete·스냅샷·R2 Offsite·DiRT 복구 검증). 현재 시스템 적용 방안(Pulumi·Ansible·tenant canonical·R2) 정리.
- Cloudflare Logpush 기반 통합 로그 관측성: cloudflare-logpush-observability-plan.md — Logpush·R2 중심 중앙 집중형 로그 파이프라인, Golden Signals(에러·지연·트래픽·보안), Phase 1~3 로드맵, 샘플링·PII 마스킹·TTL 운영 전략. 프로젝트 전반 로그 관리 방법.
- Logpush 이메일·Workers R2 수집: cloudflare-logpush-email-workers-r2-plan.md — 버킷
cloudflare-managed-f6a80c57, Workers Trace Events·HTTP Requests, 경로workers_trace_events/·http_requests/, 이메일 검증 대시보드 연동·Lifecycle. 구현:infra/logpush_setup.ts(create-all-email-workers·script-name),infra/logpush_r2_lifecycle_example.json, Runbook §1b·§5. - Cloudflare 기반 모니터링 (Serverless Observability): cloudflare-based-monitoring-plan.md — Prometheus/Grafana 대체: Analytics Engine·D1·Workers 대시보드·Logpush/R2·알림. Hybrid(인프라 지표 보완) 권장. api-control-plane §16–§17과 연동.
- Analytics Engine 연동 구현: cloudflare-analytics-engine-implementation.md — 데이터 포인트 스키마·호출 위치. prego-control-plane: wrangler
ANALYTICS_ENGINE·src/analytics.ts·index/internal 연동. - 커스텀 대시보드 구현: cloudflare-dashboard-implementation.md — D1 기반 메트릭 API·UI 행 구성. prego-control-plane:
GET /internal/metrics/summary,GET /internal/dashboard(HTML·Chart.js·Node health),POST /internal/server-metrics(Hybrid). D1 migration 0007 server_metrics. - OTP·이메일 통합: 03-auth-otp-email/otp-and-email-consolidated.md — OTP 플로우·템플릿 소유·Zuplo 호출·가독성·Resend 마이그레이션·이메일 전달·템플릿 통합·OTP 입력 UI. (10개 문서 통합)
- OTP 검증 통합: 03-auth-otp-email/otp-verify-consolidated.md — OTP 검증·passcode 플로우·CORS·네트워크 에러·대시보드 UX·KV 코드 일치(B6). (5개 문서 통합)
- Docker Hub 스택·Ansible 배포: docker-hub-stack-ansible-deploy-plan.md — Frappe v15 추천 스택(MariaDB 10.6, Redis 6.2, Node/Python 버전), Docker Hub에서 DB·Redis·App 이미지 다운로드·설치, Ansible IaC·네트워크 격리·멱등성·데이터 보존. 패턴 A(서버 분리) vs B(단일 호스트), 현행 prego-ansible과의 정합성.
- MariaDB 10.6 my.cnf 최적화: mariadb-mycnf-optimization-plan.md — 8GB~16GB RAM·Frappe 특화 파라미터(buffer_pool·flush·연결·utf8mb4), flush_log_at_trx_commit=2 시 R2 백업 병행, Binlog·MySQLTuner.
- 리소스 사용량 절감(안전 적용): resource-optimization-safe-adoption-plan.md — Noisy Neighbor 방지·Docker Soft/Hard·memswap·Control Plane plan_limits 동적 적용, Redis 튜닝(maxmemory·allkeys-lru), Gunicorn max-requests·jitter, CDN/Static Offload(R2·선행 조건), OOM 90%·CPU 스로틀 모니터링. 기존 시스템 영향 없이 적용 가능한 항목만 단계별 적용 순서·선행 조건 정리. ProxySQL·PyPy·D1 하이브리드는 제외. 요약: resource-optimization-quick-reference.md.
- Frappe 바로 구축 템플릿·Runbook: saas-frappe-build-templates-and-runbook.md — Redis 3인스턴스(cache/queue/socketio) 분리+HA Compose, App 클러스터 docker-compose+Frappe·nginx, Worker Runbook. 모니터링: Cloudflare 기반 관측성(권장) 또는 Hybrid 시 Prometheus+Grafana(Data Plane 로컬)·테넌트 관측성. 동시 3,000 기준.
- Ansible Frappe bench rc:127 해결 기획: ansible-frappe-bench-rc127-resolution-plan.md — bench 경로/venv 미생성 원인, 단기(동적 경로)·중기(init 검증)·장기(이미지/Golden Image) 해결안.
- Frappe Docker 커스텀 이미지(HRMS 포함) 로컬 빌드: frappe-docker-hrms-custom-image-build-plan.md — 공식 이미지(ERPNext만) → bench get-app/apps.json 기반 HRMS 포함 이미지 재빌드, 로컬 빌드 코드 구현용 기획. §10 멀티플랫폼(amd64·arm64만, linux/386 미지원) 빌드·Docker Hub 업로드 가이드(buildx, prego-builder, Builder/Final 2단계, 매니페스트 검증, Production-Ready) 포함.
- prego-docker GitHub Actions·Docker Hub 푸시: prego-docker-github-actions-docker-hub-plan.md — prego-docker 레포 기준, frappe_docker custom Containerfile + apps.json으로 ERPNext v15·HRMS 멀티아키텍처(linux/amd64, linux/arm64) 이미지 빌드, GitHub Actions로 Docker Hub(iamfork/prego-erpnext) 푸시 기능 개발 기획. 워크플로우·Secrets·태그 전략·Hetzner CPX 사용법 명세.
- prego-docker 코드 구현 상세: prego-docker-implementation-plan.md — prego-docker 폴더 파일 트리·Vendoring·apps.json·build.yml·trivy-scan.yml·prego-saas-app notify-image-rebuild·Secrets·태그 정책. 현재: apps.json에 ERPNext·HRMS·prego-saas-app(태그) 포함, 단일 bench init·repository_dispatch 전용·Verify image apps·Trivy 스캔(정책 Critical 0) 반영. (선택) Production compose·digest 승격·Blue/Green.
- prego-docker 취약점 수치 미개선 원인·감소 기획: prego-docker-vulnerability-reduction-plan.md — 새 이미지 빌드 후에도 CVE 수(8/51/61/76/2)가 동일한 원인(동일 빌드 입력·베이스·의존성), CVE·레이어 매핑·베이스 digest·apt·Node·pip 개선 단계·정책 유지.
- prego-docker build 트러블슈팅 (통합): 07-prego-docker/build-troubleshooting.md — exit 128(중복 clone·clone/checkout 실패), 167(시그널 39·OOM), yarn FileNotFoundError, uv resolver 실패 원인·해결 요약. (기존 5개 문서 통합)
- prego-saas-app 이벤트 → Docker 이미지 빌드 단계: prego-saas-app-event-to-docker-image-build-plan.md — 이벤트·dispatch·빌드 흐름 기획(원안: app_sha 동적 apps.json). 현재 구현: tag 기반·커밋된 apps.json, prego-docker-implementation-plan.md §4·§5.
- prego-saas-app → prego_saas 마이그레이션: prego-saas-app-to-prego-saas-migration-plan.md — 레포·앱 이름 변경에 따른 prego-docker CI/CD 연동 업데이트 기획.
- prego-saas-app 코드 구현: prego-saas-app-implementation-plan.md — prego-saas-app 폴더(/Users/marco/prego-saas-app) 생성용 기획. 2-Repo 전략·비즈니스 전용 구조, Phase 1(health_check·Sales Order hook·notify 워크플로)
9(Multi-region). Frappe 앱 트리·Doctype 스키마(Prego Tenant, Feature Flag, Plan Feature, Tenant Flag, Usage Metric/Event/Aggregation)·Tenant 프로비저닝 API·Feature Flag·Stripe·Provisioner UI·Usage 과금·Enterprise 분리. 코드 없이 명세만. 구현: Phase 18 + Control Plane 워크스페이스·Plan/Tenant Flag 유일성·Prego Tenant 기본 status·region 필드(Phase 9 준비) — 레포 Pregoi/prego-saas-app.
선택적 후속 작업
- 보안: Control Plane
GET /trace,GET /audit에 CF Access 또는 API Key 적용. - 환경: workflow_dispatch로 region=us/eu 실행 시 별도 승인을 위해 GitHub Environment
production-us,production-eu추가 후 워크플로에서 region별 environment 사용 검토. - 메트릭: Autoscaler 전제인
node_metrics_rollups채우기 — 노드별 메트릭 수집 Worker 또는 에이전트 추가. - 대시보드 UI: P3-5 Audit, P5-7 관리자 대시보드 — client-web 또는 별도 앱에서
/audit, nodes/tenants 집계 API 호출 및 UI 구현.