src/main/resources/db/migration/
βββ V2__align_pk_and_fk_types.sql (PK/FK bigint ν΅μΌ)
βββ V3__convert_varchar_to_enum.sql (varchar β enum λ³ν)
βββ V4__add_constraints_and_defaults.sql (μ μ½μ‘°κ±΄ λ° κΈ°λ³Έκ°)
- Dev DB μ€λ μ· μμ± μλ£
- Prod DB μ€λ μ· μμ± μλ£ (μ€μ λ°°ν¬ μ )
# varchar λ°μ΄ν°κ° Enumκ³Ό μΌμΉνλμ§ κ²μ¦
./run_validation.shμ€μ: κ²μ¦ κ²°κ³Όκ° λΉμ΄μμ΄μΌ μ μ (λΆμΌμΉ λ°μ΄ν° μμ)
# department, partnershipμ FK μ΄λ¦ νμΈ
mysql -h <host> -u <user> -p <database> < check_fk_constraints.sql# application-dev.ymlμ spring.flyway μ€μ νμΈ
# spring.jpa.hibernate.ddl-auto: none νμΈ
# μ ν리μΌμ΄μ
μ€ν μ μλμΌλ‘ λ§μ΄κ·Έλ μ΄μ
μ€ν
./gradlew bootRun --args='--spring.profiles.active=dev'# V2 μ€ν
mysql -h <host> -u <user> -p <database> < src/main/resources/db/migration/V2__align_pk_and_fk_types.sql
# κ²μ¦: PK/FK νμ
νμΈ
mysql -h <host> -u <user> -p -e "
SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '<database>'
AND COLUMN_NAME IN ('college_id', 'department_id')
ORDER BY TABLE_NAME;
"
# V3 μ€ν
mysql -h <host> -u <user> -p <database> < src/main/resources/db/migration/V3__convert_varchar_to_enum.sql
# κ²μ¦: Enum νμ
νμΈ
mysql -h <host> -u <user> -p -e "
SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '<database>'
AND DATA_TYPE = 'enum'
ORDER BY TABLE_NAME;
"
# V4 μ€ν
mysql -h <host> -u <user> -p <database> < src/main/resources/db/migration/V4__add_constraints_and_defaults.sql
# κ²μ¦: μ μ½μ‘°κ±΄ νμΈ
mysql -h <host> -u <user> -p -e "
SHOW CREATE TABLE college;
SHOW CREATE TABLE menu;
SHOW CREATE TABLE review;
"# μ ν리μΌμ΄μ
μ¬μμ
./gradlew bootRun --args='--spring.profiles.active=dev'
# λ‘κ·Έ νμΈ
# - Enum λ§€ν μ€λ₯ μλμ§
# - DB μ°κ²° μ μμΈμ§
# - API νΈμΆ μ μμΈμ§-- Enum κ° μ‘°ν ν
μ€νΈ
SELECT restaurant, time_part FROM meal LIMIT 10;
SELECT provider, role, status FROM user LIMIT 10;
-- PK/FK νμ
νμΈ
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
COLUMN_TYPE
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = '<database>'
AND COLUMN_NAME IN ('college_id', 'department_id')
ORDER BY TABLE_NAME, COLUMN_NAME;
-- μ μ½μ‘°κ±΄ νμΈ
SELECT
TABLE_NAME,
CONSTRAINT_NAME,
CONSTRAINT_TYPE
FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_SCHEMA = '<database>'
AND TABLE_NAME IN ('college', 'menu', 'review');- Dev νκ²½ λ§μ΄κ·Έλ μ΄μ μλ£ λ° κ²μ¦
- Dev νκ²½ μ ν리μΌμ΄μ μ μ λμ νμΈ
- Prod DB μ€λ μ· μμ± μλ£
- λ°μ΄ν° κ²μ¦ (validate_enum_data.sql) μλ£
- μ¬μ©λμ΄ μ μ μκ°λ μ ν (μλ²½ 2-4μ κΆμ₯)
- λ‘€λ°± κ³ν μ립
# Prod νκ²½μμ λμΌνκ² μ€ν
./gradlew bootRun --args='--spring.profiles.active=prod'
# λλ μλ μ€ν
mysql -h <prod-host> -u <user> -p <database> < V2__align_pk_and_fk_types.sql
mysql -h <prod-host> -u <user> -p <database> < V3__convert_varchar_to_enum.sql
mysql -h <prod-host> -u <user> -p <database> < V4__add_constraints_and_defaults.sql- μ¬μ©λμ΄ μ μ μκ°λμ μ€ν
- μ€ν μ€ λ€λ₯Έ μΈμ μμ DDL μμ κΈμ§
# V3 μ€ν μ λ°λμ κ²μ¦
./run_validation.sh- V2μμ
SET FOREIGN_KEY_CHECKS = 0/1μ¬μ© - FK μ μ½μ‘°κ±΄μ μλμΌλ‘ μ μ§λ¨
# AWS RDS μ€λ
μ·μΌλ‘ 볡μ
aws rds restore-db-instance-from-db-snapshot \
--db-instance-identifier your-db-restored \
--db-snapshot-identifier eatssu-dev-pre-migration-20260207ERROR 1265: Data truncated for column 'restaurant' at row 1
μμΈ: DBμ Enumμ μλ κ°μ΄ μ‘΄μ¬
ν΄κ²°: validate_enum_data.sql μ€ννμ¬ λΆμΌμΉ λ°μ΄ν° μ°ΎκΈ°
ERROR 1833: Cannot change column: used in a foreign key constraint
μμΈ: FK μ μ½μ‘°κ±΄μ΄ κ±Έλ €μμ
ν΄κ²°: V2 νμΌμ SET FOREIGN_KEY_CHECKS = 0 μ΄λ―Έ ν¬ν¨λ¨
ERROR 1062: Duplicate entry for key 'UK_college_name'
μμΈ: college.nameμ μ€λ³΅ λ°μ΄ν° μ‘΄μ¬ ν΄κ²°: μ€λ³΅ λ°μ΄ν° μ 리 ν λ€μ μ€ν
- V2, V3, V4 λͺ¨λ μ μ μ€ν
- flyway_schema_history ν μ΄λΈμ κΈ°λ‘ νμΈ
- μ ν리μΌμ΄μ μ μ λμ νμΈ
- API ν μ€νΈ ν΅κ³Ό
- λ‘κ·Έμ μ€λ₯ μμ