[DB-01] autotrading 5개 테이블 생성
작업 내용 (설계 의도)
변경 사항
자동매매 도메인이 소유할 5개 테이블을 Flyway로 생성한다. 근거: TDD “ERD”.
auto_trading_policy— 싱글톤 1행. 실행 모드·킬 스위치·사다리 단계·운용 자본trading_days— 거래일 상태.trade_dateUNIQUEorder_proposals— 주문 제안. 거부된 후보까지 전량 기록하므로 감사 로그를 겸한다trading_positions— 보유 포지션. 손절가·익절가·OCO 주문 IDtrading_fills— 체결 기록.execution_mode로 paper/live 구분
설계 제약 두 가지를 지킨다. ① 금액 컬럼은 전부 decimal — stock_price_cache.last_price가 varchar(50)인 전례를 반복하지 않는다. ② trading_positions는 같은 종목·같은 모드에 열린 포지션이 하나만 존재하도록 유일성을 보장한다.
DDL만 수행하고 값을 채우지 않는다 — 백필이 없으므로 Flyway 인라인 DML도 없다.
롤백: 마이그레이션 실패 시 역방향 DDL로 5개 테이블 제거. 아무도 읽지 않는 신규 테이블이라 되돌리기가 안전하다.
의존
- 없음 (선행 wave)
다이어그램
처리 흐름
해당 없음 — 스키마 생성만 수행하며 런타임 흐름이 없다.
클래스 의존
flowchart LR Flyway[V__create_autotrading_tables] --> Policy[(auto_trading_policy)] Flyway --> Days[(trading_days)] Flyway --> Proposals[(order_proposals)] Flyway --> Positions[(trading_positions)] Flyway --> Fills[(trading_fills)]
테스트 케이스
- 마이그레이션 적용 후 5개 테이블이 모두 생성된다.
trading_days.trade_date에 같은 날짜를 두 번 넣으면 UNIQUE 제약으로 거부된다.- 같은 종목·같은 실행 모드로 열린 포지션을 두 개 만들면 유일성 제약으로 거부된다.
- 금액 컬럼(
decimal)에 소수점 값을 넣고 읽었을 때 정밀도가 유실되지 않는다. - 역방향 DDL 실행 시 5개 테이블이 모두 제거된다.