[DevOps] Liquibase 사용하기

Joney의 SW 공부 블로그·2023년 3월 5일
0

CI/CD

목록 보기
2/2

Liquibase란 무엇인가

  • Liquibase는 데이터베이스의 변경 이력을 관리하기 위한 DevOps 오픈소스
  • 변경 이력은 yaml, xml, json으로 작성 가능(이 글의 예시로는 yaml을 사용)

Liquibase 설치하기

  • Liquibase 공식 홈페이지에 접속 후, 운영 체제에 맞게 설치

Liquibase 사용해보기

liquibase.properties파일 생성

  • 이력 관리를 할 데이터베이스와 계정을 설정하는 파일
  • liquibase.properties이름의 파일을 만들어도 되지만, 아래의 command로 자동 생성도 가능
    $ liquibase init project

liquibase.properties파일 내용 예시

  • 이 글에서는 MySQL을 사용
    • url에 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작성하기

  • root는 변경 이력 파일의 기반 파일
  • 이 글에서는 테이블 별로 yaml파일을 작성해서 이력을 관리하며, root에 각 파일의 이름을 작성해서 이력 전반을 관리
    databaseChangeLog:
      - include:
          file: test1.yaml
      - include:
          file: test2.yaml
      - include:
          file: test3.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)
profile
SW 지식 노트 블로그

0개의 댓글