Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ChatOpenAI
- 교수님의 기말고사풀이
- 백준3078 풀이
- 백준
- 백준3078
- 두 스티커
- 백준20126
- 백준1720
- 백준1802
- java
- 백준2098
- liquibse
- 백준17124
- BaseCallbackHandler
- 백준 시간초과
- 백준 도서관
- generateChangeLog
- 백준1461
- 외판원순회
- streamlit
- Frog River One
- 두 개의 배열
- 백준11332
- export changeLog
- Codility
- LangChain
- 백준16937
- 백준 타일코드
- 백준13417
- streaming chat
Archives
- Today
- Total
tempcru 삽질기록
Liquibase - DB에서 changeLog 생성하기 (DML, DDL) 본문
Liquibase - DB에서 changeLog 생성하기 (create table 용, insert 용)
Liquibase를 활용하여 DB 초기 스크립트를 관리하는 경우가 있다
이런 경우 보통은 Dev, Test, Stage, Prod 등으로 나눠서 changeLog를 version 별로 관리한다.
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