Liquibase란 무엇인가
- Liquibase는 데이터베이스의 변경 이력을 관리하기 위한 DevOps 오픈소스
- 변경 이력은 yaml, xml, json으로 작성 가능(이 글의 예시로는 yaml을 사용)
Liquibase 설치하기
- Liquibase 공식 홈페이지에 접속 후, 운영 체제에 맞게 설치
Liquibase 사용해보기
liquibase.properties파일 생성
- 이력 관리를 할 데이터베이스와 계정을 설정하는 파일
- liquibase.properties이름의 파일을 만들어도 되지만, 아래의 command로 자동 생성도 가능
$ liquibase init project
liquibase.properties파일 내용 예시
- 이 글에서는 MySQL을 사용
classpath
는 사용하려는 데이터베이스의 jar파일을 작성
- 각 데이터베이스 공식 홈페이지에서 다운로드 가능
- 다운로드 후, properties파일과 같은 depth의 path에 위치
- 변경 이력은 root.yaml이라는 파일에 작성
#liquibase.properties
changeLogFile: {이력 관리 파일이름: 예시) root.yaml}
classpath: mysql-connector-j-8.0.32.jar
url: jdbc:mysql://127.0.0.1:3306/{database_name}
username:{user_name}
password:{password}
root.yaml작성하기
yaml파일에 작성한 내용 적용하기
- yaml파일에 데이터베이스 수정내용을 작성한 후, 아래의 command로 변경내용을 데이터베이스에 적용
$ liquibase update
변경 사항 작성하기
테이블 및 컬럼 생성하기
- 데이터베이스에 새로운 테이블을 생성하고 컬럼을 생성하기 위한 방법
changeSet
에 변경할 내용 작성
id
는 절대 중복해서는 안됨
author
에는 변경내용 작성자
preConditions
는 변경전의 상태를 기술
- 해당 예시에서는 생성하려는 테이블이 없는 경우 작성한 yaml가 적용되도록 작성
- 버그 발생을 최소한으로 하기위해서 변경 목적에 맞는 pre-condition을 작성해야 함
changes
에는 변경 내용 작성
- 테이블 이름과 컬럼에 관한 내용을 작성
- 컬럼은 컬럼 이름과 테이터 타입, 제약 등을 작성
databaseChangeLog:
- changeSet:
id: make-table-test
author: jaeseung.jeong
preConditions:
onFail: MARK_RAN
not:
tableExists:
tableName: test
changes:
- createTable:
tableName: test
columns:
- column:
name: seq
type: bigint(20)
autoIncrement: true
constraints:
primaryKey: true
- column:
name: column_int
type: bigint(20)
- column:
name: column_string1
type: varchar(50)
- column:
name: column_string2
type: varchar(50)