๐ ์ค์ต ๋ด์ฉ
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
Maven update
When successful, the update Maven goal produces the following output: [INFO] Scanning for projects... Downloading from plugins-release: https://artifactory.datical.net:80/artifactory/plugins-release/org/eclipse/m2e/lifecycle-mapping/1.0.0/lifecycle-mapping
docs.liquibase.com
https://docs.liquibase.com/concepts/tracking-tables/databasechangelog-table.html
DATABASECHANGELOG table
DATABASECHANGELOG table Liquibase uses the DATABASECHANGELOG table to track which changesets have been run. If the table does not exist in the database, Liquibase creates one automatically. Columns The table tracks each changeset as a row, identified by a
docs.liquibase.com
https://gettingstartedstage.liquibase.com/concepts/changelogs/changeset-checksums.html
Changeset Checksums
Changeset Checksums When Liquibase reaches a Changeset in your Changelog during execution, it computes a checksum and stores it in the MD5SUM column of the DATABASECHANGELOG table. This tells Liquibase if the changeset has been modified since it was run.
gettingstartedstage.liquibase.com
https://www.liquibase.com/blog/what-affects-changeset-checksums
All About Changeset Checksums
Checksums can help you add metadata to changesets that have already been run without problems and can catch errors early in your pipeline.
www.liquibase.com
๋๊ธ