[DB-01] autotrading 5개 테이블 생성

작업 내용 (설계 의도)

변경 사항

자동매매 도메인이 소유할 5개 테이블을 Flyway로 생성한다. 근거: TDD “ERD”.

  • auto_trading_policy — 싱글톤 1행. 실행 모드·킬 스위치·사다리 단계·운용 자본
  • trading_days — 거래일 상태. trade_date UNIQUE
  • order_proposals — 주문 제안. 거부된 후보까지 전량 기록하므로 감사 로그를 겸한다
  • trading_positions — 보유 포지션. 손절가·익절가·OCO 주문 ID
  • trading_fills — 체결 기록. execution_mode로 paper/live 구분

설계 제약 두 가지를 지킨다. ① 금액 컬럼은 전부 decimalstock_price_cache.last_pricevarchar(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개 테이블이 모두 제거된다.