Playball Logo

Command Palette

Search for a command to run...

목차 열기

12. Storage · Migration · Deployment

AI Defense의 저장소는 목적별로 분리되어 있고, 배포는 순서 보장이 핵심입니다.

저장소 분리

저장소목적소유데이터
PostgreSQL정책 권위, 사후 분석 저장운영팀·AI팀policy_versions, policy_rollout_state, post_review_runs, optimization_runs
Redis런타임 세션·정책 캐시AI Defensesession state, policy projection, challenge tokens, dedup TTLs
S3감사 아카이브, ETL source클라우드 팀decision_audit.jsonl, trajectory_raw.jsonl (append-only)
ClickHouse분석 read model데이터 팀defense_audit_events raw, rollup view들

PostgreSQL DDL

주요 테이블

테이블역할
post_review_runs사후 검토 배치 실행 이력
post_review_session_results세션별 사후 검토 결과
policy_versions정책 스냅샷 전체 버전
policy_rollout_state현재 base/candidate, rollout stage, ratio
policy_rollout_events정책 변경 audit trail
policy_optimization_runsOptimizer 제안 이력

DDL 적용 원칙

원칙내용
Idempotent재실행해도 안전
기존 row 보존마이그레이션 중 데이터 손상 없음
Dry-run 지원실제 적용 전 SQL·plan 확인

ClickHouse DDL

Raw Fact

테이블역할
defense_audit_events모든 runtime 감사 이벤트 raw

Read Model Views

역할
defense_session_rollupsSession별 5분 window 집계
defense_match_rollups경기별 5분 window 집계
defense_post_review_candidates_v1사후 검토 후보

CLI 도구들

tm-ai-storage-migrate

항목내용
역할PostgreSQL DDL 적용
Dry-runSQL 파일 존재·적용 plan 확인
Idempotent이미 있으면 skip

tm-ai-policy-bootstrap

항목내용
역할baseline PolicySnapshot을 policy_versions에 저장
속성ACTIVE, source_type=BASELINE_BOOTSTRAP
Rollout rowFULL, ratio=0, current_status=ACTIVE
기존 처리이미 있으면 overwrite 안 함, skip

tm-ai-policy-projection-resync

항목내용
역할PostgreSQL rows → Redis runtime projection
옵션--current / rollout_id 지정 / policy_version 지정
쓰기 순서policy document → rollout state → version index
타임스탬프projection_refreshed_at_ms 기록

배포 PreSync 순서

배포의 안정 조건은 3단계 순서 보장입니다.

PreSync Job (실패하면 Deployment 진행 안 함)
    ↓
[1] tm-ai-storage-migrate
    └─ PostgreSQL DDL 적용
    ↓
[2] tm-ai-policy-bootstrap
    └─ baseline policy seed 생성
    ↓
[3] tm-ai-policy-projection-resync --current
    └─ Redis projection 준비
    ↓
Deployment + CronJob 진행
    └─ runtime 시작

왜 이 순서인가

의존 관계이유
migration → bootstrap테이블이 없으면 insert 실패
bootstrap → resyncpolicy row가 없으면 projection 불가
resync → runtimeruntime이 projection 읽음

각 CLI가 idempotent한 이유

단계이유
Storage migrate이미 있는 스키마는 skip
Bootstrap기존 row 보존
Projection resync같은 current state를 Redis에 overwrite 가능

→ 실패 후 같은 명령 재시도해도 안전.

Deployment 구성

AI Defense 서비스

항목내용
프레임워크FastAPI
Root path/ai
필요 envRedis, PostgreSQL, ClickHouse, S3, Auth-Guard URL, OpenTelemetry

ai-etl CronJob

항목내용
주기매 시간 15분
이미지·SAai-defense와 공유
역할S3 archive → ClickHouse 적재

KEDA 오토스케일링

서비스기준범위
ai-defenseCPU1~3 replica
authz-adapterCPU1~3 replica

환경 구분

Production 필수 환경변수

환경변수
TM_ENVproduction
TM_REDIS_URLRedis 연결 정보
TM_ROLLOUT_SALT롤아웃 hash salt
TM_POLICY_ALLOW_LOCAL_FALLBACKfalse
TM_ALLOW_IN_MEMORY_REDISfalse

Staging 기본값

설정
RedisDB 1을 runtime state/projection으로
S3 archive bucketstaging 전용
ClickHouse URLstaging 인스턴스
ETL interval60초
ETL batch128

Production 기본값

설정
Redis분리된 프로덕션 인스턴스
ETL interval300초
ETL batch256

Optimizer 운영

Dry-run 초기 운영

단계설정
초기 배포dry_run=true 강제
검증 기간제안 품질 관찰
승인 후 전환TM_POLICY_OPTIMIZER_APPLY_ENABLED=true

Apply 모드 실패

조건결과
dry_run=false + apply_enabled=falseapply_blocked 실패

Post-check

Apply 후 다음 항목 확인:

항목확인 대상
PostgreSQL rollout statestage, base/candidate version, ratio, updated_at_ms
Redis projectionstage, base/candidate version, ratio, version index, projection_refreshed_at_ms

Post-Review CronJob

조건상태
ClickHouse read model 준비필수
PostgreSQL 준비필수
주기예: 10분
Window예: 600초

ArgoCD 통합

항목내용
GitOpsArgoCD sync로 배포
PreSync위 3단계 자동 실행
실패 시Deployment rollout 진행 안 함

배포 자동화 핵심 원칙

원칙설명
사람 개입 최소화PreSync로 storage·policy 자동 준비
순서 보장마이그레이션→bootstrap→resync 순차
실패 안전각 단계 idempotent, 재실행 가능
가드레일Optimizer는 dry-run 기본, 승인 후 apply

참조