๐ ์ค์ต ๋ด์ฉ
1. Spring Boot 3 + Spring Data JPA ํ๊ฒฝ์์ Liquibase ํ๊ฒฝ์ ์ค์ ํ๋ค.
3. Liquibase๋ฅผ ํตํด ChangeLog ํ์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ๊ณ ๋ก๊ทธ๋ฅผ ํ์ธํ๋ค.
4. profile ์ค์ ์ ํตํด ๊ฐ๋ฐ ํ๊ฒฝ๋ณ๋ก ์ ์ฉํ๋ค.
๐ ์ค์ต 3. ChangeLog ํ์ผ์ ์ ์ฉํ๊ณ ๋ก๊ทธ ํ์ธํ๊ธฐ
์ด์ ์ค์ต๋ค์ ํตํด ํ๋ก์ ํธ์ Liquibase ์ค์ ๊ณผ ๋ก์ปฌ DB์ ์ํฐํฐ ๊ฐ์ ์คํค๋ง ์ฐจ์ด์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ChangeLog ํ์ผ์ ์์ฑํ๋ค.
์ด๋ฒ ์ค์ต์์๋ ChangeLog ํ์ผ์ ์ ์ฉํ์ฌ DB ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ๊ณ ๊ด๋ จ ๋ก๊ทธ๋ฅผ ํ์ธํด ๋ณผ ๊ฒ์ด๋ค.
1. ChangeLog.xml ์ ์ฉํ๊ธฐ
changelog.xml์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ 2๊ฐ์ง๋ค.
์ฒซ ๋ฒ์งธ๋ ํฐ๋ฏธ๋ ์ ๋ ฅ์ด๋ค. ํฐ๋ฏธ๋์์ ์ง์ mvn ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ update ํ๋ ๋ฐฉ์์ด๋ค.
ํ๋ก์ ํธ๊ฐ ์๋ ์์น์์ mvn liquibase:update ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด ๋ณด์.
์ด๋ฏธ์ง์ ๊ฐ์ด artifact ๋ชฉ๋ก ๋ด์ฉ์ด ์๋ฉ ์ถ๋ ฅ๋๊ณ , Build๊ฐ ์ฑ๊ณตํ๊ฒ ๋๋ค.
๋ ๋ฒ์งธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์คํ์ด๋ค. ํ๋ก์ ํธ ์ค์ ํ์ผ(properties)์ ์ค์ ๋ change-master.xml ํ์ผ์ ์ฝ์ด ๋ค์ฌ์ include ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก changelog ํ์ผ์ ์ ์ฉํ๋ค.
์ฐ๋ฆฌ๋ ์ด์ ์ application.properties ํ์ผ์ spring.liquibase.change-log๋ฅผ ์ค์ ํ์๋ค.
ํด๋น ํ์ผ์ ์๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ถ๊ฐ๋ ๋ด์ญ์ด ์์ผ๋ฉด, update๋ฅผ ์ํํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๊ณ ๋ก๊ทธ๋ฅผ ์ดํด๋ณด์.
๋ก๊ทธ ๋ด์ฉ ์ค liquibase๋ฅผ ํํฐ๋งํด์ ์ฐพ์๋ณด๋ฉด changelog ํ์ผ์ ์ฝ์ ๋ค, ์ ์ฉํ๋ ๊ฒ์ ์ ์ ์๋ค.
2. ์ ์ฉ ํ์ธํ๊ธฐ
๋ฐ์ดํฐ ๋ฒ ์ด์ค๋ฅผ ํ์ธํ์ฌ ์๋ํ ๋๋ก ํ ์ด๋ธ๊ณผ ์ ์ฝ ์ฌํญ์ด ์ถ๊ฐ ๋๋์ง์ ์ด๋ ฅ์ด ๋จ์๋์ง ํ์ธํด ๋ณธ๋ค.
์์๋๋ก ํ ์ด๋ธ์ด ์ ์ถ๊ฐ๋์๊ณ , 3๊ฐ์ ํ๋์ ํฌ๊ธฐ(200), Unique, NotNull ๋ฑ์ ์ ์ฝ ์ฌํญ์ด ์ ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
databasechangelog๋ผ๋ Liquibase์์ ์์ฑํ ํ ์ด๋ธ์ ํ์ธํ๋ฉด ์๋จ ์ด๋ฏธ์ง์ ๊ฐ์ด ๋ณ๊ฒฝ ์ด๋ ฅ์ด ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
ํด๋น ํ ์ด๋ธ ๊ฐ ํ๋์ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด | ์ค๋ช |
ID | changeset์ id |
AUTHOR | changeset์ author |
FILENAME | changeset ํ์ผ ๊ฒฝ๋ก changeLog๊ฐ Liquibase ์ ์ ๋ฌ๋ ๋ฐฉ์์ ๋ฐ๋ผ ์ ๋ ๊ฒฝ๋ก ๋๋ ์๋ ๊ฒฝ๋ก๊ฐ ๋ ์ ์๋ค. ๋ ผ๋ฆฌ์ ํ์ผ ๊ฒฝ๋ก ์์ฑ์ changelog ๋๋ ๊ฐ๋ณ changeset์์ ์ฌ์ฉํ ์ ์๋ค. |
DATEEXECUTED | ์คํ๋ ๋ ์ง/์๊ฐ. ๋กค๋ฐฑ ์์๋ฅผ ๊ฒฐ์ ํ๊ธฐ ์ํด ORDEREXECUTED์ ํจ๊ป ์ฌ์ฉ๋๋ค. |
ORDEREXECUTED | changeset์ด ์คํ๋ ์์. ์์๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๊ธฐ ์ํด DATEEXECUTED์ ํจ๊ป ์ฌ์ฉ๋๋ค. ๊ฐ์ ๊ฐ๋ณ ์ ๋ฐ์ดํธ ์คํ์์๋ง ์ฆ๊ฐ๋ฅผ ๋ณด์ฅํ๋ฉฐ, 0์์ ๋ค์ ์์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. |
EXECTYPE | changeset์ด ์คํ๋ ๋ฐฉ๋ฒ. ์ข ๋ฅ๋ EXECUTED, FAILED, SKIPPED, RERAN, MARK_RAN ๋ฑ์ด ์๋ค. |
MD5SUM | changelog์ checksum. ๊ฐ ์คํ์์ changelog ํ์ผ ์ changeset์ ์๊ธฐ์น ์์ ๋ณ๊ฒฝ์ด ์๋์ง ํ์ธํ๋ค. |
DESCRIPTION | changeset์ ๋ํด ์๋์ผ๋ก ์์ฑ๋๋ ๊ฐ๋จํ ์ค๋ช |
COMMENTS | changeset์ ์ฃผ์ |
TAG | tag์ ํด๋นํ๋ changeset์ ์ถ์ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ |
LIQUIBASE | Liquibase ๋ฒ์ |
CONTEXTS | changeset์ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์ปจํ ์คํธ |
LABELS | changeset์ ์คํํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ ์ด๋ธ |
DEPLOYMENT_ID | ํจ๊ป ๋ฐฐํฌ๋ changeset์ ๋์ผํ ๊ณ ์ ์๋ณ์ |
๋ณ๊ฒฝ ๋ก๊ทธ์ ์๋ ๊ฒ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ค์ ๋ก ์คํ๋ ๊ฒ ์ฌ์ด์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํ๊ธฐ ์ํด Liquibase๋ databasechangelog ํ ์ด๋ธ์ ๊ฐ ๋ณ๊ฒฝ ์งํฉ ํญ๋ชฉ๊ณผ ํจ๊ป ์ฒดํฌ์ฌ(checksum)์ ์ ์ฅํ๋ค.
๋ง์ฝ changeset์ด ์คํ๋ ์ดํ ์์ ๋ ๊ฒฝ์ฐ(xml์ ์์๋ก ์กฐ์ํ๋ ๊ฒฝ์ฐ ๋ฑ), Liquibase๊ฐ ์ค์ง๋๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ REFERENCE์ ํฌ์คํ ์ ์ถ๊ฐํด ๋์์ผ๋ ์ฐธ๊ณ ํ๊ธฐ ๋ฐ๋๋ค.
์ด๊ฒ์ผ๋ก changelog ์ ์ฉํ๊ธฐ ๋ฐ ๋ก๊ทธ ์ด๋ ฅ ํ์ธํ๊ธฐ๊ฐ ๋์ด ๋ฌ๋ค.
4ํธ์์๋ profile์ ์ฌ์ฉํด์ ๊ฐ ํ๊ฒฝ(dev, prod) ๋ณ๋ก liquibase๋ฅผ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค.
REFERENCE
https://docs.liquibase.com/tools-integrations/maven/commands/maven-update.html
https://docs.liquibase.com/concepts/tracking-tables/databasechangelog-table.html
https://gettingstartedstage.liquibase.com/concepts/changelogs/changeset-checksums.html
https://www.liquibase.com/blog/what-affects-changeset-checksums
๋๊ธ