데이터베이스 마이그레이션 SQL 스크립트를 생성하는 스킬. "/db-migration"을 입력하거나, "마이그레이션 스크립트 만들어줘", "테이블 변경 SQL", "DB 스키마 변경" 같은 요청에 트리거된다. ERD 문서와 JPA Entity를 비교하여 안전한 마이그레이션 스크립트를 생성한다.
ERD 문서와 JPA Entity 간 차이를 분석하여 MySQL 마이그레이션 SQL을 생성하는 스킬이다.
doc/ERD.md — 현재 ERD 정의doc/ERD_ALIGNMENT.md — ERD 정합 계획doc/ERD_NON_STANDARD_TABLES.md — ERD에 없는 테이블src/main/java/com/sample/llm/entity/ — 현재 JPA Entitysrc/main/resources/application.yml — ddl-auto 설정 확인-- 항상 트랜잭션으로 감싸기
START TRANSACTION;
-- 변경 작업 ...
COMMIT;
모든 마이그레이션에는 롤백 SQL도 함께 작성한다:
-- ========== ROLLBACK ==========
-- START TRANSACTION;
-- (역방향 작업)
-- COMMIT;
ALTER TABLE RENAME > DROP + CREATEALTER TABLE CHANGE COLUMN > DROP COLUMN + ADD COLUMN-- {old_table} → {new_table}
ALTER TABLE {old_table} RENAME TO {new_table};
ALTER TABLE {table}
CHANGE COLUMN {old_column} {new_column} {TYPE} {CONSTRAINTS};
-- 기존 FK 제거
ALTER TABLE {table} DROP FOREIGN KEY {fk_name};
-- 새 FK 추가
ALTER TABLE {table}
ADD CONSTRAINT {new_fk_name}
FOREIGN KEY ({column}) REFERENCES {ref_table}({ref_column});
ALTER TABLE {table}
ADD COLUMN {column} {TYPE} NULL AFTER {after_column};
-- 새 컬럼에 기본값 채우기
UPDATE {table} SET {column} = {default_value} WHERE {column} IS NULL;
scripts/
├── {기능명}-migration.sql # 마이그레이션
└── {기능명}-migration-rollback.sql # 롤백 (선택)
네이밍 예시:
erd-alignment-migration.sqlmedical-chat-history-migration.sqladd-medical-rule-table.sqlERD 문서와 현재 Entity를 비교하여 변경 목록을 작성한다:
| 변경 유형 | 대상 | 현재 | 목표 |
|---|---|---|---|
| RENAME TABLE | ... | ... | ... |
| ADD COLUMN | ... | — | ... |
| CHANGE COLUMN | ... | ... | ... |
SQL 실행 후 JPA Entity도 함께 수정:
@Table(name = "...") 갱신@Column(name = "...") 갱신@JoinColumn(name = "...") 갱신doc/ERD.md 업데이트doc/ERD_ALIGNMENT.md 상태 반영README.md 스키마 섹션 갱신ddl-auto: validate 사용 — Hibernate가 자동 변경하지 않도록ddl-auto: update이므로 Entity 변경만으로도 적용 가능