AI 데이터베이스 보호 (4중 안전망)
Multi-SaaS Kit 은 AI 협업 워크플로우 를 핵심 가치로 하는 플랫폼입니다. AI 에 의한 우발적인 데이터 손실을 막기 위해 4중 안전망 + 1 옵션 을 기본 탑재합니다.
왜 필요한가?
AI 코딩 도구 (Claude Code, Codex, Cursor, …) 가 보편화되면서 다음과 같은 위험이 실재화되었습니다:
| 위험 시나리오 | 결과 |
|---|---|
AI 가 php artisan migrate:fresh 자율 실행 | 전 테이블 drop → 운영 데이터 전체 손실 |
AI 가 Model::truncate() 호출 | 단일 테이블 전체 삭제 |
AI 가 psql -c "TRUNCATE …" Bash 실행 | application 우회 → 직접 SQL 파괴 |
AI 가 WHERE 빠진 DELETE FROM users | 의도와 다른 전체 삭제 |
일반 백업만으로는 부족합니다 — 손실 발생부터 인지까지 시간 차가 있고, 부분 손실 후 데이터 부정합 복구는 매우 어렵습니다.
→ 사후 복구보다 사전 차단 이 비용/리스크 모두 우월합니다.
4중 안전망 한눈에 보기
AI 의 destructive 작업 시도
│
┌─────────────────────────┼─────────────────────────┐
│ │ │
Bash 실행 PHP 코드 Artisan 명령
│ │ │
┌── ─────▼──────┐ ┌────────▼────────┐ ┌──────▼──────┐
│ Phase E │ │ Phase A │ │ Phase 0 │
│ AI Bash hook│ │ Query Listener │ │ Cmd Guard │
│ (Claude Code)│ │ (DB::listen) │ │ (Artisan) │
└───────┬──────┘ └────────┬────────┘ └──────┬──────┘
│ │ │
└─────────────┬───────────┴───────────┬─────────────┘
│ │
차단 + audit 통과
│ │
┌──────▼──────┐ ▼
│ Phase F │ 정상 실행
│ Audit log │
└──────┬──────┘
│
⚠️ AI→SQL→User 워크플로
(사용자가 admin 도구로 직접 실행)
| Phase | 레이어 | 막는 대상 | 기본 활성 |
|---|---|---|---|
| 0 | Artisan 명령 차단 | migrate:fresh|refresh|reset, db:wipe, schema:dump --prune | ✅ |
| A | 런타임 Query 차단 | Model::truncate(), raw TRUNCATE/DROP/DELETE FROM(WHERE 없음) | ✅ |
| C | DB Role 분리 (PostgreSQL) | application connection 의 권한 자체를 제한 | ⏸️ 옵션 |
| E | AI Bash hook 차단 | AI 가 Bash 로 실행하는 destructive shell SQL | ✅ |
| F | Audit log 기록 | 차단/허용 이력 영구 추적 | ✅ |
일반 개발 워크플로 (테스트, RefreshDatabase, 정상 마이그레이션) 는 자동 허용 됩니다 — false positive 가 거의 없습니다.
Phase 0 — Artisan 명령 차단
php artisan migrate:fresh 같은 명령을 Laravel 부트 시점에 가로챕니다.
차단 대상
| 명령 | 위험 |
|---|---|
migrate:fresh | 전 테이블 drop 후 재생성 |
migrate:refresh | 전체 rollback 후 재실행 |
migrate:reset | 전체 rollback |
db:wipe | 전 테이블 drop |
schema:dump --prune | 마이그레이션 파일 일괄 삭제 |
자동 허용
- PHPUnit 실행 +
APP_ENV=testing+migrate:fresh만 허용 (LaravelRefreshDatabase정상 경로)