Flyway
๐ Flyway๋?
Flyway
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ ๊ด๋ฆฌ ๋๊ตฌ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ๋ฐ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ค. Git์ด ์์ค ์ฝ๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ์ ์๊ฐํ๋ฉด ๋๋ค.
๊ฐ์ฅ ํฐ ์ฅ์ ์ SQL๋ง์ ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค๋ ์ ์ด๋ค. ๋ํ flyway_schema_history
ํ
์ด๋ธ์์ ์คํค๋ง ๋ณ๊ฒฝ ์ด๋ ฅ์ ํ์ธํ ์ ์์ด ๋ฌธ์ ์ถ์ ๋ํ ์ฌ์์ง๋ค. ๋ค๋ง ์์ฑํ ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ์์ ์ด ๋ถ๊ฐ๋ฅํ๋ฉฐ ๋กค๋ฐฑ์ด ์ ํ์ ์ด๋ผ๋ ๋จ์ ์ด ์๋ค.
๐ ์ค์
๋จผ์ flyway ์์กด์ฑ์ ์ถ๊ฐํ๋ค.
1
2
3
4
5
6
dependencies {
implementation 'org.flywaydb:flyway-core'
// ์ฌ์ฉํ๋ DB์ ๋ฐ๋ผ ์ถ๊ฐ ์์กด์ฑ์ด ํ์ํ ์ ์์.
implementation 'org.flywaydb:flyway-mysql'
}
application.yml
์์ flyway ๊ด๋ จ ์์ฑ์ ์ค์ ํ๋ค. ์ฃผ์ ์ต์
์ ๋ค์๊ณผ ๊ฐ๋ค.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/my_database?useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8
username: your_username
password: your_password
flyway:
enabled: true
locations: classpath:db/migration
baseline-on-migrate: true
jpa:
hibernate:
ddl-auto: validate
show-sql: true
properties:
hibernate:
format_sql: true
enabled
: flyway ํ์ฑํ ์ฌ๋ถ๋ฅผ ์ค์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ true
์ด๋ค.
location
: ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ด ์์นํ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ค. ๊ธฐ๋ณธ๊ฐ์ classpath:db/migration
์ด๋ค.
baseline-on-migrate
: ์ด ์ต์
์ true
๋ก ์ค์ ํ๋ฉด ์คํ ์ flyway_schema_history
ํ
์ด๋ธ์ด ์์ผ๋ฉด ์๋์ผ๋ก ์์ฑํ๋ค.
flyway๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ JPA์ ddl-auto
์ต์
์ validate
๋ก ์ค์ ํ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ฅผ ํตํด ์คํค๋ง์ ์ํฐํฐ๊ฐ ์ผ์นํ๋์ง ๊ฒ์ฆํ ์ ์๋ค.
๐ flyway_schema_history
flyway_schema_history
ํ
์ด๋ธ์ ๋ง์ด๊ทธ๋ ์ด์
์ ์ถ์ ๋ฐ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ํ
์ด๋ธ์ด๋ค. ์ด ํ
์ด๋ธ์ ํตํด flyway๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง๋ ๋์ค์ ์ดํด๋ณด๊ณ , ํ
์ด๋ธ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์ด ์๋์ง ์ดํด๋ณด์. ์ฃผ์ ์ปฌ๋ผ์ ๋ค์๊ณผ ๊ฐ๋ค.
installed_rank
: ๋ง์ด๊ทธ๋ ์ด์
์ด ์ ์ฉ๋ ์์๋ฅผ ๋ํ๋ด๋ ์ ์ ๊ฐ์ด๋ค.
version
: ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ๋ฒ์ ๋ฒํธ์ด๋ค. ์ด ๋ฒ์ ์ ๊ธฐ์ค์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
์์๋ฅผ ๊ฒฐ์ ํ๋ค.
checksum
: ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ํด์ ๊ฐ์ด๋ค. ์ด ๊ฐ์ ํตํด ์ด๋ฏธ ์ ์ฉ๋ ํ์ผ์ด ์ดํ์ ์์ ๋์๋์ง ๊ฒ์ฆํ๋ค.
๐ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ
flyway๋ ์ค์ ๋ ๊ฒฝ๋ก์์ ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ์ค์บํ๋ค. ๋ฒ์ ๋ฒํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋์ด ์์๋๋ก ์ ์ฉ๋๋ค. ๊ฐ๊ฐ์ ํ์ผ์ด ์ ์ฉ๋ ๋๋ง๋ค flyway_schema_history
ํ
์ด๋ธ์ด ์
๋ฐ์ดํธ๋๋ค.
ํ์ผ๋ช
์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค. <Prefix><Version>__<Description>.sql
Prefix๊ฐ V
๋ผ๋ฉด ํน์ ๋ฒ์ ์ผ๋ก ์
๋ฐ์ดํธ, U
๋ผ๋ฉด ์ด์ ๋ฒ์ ์ผ๋ก ๋กค๋ฐฑ, R
์ด๋ผ๋ฉด ๋ฒ์ ๊ณผ ์๊ด์์ด ๋งค๋ฒ ์คํ๋๋ ํ์ผ์์ ์๋ฏธํ๋ค.
Version์ V
์ U
์์๋ง ์ฌ์ฉ๋๋ฉฐ, ์ซ์, ์ , ์ธ๋๋ฐ ๋ฑ์ ์กฐํฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค. ์๋ก ์์ฑ๋ ํ์ผ์ ํญ์ ์ด์ ๋ณด๋ค ๋์ ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํ๋ค.
Description์ ํด๋น ํ์ผ์ ๋ํ ์ค๋ช ์ ์์ฑํ๋ฉด ๋๋ค.
๐ ๋์ ์๋ฆฌ
flyway๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋๋ฉด ๋จผ์ flyway_schema_history
ํ
์ด๋ธ์ ์ฐพ๋๋ค. ๋ง์ฝ ์กด์ฌํ์ง ์์ผ๋ฉด ์๋์ผ๋ก ํด๋น ํ
์ด๋ธ์ ์์ฑํ๋ค. ์ดํ ์ค์ ๋ ๊ฒฝ๋ก์์ ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ์ฐพ๋๋ค. ํ์ผ์ ๋ชจ๋ ์ฐพ์ผ๋ฉด flyway_schema_history
ํ
์ด๋ธ์ ์ฐธ๊ณ ํ์ฌ ์์ง ์ ์ฉ๋์ง ์์(์๋ก์ด ๋ฒ์ ์) ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ์ฐพ์ ๋ถ๋ฅํ๋ค. ๋ง์ง๋ง์ผ๋ก ์๋ก์ด ๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ๋ฒ์ ์์ผ๋ก ์ ๋ ฌํ์ฌ ์์ฐจ์ ์ผ๋ก ์คํํ๋ค. ๋ง์ด๊ทธ๋ ์ด์
์ด ์ฑ๊ณต์ ์ผ๋ก ์ํ๋๋ฉด flyway_schema_history
์ ๋ง์ด๊ทธ๋ ์ด์
๋ด์ญ์ ๊ธฐ๋กํ๋ค.
๋ง์ด๊ทธ๋ ์ด์
ํ์ผ์ ์ฐพ์ ํ checksum
์ ํตํด ํ์ผ ๋ณ๊ฒฝ ์ฌ๋ถ ๋ํ ํ์ธํ๋ค. ๋ง์ฝ ์ฒดํฌ์ฌ ๊ฐ์ด ๋ฌ๋ผ์ง๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
๐ ์ฐธ๊ณ
https://ywoosang.tistory.com/18
https://velog.io/@suhongkim98/flyway%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%8A%A4%ED%82%A4%EB%A7%88-%ED%98%95%EC%83%81%EA%B4%80%EB%A6%AC-%ED%95%98%EA%B8%B0
https://russell-seo.tistory.com/5
https://leeeeeyeon-dev.tistory.com/12