본문 바로가기

개발(합니다)/Java&Spring

[spring boot 설정하기-5] liquibase 설정 및 연동

반응형

소스는 형상관리가 되지만 DB는 형상관리가 잘 되지 않아 곤란한 적이 있습니다.

ERD를 통해 현재의 정보를 확인할 수 있지만 새로운 환경에 배포해야 하거나 달라진 점을 하나하나 확인해야 합니다.

특히 개발 서버와 운영 서버가 달라진 점을 바로 알아차리기 어렵습니다.

이러한 문제점을 해결 할 수 있는게 liquibase입니다.

관련 정보는 아래 사이트에서 찾아볼 수 있습니다.

https://www.liquibase.org/
https://www.liquibase.org/documentation/xml_format.html

liquibase는 spring boot에 연동해서 사용할 수도있고 단독으로 db 구성을 사용하는데 사용할 수도 있습니다.


1. 의존성 추가

implementation 'org.liquibase:liquibase-core'

2. application.yml 추가

liquibase를 사용하기 위한 최소한의 설정값입니다.
change-log는 root가 되는 xml 파일의 위치를 작성하고 enabled는 사용할지 말지를 정합니다.

  liquibase:
    change-log: classpath:db/changelog/db.changelog-master.xml
    enabled: true

3. db.changelog-1.0.xml와 db.changelog-master.xml 생성

DB 이력을 실제로 관리하는 파일을 생성합니다.
db.changelog-master.xml는 버전별로 관리하는 메인 xml 파일이며 추가한 순서대로 파일을 실행합니다.
db.changelog-1.0.xml는 파일 단위로 추가, 수정, 변경하는 실제 DB에 적용하는 xml 파일입니다.

DBMS마다 사용하는 방법이 조금씩 다르므로 문서를 참고해서 맞게 작성해주어야 합니다.
xml 이외에도 yml, sql, json 등으로 만들 수 있습니다.

3-1. db.changelog-master.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.8.xsd">

    <include  file="db/changelog/db.changelog-1.0.xml"/>
    <!-- <include  file="com/example/db/changelog/db.changelog-1.1.xml"/>
    <include  file="com/example/db/changelog/db.changelog-2.0.xml"/>    -->

</databaseChangeLog>

3-2. db.changelog-1.0.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.8.xsd">

    <changeSet author="otrodevym" id="changelog-1.0">
        <!-- 테스트 테이블 -->
        <createTable tableName="test">
            <column name="seq" type="bigint" autoIncrement="true">
                <constraints primaryKey="true"/>
            </column>
            <column name="name" type="varchar(15)" >
                <constraints nullable="false"/>
            </column>
            <column name="reg_date" type="timestamp" defaultValueDate="now()">
                <constraints nullable="false"/>
            </column>
        </createTable>
    </changeSet>

</databaseChangeLog> 

4. databasechangelog와 databasechangeloglock 자동 생성

환경 설정을 마치고 프로젝트를 실행하면 databasechangelog와 databasechangeloglock 두 테이블이 생성됩니다.
databasechangelog는 변경 이력을 저장하고 databasechangeloglock는 문제가 생기면 DB에 락을 거는 테이블입니다.
락이 걸리면 LOCKED 컬럼이 0에서 1로 되는데 이를 다시 0으로 변경해주면 정상 작동이 가능합니다.

databasechangelog
databasechangeloglock

5. test 테이블 자동 생성

 

반응형