개발하다보니 더 추가할사항이 있어서 추가해보겠당~!
1. Liquibase 란?
데이터베이스 변경관리를 체계적으로 자동화 해주는 오픈소스 (스키마 버전 관리)
개발하다보면 DB가 어쩔수 없이 변경되는 경우가 있을 수 있다. 이경우 갑자기 DB를 변경할 경우
각 개발자 로컬에서 수많은 버그들이 발생할것이다.. 그리고 관리도 어렵고
그래서 관리를 하기위해서 git처럼 형상관리로 하는거다 project 안에 파일이 있으니까 더 수월히 된다
2. 사용법
1. maven 에 liquibase를 pom.xml에 추가해준다.
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
2. liquibase.xml 파일을 생성해준다.
부모가 되는 xml 파일이다. 다른 각각 테이블 별로 된 xml 파일을 여기서 include 해준다.
<include file="~~~.xml" relativeToChangelogFile="true" />
3. 각 테이블마다 xml을 만들어 주면된다.
https://www.liquibase.org/documentation/xml_format.html
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> <preConditions> <runningAs username="liquibase"/> </preConditions> <changeSet id="1" author="nvoxland"> <createTable tableName="person"> <column name="id" type="int" autoIncrement="true"> <constraints primaryKey="true" nullable="false"/> </column> <column name="firstname" type="varchar(50)"/> <column name="lastname" type="varchar(50)"> <constraints nullable="false"/> </column> <column name="state" type="char(2)"/> </createTable> </changeSet> <changeSet id="2" author="nvoxland"> <addColumn tableName="person"> <column name="username" type="varchar(8)"/> </addColumn> </changeSet> <changeSet id="3" author="nvoxland"> <addLookupTable existingTableName="person" existingColumnName="state" newTableName="state" newColumnName="id" newColumnDataType="char(2)"/> </changeSet> </databaseChangeLog>
4. spring에 databaseConfig 파일d에 liquibase관련 내용을 Bean으로 만들어준다.
SpringLiquibase liq = new SpringLiquibase();
liq에 필요한 내용을 set해준다( datasource등..)
5. 그이후 서버를 기동하면 다음과 같은 테이블이 생성함을 확인 할 수 있다.
databasechangelog databasechangeloglock |
databasechangelog는 한번 돌았던 xml파일을 다시 반영하지 않기 위해 어떤파일을 database에 반영했는지
기록하는 테이블이고
databasechangeloglock은 기동하면서 xml파일이 반영될때 lock을 잡고 있을때 테이블에 데이터가 들어갔다가
lock이 해제되면 빠진다
'DEVELOP > DB' 카테고리의 다른 글
[MariaDB] general log 설정하기 (0) | 2020.05.25 |
---|---|
DB (mysql) 설정 변경 (0) | 2020.03.13 |
NewSql 이란? All in one DBMS (0) | 2019.12.16 |
NoSql DB 종류 (0) | 2019.12.13 |
DB(database)의 종류 (0) | 2019.12.11 |