Skip to content

jun-labs/liquibase

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

13 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Liquibase




Liquibase is an open-source database-independent library for tracking,
managing and applying database schema changes.

Release Release






1. Getting Started

ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ์ „ .yml ํŒŒ์ผ์„ ์„ค์ •ํ•ด์ฃผ์„ธ์š”. ๋„์ปค ์„ค์ • ํŒŒ์ผ์€ docker ํด๋” ๋‚ด๋ถ€์— ์žˆ์Šต๋‹ˆ๋‹ค.

Java17 / Kotlin1.7 ๋ฒ„์ „ ์ด์ƒ์˜ JDK๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.




Run Application

$ ./gradlew bootRun




Run Test

$ ./gradlew test




Run Build

$ ./gradlew build







2. ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ

์ ์šฉํ•œ ์Šคํ‚ค๋งˆ(schema) ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ๊ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ(local, dev, prod) db.changelog.xml ์ƒ์„ฑ
  2. ๊ฐ ๋ฐฐํฌ ๋ฒ„์ „๋งˆ๋‹ค ํด๋” ๋ฐ .xml ์ƒ์„ฑ
  3. ์ตœ์ข… ๋ฐ˜์˜ ์Šคํ‚ค๋งˆ ํŒŒ์ผ ์ƒ์„ฑ





2-1. ๊ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ db.changelog.xml ์ƒ์„ฑ

๊ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋งž๋Š” db.changelog.xml์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. local, dev์—์„œ ์•ˆ์ •๋œ ํŒŒ์ผ์„ prod์— ์ ์šฉํ•˜๋ฉฐ, prod๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ์ˆ˜๋™์œผ๋กœ ๋ฐ˜์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค.

image







2-2. ๋ฐฐํฌ ๋ฒ„์ „ ๋ณ„ ํด๋” ๋ฐ .xml ์ƒ์„ฑ

๋ฐฐํฌ ๋ฒ„์ „ ๋ณ„ ํด๋”๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ฅผ ๊ด€๋ฆฌํ•  .xml ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. .xml ํŒŒ์ผ์„ ํ†ตํ•ด ํ•ด๋‹น ๋ฒ„์ „์˜ ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์ด๋ ฅ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

image

์ฆ‰, ๋ชจ๋“  ๋ณ€๊ฒฝ ์ด๋ ฅ์€ ๋ฒ„์ „ ๋ณ„ .xml ํŒŒ์ผ์„ ํ†ตํ•ด ์ถ”์ /๊ด€๋ฆฌ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.





๋ณ€๊ฒฝํ•  ์Šคํ‚ค๋งˆ๋Š” .sql ํ˜•ํƒœ๋กœ ํด๋” ๋‚ด์— ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋Š” .xml ํŒŒ์ผ์— ํฌํ•จ๋˜๋„๋ก ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

<?xml version="1.0" encoding="UTF-8"?>
<databaseChangeLog
        xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.1.xsd">
    <changeSet id="v1.0.0/datachangelog/table-create" author="jun" context="dev">
        <comment>๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ๊ด€๋ฆฌ ํ…Œ์ด๋ธ” ์ƒ์„ฑ</comment>
        <sqlFile path="databasechangelog.sql" relativeToChangelogFile="true"/>
    </changeSet>
    <changeSet id="v1.0.0/user/table-create" author="jun" context="dev">
        <comment>์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ” ์ƒ์„ฑ</comment>
        <sqlFile path="user-table-create.sql" relativeToChangelogFile="true"/>
    </changeSet>
    <changeSet id="v1.0.0/user/column-add/last-modified-at" author="jun" context="dev">
        <sqlFile path="add-last-modified-at.sql" relativeToChangelogFile="true"/>
    </changeSet>
    <changeSet id="v1.0.0/user/column-delete/last-modified-at" author="jun" context="dev">
        <sqlFile path="delete-last-modified-at.sql" relativeToChangelogFile="true"/>
    </changeSet>
</databaseChangeLog>







2-3. ์ตœ์ข… ๋ฐ˜์˜ ์Šคํ‚ค๋งˆ ํŒŒ์ผ ์ƒ์„ฑ

๋ฐฐํฌ ํ™˜๊ฒฝ์— ์ ์šฉํ•  ์ตœ์ข… ์Šคํ‚ค๋งˆ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

image

image







3. ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ๋‚ด์—ญ

์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ์—”ํ‹ฐํ‹ฐ๋กœ ๋งŒ๋“ค๋ฉด, ๋ณ€๊ฒฝ ์ด๋ ฅ์„ UI๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Entity(name = "databasechangelog")
@Table(name = "databasechangelog")
data class DatabaseChangelog(
    @Id
    @Column(name = "ID", length = 255, nullable = false)
    var id: String,

    @Column(name = "AUTHOR", length = 255, nullable = false)
    var author: String,

    @Column(name = "FILENAME", length = 255, nullable = false)
    var fileName: String,

    @Column(name = "DATEEXECUTED", nullable = false)
    var dateExecuted: LocalDateTime,

    @Column(name = "ORDEREXECUTED", nullable = false)
    var orderExecuted: Int,

    @Column(name = "EXECTYPE", length = 10, nullable = false)
    var execType: String,

    @Column(name = "MD5SUM", length = 35)
    var md5Sum: String? = null,

    @Column(name = "DESCRIPTION", length = 255)
    var description: String? = null,

    @Column(name = "COMMENTS", length = 255)
    var comments: String? = null,

    @Column(name = "TAG", length = 255)
    var tag: String? = null,

    @Column(name = "LIQUIBASE", length = 20)
    var liquibase: String? = null,

    @Column(name = "CONTEXTS", length = 255)
    var contexts: String? = null,

    @Column(name = "LABELS", length = 255)
    var labels: String? = null,

    @Column(name = "DEPLOYMENT_ID", length = 10)
    var deploymentId: String? = null
)







4. ์ฃผ์˜ ์‚ฌํ•ญ

prod ํ™˜๊ฒฝ์„ ์ž๋™ํ™”์— ์˜์กดํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๊ธ‰์  local, dev์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, Liquibase๋Š” Tag๋‚˜ RollbackCount๋ฅผ ํ†ตํ•ด ํŠน์ • ์ง€์ ์œผ๋กœ Rollbackํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์–ด๋–ค ๋ถ€์ž‘์šฉ์„ ์ผ์œผํ‚ฌ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์‹ ์ค‘ํžˆ ์ ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  1. prod ํ™˜๊ฒฝ์—๋Š” ๊ฐ€๊ธ‰์  ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
  2. Rollback์€ ์‹ ์ค‘ํžˆ ์ ์šฉํ•œ๋‹ค.

Releases

No releases published

Packages

No packages published

Languages