tempcru 삽질기록

Liquibase - DB에서 changeLog 생성하기 (DML, DDL) 본문

Database

Liquibase - DB에서 changeLog 생성하기 (DML, DDL)

dev-tempcru 2022. 3. 15. 00:21

Liquibase - DB에서 changeLog 생성하기 (create table 용, insert 용)


 

Liquibase를 활용하여 DB 초기 스크립트를 관리하는 경우가 있다

이런 경우 보통은 Dev, Test, Stage, Prod 등으로 나눠서 changeLogversion 별로 관리한다.

 

liquibase 를 활용한 db migration 관리

Liquibase 란?

  • XML(changeLog) 기반 DB Migration 도구이다
  • DML, DDL 등 sql script들은 형상관리는 가능하지만 어떤DB에 어떤 스크립트가 돌아갔는지는 모르기 때문에 사용하는 도구이다. (target DB에 어떤 내용이 반영됐는지 table이 생긴다)
  • Tool 이기 때문에 Download 하여 OS 에 설치 할 수도 있고, gradle, maven 같은 것을 활용하여 java 기반 프로젝트와 연계할 수도 있다. (이를테면 WAS 기동할 때 반영안된 changelog를 반영해라 같은..)
  • flywaydb 랑 비슷한 역할을 수행한다. (https://flywaydb.org/documentation/usage/maven/migrate)

 

 

왜 DB에서 changeLog를 생성할까?

  • changeLog를 활용하여 local db init을 해야하는데, 기존 개발자들 (떠난 개발자들)이 개발계 DB에 직접작업을 해놓고 changeLog를 작성하지 않았다. (이래서 이글을 작성한다)
  • db client tool 을 사용하는게 changelog 작성하는 것보다 빠르다, 그래서 table 만들어놓고 changelog를 뽑아낸다
  • 초기 Sample Data를 기본적으로 넣어놓고 싶을 때도 쓴다 (덤프를 뜨시면 되는거 아닌가요?...test 돌릴때마다 초기화시키고 싶은 Sample 인경우 써요)

 

그럼 어떻게 changeLog를 생성할까?

1. liquibase 다운로드

https://docs.liquibase.com/install/home.html

OS 에 맞게 설치하도록하자
2. 압축해제

3. 명령 프롬포트로 해당 폴더에 접근하고 liquibase cli를 입력하면 아래와 같은 파일이 생성된다.

Liquibase CLI 사용법

  • https://docs.liquibase.com/commands/generatechangelog.html?Highlight=generateChangelog

DDL Export

liquibase  
--driver="{driver_type}"
--classpath="{driver_location}" 
--changeLogFile="{output_file}"
--url="jdbc:postgresql://{url}:{port}/{database_name}" 
--username="{connection_user_name}" 
--password="{connection_password}" 
--diffTypes="{target_scope}" 
generateChangeLog

DDL Export Sample

liquibase --driver=org.postgresql.Driver --classpath="{driver location}" --changeLogFile=dml_changelog.xml --url="jdbc:postgresql://{url}:{port}/{database_name}" --username=test --password="1234" --diffTypes="tables,views,columns,indexes,foreignkeys,primarykeys,uniqueconstratints" generateChangeLog
특정 Table 만 추출할 경우에는 includeObject="table:{테이블명1},{테이블명2}"

 

DML Export

liquibase  
--driver="{driver_type}"
--classpath="{driver_location}" 
--changeLogFile="{output_file}"
--url="jdbc:postgresql://{url}:{port}/{database_name}" 
--username="{connection_user_name}" 
--password="{connection_password}" 
--diffTypes="data" 
generateChangeLog
diffType 만 data로 놓으면 된다.

 

github

https://github.com/tempcru/script-sample/blob/main/liquibase/how_to_generate_changelog.md