MSA νκ²½μμ μ¬λ¬ DB ν μ΄λΈμ λ§λ€κ³ , 곡μ νκ³ , μμ νκ³ , λ²μ κ΄λ¦¬λ₯Ό νλ€ λ³΄λ©΄ μ΄λ° μν©μ΄ λ°μνλ€.
π DDL, DML λͺ¨λ μ½λμ²λΌ κ΄λ¦¬ν μλ μμκΉ?
DB μ€ν€λ§ λ° μ΄κΈ° λ°μ΄ν°λ₯Ό λ²μ λ³λ‘ κ΄λ¦¬ν΄μ£Όλ λ§μ΄κ·Έλ μ΄μ λꡬ
Spring Bootμλ κ±°μ μλ ν΅ν©λμ΄ μμΌλ©°, src/main/resources/db/migration λλ ν°λ¦¬ μλ SQL νμΌμ λ£μΌλ©΄ μλ μ€νλλ€.
β 1. DBλ "λ²μ κ΄λ¦¬"κ° νμνλ€
β 2. νκ²½ κ° μ€ν€λ§ λΆμΌμΉ λ°©μ§
β 3. μ ν리μΌμ΄μ μ€ν μ μλ λ§μ΄κ·Έλ μ΄μ
β 4. SQL κΈ°λ°μ΄λΌ λͺ μμ μ΄κ³ κ²μ¦ κ°λ₯
β 5. μ΄μ μ€μλ μμ μ μΈ DB ꡬ쑰 μ§ν
flyway_schema_historyFlywayλ λ§μ΄κ·Έλ μ΄μ μ μ€ννλ©΄, ν΄λΉ μ 보λ₯Ό DB λ΄λΆ ν μ΄λΈμ κΈ°λ‘μΌλ‘ λ¨κΉλλ€.
μ΄ ν μ΄λΈμ Flywayκ° μ΄λ€ λ§μ΄κ·Έλ μ΄μ νμΌμ μΈμ μ€ννλμ§ μΆμ νκΈ° μν΄ μλμΌλ‘ μμ±λλ©°, μ£Όμ 컬λΌμ λ€μκ³Ό κ°μ΅λλ€:
| 컬λΌλͺ | μ€λͺ |
|---|---|
installed_rank | μ€ν μμ |
version | λ§μ΄κ·Έλ μ΄μ
λ²μ (V1, V2, β¦) |
description | __ λ€μ μλ μ€λͺ
(create_artist_table λ±) |
script | μ€νλ νμΌλͺ
(V1__create_artist_table.sql) |
installed_on | μ€νλ λ μ§/μκ° |
success | μ±κ³΅ μ¬λΆ (true / false) |
SELECT * FROM flyway_schema_history;
V1__ λͺ
λͺ
λ²)Flywayλ λ§μ΄κ·Έλ μ΄μ νμΌ μ΄λ¦μ ν΅ν΄ λ²μ κ΄λ¦¬μ μ€ν μμλ₯Ό μλμΌλ‘ νλ¨ν©λλ€. νμΌλͺ μ λ°λμ μλμ κ°μ κ·μΉμ λ°λΌμΌ ν©λλ€
| νμΌλͺ | μλ―Έ |
|---|---|
V1__create_artist_table.sql | λ²μ 1, μν°μ€νΈ ν μ΄λΈ μμ± |
V2__insert_admin_account.sql | λ²μ 2, μ΄λλ―Ό κ³μ μ½μ |
V3__add_column_to_album.sql | λ²μ 3, μ¨λ² ν μ΄λΈμ μ»¬λΌ μΆκ° |
V β λ°λμ λλ¬Έμ Vλ‘ μμ{λ²μ λ²νΈ} β μ μ (1, 2, 3, β¦) λλ μ (.) ν¬ν¨ κ°λ₯ (1.1, 2.5)__ β μΈλμ€μ½μ΄ 2κ° (__)κ° κΌ νμν¨{μ€λͺ
} β λ§μ΄κ·Έλ μ΄μ
λ΄μ© μμ½ (λ¨μ΄λ _λ‘ κ΅¬λΆ).sqlλ‘ λλμΌ ν¨Flywayλ νμΌ μ΄λ¦ κΈ°μ€μΌλ‘ μ λ ¬ν΄μ μ€ννλ―λ‘, λ€μ μμκ° λ¨:
V1...
V2...
V10... β
V11...
V1.1__...,V2.0__...κ°μ μμμ λ κ°λ₯νμ§λ§, 보ν΅μ μ μ λ²μ μ΄ λ λͺ ννκ³ νμ μ μ’μ
| μλͺ»λ μ΄λ¦ | μ΄μ |
|---|---|
v1__init.sql | Vλ λ°λμ λλ¬Έμ |
V1_init.sql | μΈλμ€μ½μ΄κ° 1κ° |
V001-create.sql | __ μλ - μ¬μ© |
V1__.sql | μ€λͺ μ΄ μμ |
V{λ²μ λ²νΈ}__{λλ©μΈ}_{νμ}.sql
μ:
V1__artist_create_table.sqlV2__admin_insert_data.sqlV3__album_add_sort_order_column.sqlddl-autoμμ μ°¨μ΄μ μ?| νλͺ© | ddl-auto | Flyway |
|---|---|---|
| μ μ΄ λ°©μ | μλ μμ±/μμ | SQL νμΌλ‘ λͺ μ |
| μ΄μ νκ²½ μ ν©μ± | β μν | β μμ |
| λ²μ κ΄λ¦¬ | β λΆκ°λ₯ | β λ²μ λ³ κ΄λ¦¬ κ°λ₯ |
| μ€ν μμ | μ ν리μΌμ΄μ μ€ν μ λ°λ‘ λ°μ | μ ν리μΌμ΄μ μ€ν μ, λ²μ λΉκ΅ ν νμν SQLλ§ μ€ν |
π§ μ€μ μμ (application.yml)
spring:
flyway:
enabled: true
baseline-on-migrate: true
locations: classpath:db/migration
baseline-on-migrate: true β κΈ°μ‘΄ DBκ° μμ΄λ 첫 λ§μ΄κ·Έλ μ΄μ
λΆν° νμ©
π Flywayλ MSA κΈ°λ°μ μ€μλΉμ€μμ DBλ₯Ό μ λ’° κ°λ₯νκ³ μμ νκ² μ§νμν¬ μ μλ νμ λꡬλ€.
"μ½λλ GitμΌλ‘, DBλ Flywayλ‘"