마지막 업데이트: 2026-02-10 담당 에이전트:
db-reviewer| 참조:rust-impl,lead
CLI 바이너리:
target/release/trader.exe(사전 빌드됨, cargo build 불필요) 빌드 에러 시에만:cargo build --release -p trader-cli
# 검증 (마이그레이션 변경 시 필수)
./target/release/trader.exe migrate verify --verbose
# 의존성 그래프
./target/release/trader.exe migrate graph --format text
# 통합 미리보기
./target/release/trader.exe migrate consolidate --dry-run
# 적용 상태 확인
./target/release/trader.exe migrate status --db-url "postgres://trader:trader@localhost:5432/trader"./target/release/trader.exe migrate verify # 기본 검증
./target/release/trader.exe migrate verify --verbose # 상세 출력
./target/release/trader.exe migrate verify --dir migrations_v2 # v2 디렉토리| 코드 | 의미 | 심각도 | 조치 |
|---|---|---|---|
DUP001 |
중복 정의 | 🔴 Critical | 최신 정의만 남기고 제거 |
CASC001 |
CASCADE 사용 | 🔴 Critical | 명시적으로 의존 객체 먼저 삭제 |
CIRC001 |
순환 의존성 (A→B→C→A) | 🔴 Critical | 의존성 구조 재설계 |
DCPAT001 |
DROP 후 CREATE | 🔴 Critical | ALTER 또는 IF NOT EXISTS 사용 |
DATA001/002/003 |
데이터 안전성 경고 | 🟡 Warning | 백업 후 진행 |
IDEM001 |
IF NOT EXISTS 누락 | 🟡 Warning | CREATE TABLE IF NOT EXISTS로 변경 |
IDEM002 |
IF EXISTS 누락 | 🟡 Warning | DROP TABLE IF EXISTS로 변경 |
./target/release/trader.exe migrate consolidate --dry-run # 미리보기
./target/release/trader.exe migrate consolidate --output migrations_v2 # 실제 통합통합 그룹:
| # | 파일 | 내용 |
|---|---|---|
| 01 | core_foundation | Extensions, ENUM, symbols, credentials |
| 02 | data_management | symbol_info, ohlcv, fundamental |
| 03 | trading_analytics | trade_executions, position_snapshots, 뷰 |
| 04 | strategy_signals | signal_marker, alert_rule, alert_history |
| 05 | evaluation_ranking | global_score, reality_check |
| 06 | user_settings | watchlist, preset, notification |
| 07 | performance_optimization | 인덱스, MV, Hypertable |
| 08 | paper_trading | Mock 거래소, 전략-계정, 미체결 주문 |
| 09 | strategy_watched_tickers | 전략별 관심 종목, Collector 연동 |
| 10 | symbol_cascade | 연쇄 삭제 + 고아 데이터 정리 함수 |
./target/release/trader.exe migrate graph --format text # 텍스트
./target/release/trader.exe migrate graph > dependency.md # Mermaid (기본)
./target/release/trader.exe migrate graph --format dot > dep.dot # Graphviz DOT# 테스트 DB에서 먼저 검증 (필수)
./target/release/trader.exe migrate apply --db-url "postgres://test:test@localhost/test_db" --dir migrations_v2
# 운영 적용
./target/release/trader.exe migrate apply --dir migrations_v2
⚠️ apply는 자동으로 verify를 먼저 실행. 에러 시 중단됨.
./target/release/trader.exe migrate status --db-url "postgres://trader:trader@localhost:5432/trader"- IF NOT EXISTS: 이미 존재하는 객체 건너뜀
- DROP 제외: 통합 시 DROP 문장 자동 제외
- OR REPLACE: 뷰는 안전하게 재생성
# 1. 스키마 백업
podman exec trader-timescaledb pg_dump -U trader -s trader > schema_backup.sql
# 2. 데이터 백업 (필요 시)
podman exec trader-timescaledb pg_dump -U trader -t symbols -t ohlcv trader > data_backup.sql
# 3. 테스트 적용
trader migrate apply --db-url "postgres://test:test@localhost/test_db" --dir migrations_v2
# 4. 스키마 비교 후 운영 적용
trader migrate apply --dir migrations_v2podman exec -i trader-timescaledb psql -U trader -d trader < schema_backup.sql
podman exec -i trader-timescaledb psql -U trader -d trader < data_backup.sql-
./target/release/trader.exe migrate verify통과 - 데이터베이스 백업 완료
- 테스트 DB에서 먼저 실행
- CASCADE 사용 부분 영향 분석
- 모든 테이블 접근 가능
- 주요 쿼리 정상 동작
- 애플리케이션 정상 작동
use trader_core::migration::{
MigrationAnalyzer, // SQL 파싱 및 의존성 분석
MigrationValidator, // 검증 수행
MigrationConsolidator, // 통합 계획 생성
generate_safety_checklist, // 안전 체크리스트 생성
};
let analyzer = MigrationAnalyzer::new();
let files = analyzer.scan_directory(Path::new("migrations"))?;
let validator = MigrationValidator::new(&files);
let report = validator.validate();