[DB-01] alerts 테이블 생성 (V42)
작업 내용 (설계 의도)
변경 사항
알림 이력(FR-9)을 저장하는 alerts 테이블을 신규 생성한다. 근거 TDD: ../TDD.md §ERD·§Detail Design. senior-dba가 컬럼·인덱스를 확정하고 mysql-implementer가 V42__create_alerts.sql을 작성한다. (②가 V38~V40, ③이 V41을 점유 → ⑥은 V42. 머지 순서에 따라 origin/dev 최신 번호로 재배정 가능.)
- 컬럼:
id(PK),signal_key(endpoint+source+severity 조합 문자열),endpoint,source(VARCHAR, latency/oversell/deployment/self_check),severity(VARCHAR, info/warn/critical),env(VARCHAR, local/dev/prod),status(VARCHAR),analysis(TEXT, JsonStringType IncidentAnalysis),analysis_included(TINYINT(1)),raised_at(DATETIME(6)),delivered_at(DATETIME(6) NULL),version(BIGINT), 감사 컬럼(created_at/updated_at). - 컨벤션: FK·ENUM·JSON·BOOLEAN 금지(VARCHAR/TINYINT/TEXT), 모든 컬럼 COMMENT,
DATETIME(6). notifications.channel은VARCHAR(20)CHECK 없음 →DISCORD저장에 DDL 변경 불필요(마이그레이션 대상 아님).- 인덱스: 조회 패턴(사후 분석: env+source+raised_at 범위)에 근거해 senior-dba가 결정. 근거 없는 인덱스 금지.
- 롤백: 실패 시 역방향 DDL
DROP TABLE alerts.
의존
- 없음 (wave 1)
다이어그램
클래스 의존
flowchart LR MIG["V42__create_alerts.sql"] --> TBL["alerts 테이블"] RepoImpl["AlertRepositoryImpl (BE-03)"] --> TBL
테스트 케이스
- 로컬 MySQL 8.0에서 기존 마이그레이션 → V42 순서로 오류 없이 적용된다.
analysisTEXT 컬럼에 JSON 문자열을 저장·조회해도 손실이 없다.raised_at이 마이크로초 정밀도(DATETIME(6))로 저장된다.- 역방향 DDL(
DROP TABLE alerts) 실행 시 다른 테이블에 영향이 없다.