Tool

Liquibase 를 이용한 DB Schema 형상 맞추기

developer.woozi 2023. 3. 2. 19:49

Liquibase

https://www.liquibase.org/

Liquibase 는 민첩한 소프트웨어 개발 환경에서
데이터베이스 변경사항을 더 쉽게 관리할 수 있도록 하기 위해 등장한 오픈 소스이다.
Apache 2.0 라이센스를 가지고 있는 것이 특징이다.

흔히들, Spring 에서 지원하기에 라이브러리로 판단하는 경우가 많지만
Liquibase 는 설치형 프로그램으로써 형상이 다른 두 DB의 변경사항을 파악하기 위해 사용한다.

다양한 블로그에서 Spring 에 Liquibase 플러그인과 라이브러리를 사용하는 법을 다룬다.
이번 포스팅에서는 그보다, 필자가 업무에서 만난 어려움을 Liquibase 를 통해 해결한 방법을 소개하고자 한다.

 

Liquibase 의 용도

Liquibase 의 용도는 아래와 같이 구분할 수 있다.

  1. DB Schema 형상 관리
  2. DB Schema 비교

DB Schema 비교

Schema 비교는 Liquibase 의 메인이라 보기 어렵지만 상당히 유용한 기능이다.

 

필자의 경우, 담당하는 서비스가 B2B 솔루션 프로젝트이기에
각 고객사별 배포되어 있는 DB Schema 버전(서비스 버전)이 다르기에 형상 관리에 어려움이 많다.

형상 관리의 어려움이 있다고 무턱대고 서비스를 배포하면,
Schema 형상이 달라 발생할 수 있는 문제에 대해서, 상황에 따라서 되돌리기 힘든일이 발생할 수도 있다.

 

  • 애플리케이션 서버 구동 실패
  • 잘못된 형상의 데이터 입력
  • 기타 DB 관련 사이드 이펙트

 

B2B 솔루션이 아니더라도, 일반적인 서비스의 CI/CD 과정에서 Liquibase 의 Diff 를 사용하면
앞서 말한대로, 잘못 구성된 DB Schmea 를 참조하는 서버에 대해서 빌드 및 배포를 막을 수 있다.


DB Schema 비교 실행

우선, 해당 링크에서 Liquibase 를 이미 설치했다고 가정하에 진행한다.

DB Schema 비교 실행에 앞서, 편의를 위해 아래와 같은 쉘스크립트를 작성하면 좋다.
필자는 mariadb 를 기준으로 작성했으며, 사용하는 Vendor 에 따라 알맞게 수정해주면 된다.

diff-changelog-schema.sh

sh ./diff-changelog-schema.sh [스키마명...]

 

위 스크립트를 구동하면, 두 DB 인스턴스의 Schema 형상 동기화를 위한 SQL 문을 만들어 준다.
다만, 주의점으로 일부 주석등이 잘못 파싱되거나, 이미 동일한 컬럼을 ALTER하는등의 이슈가 있으며

Schema 형상 동기화를 위한 SQL 문을 만들어 줄 뿐이지
DB 내부에 Row Format 과 같은 요소들은 고려가 되지 않기에
실제 반영하기 전에 개발자가 최종 확인하고 적용하는 책임을 가져야한다.(도구는 도구일 뿐이다.)