db-migration
데이터베이스 마이그레이션 SQL 스크립트를 생성하는 스킬. "/db-migration"을 입력하거나, "마이그레이션 스크립트 만들어줘", "테이블 변경 SQL", "DB 스키마 변경" 같은 요청에 트리거된다. ERD 문서와 JPA Entity를 비교하여 안전한 마이그레이션 스크립트를 생성한다.
SKILL.md.claude/skills/db-migration/SKILL.md
GitHubDB 마이그레이션 스크립트 생성
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- 컬럼 삭제 전 반드시 백업 SELECT 안내
마이그레이션 유형별 템플릿
테이블 리네이밍
-- {old_table} → {new_table}
ALTER TABLE {old_table} RENAME TO {new_table};
컬럼 리네이밍
ALTER TABLE {table}
CHANGE COLUMN {old_column} {new_column} {TYPE} {CONSTRAINTS};
FK 변경
-- 기존 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});
컬럼 추가 (nullable)
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.sql
동작 순서
Step 1: 차이 분석
ERD 문서와 현재 Entity를 비교하여 변경 목록을 작성한다:
| 변경 유형 | 대상 | 현재 | 목표 |
|---|---|---|---|
| RENAME TABLE | ... | ... | ... |
| ADD COLUMN | ... | — | ... |
| CHANGE COLUMN | ... | ... | ... |
Step 2: 의존성 확인
- FK 관계가 있는 테이블의 변경 순서 결정
- 자식 테이블 먼저 → 부모 테이블 나중에 변경
Step 3: SQL 생성
- 각 변경을 개별 ALTER 문으로 (디버깅 용이)
- 주석으로 변경 목적 명시
- 롤백 SQL 동시 작성
Step 4: Entity 동기화
SQL 실행 후 JPA Entity도 함께 수정:
@Table(name = "...")갱신@Column(name = "...")갱신@JoinColumn(name = "...")갱신
Step 5: 문서 갱신
doc/ERD.md업데이트doc/ERD_ALIGNMENT.md상태 반영README.md스키마 섹션 갱신
주의사항
- 운영 DB에는
ddl-auto: validate사용 — Hibernate가 자동 변경하지 않도록 - 개발 DB는
ddl-auto: update이므로 Entity 변경만으로도 적용 가능 - 대량 데이터가 있는 테이블의 ALTER는 서비스 중단 필요 여부 안내
- H2(테스트)와 MySQL 간 SQL 구문 차이 주의 (예: FULLTEXT INDEX는 MySQL 전용)