CS 공부/기타

[CS] Liquibase 란 무엇인가?

강_토발즈 2025. 5. 14. 20:41

 

 

 

 

 

1. Liquibase란?

 

 

Liquibase는 데이터베이스 변경 사항(DDL: 테이블 생성, 수정, 삭제 등)을 버전 관리하고 자동으로 적용하는 오픈소스 도구이다.쉽게 말하면, 데이터베이스에 적용할 변경사항을 파일로 기록하고, 이를 순차적으로 관리하는 프로그램이다.코드(소스코드)를 Git으로 버전 관리하듯이, Liquibase는 DB 스키마나 데이터 변경을 '버전' 단위로 관리할 수 있도록 해준다.소스코드 관리에 Git이 있다면, 데이터베이스 관리에는 Liquibase가 있다고 할 수 있다.

 

2. 왜 Liquibase가 필요한가?

 

개발 환경이나 운영 환경에서 다음과 같은 문제를 겪은 적이 있을 것이다. 예를 들어, "DB 테이블을 수정했는데, 어느 환경에 적용되었는지 헷갈리는 경우"가 있다. 또는 "개발 환경에는 적용되었지만 운영 서버에는 누락되어 오류가 발생하는 경우"도 있다. 심지어 "버전이 달라 프로그램이 정상적으로 동작하지 않는 문제"도 종종 발생한다. 이런 문제들은 모두 데이터베이스 변경 사항을 체계적으로 관리하지 못했기 때문에 발생하는 것이다. Liquibase는 이러한 문제를 해결하기 위해 만들어진 도구이다.

 

Liquibase를 사용하면 다음과 같은 이점을 얻을 수 있다.

  • 데이터베이스 변경 사항을 코드처럼 관리할 수 있다.
  • 개발, 테스트, 운영 등 모든 환경에서 변경사항을 일관되게 적용할 수 있다.
  • 수작업 없이 변경 이력을 자동으로 관리할 수 있다.

언제, 누가, 어떤 변경을 했는지 명확하게 기록할 수 있다.

 

 

 

3. Liquibase는 어떻게 동작하는가

 

Liquibase의 기본 구조는 단순하다.(근데  이해하는데 어려웠다ㅜㅜ) 우선, 데이터베이스 변경사항을 기록하는 ChangeLog 파일을 작성해야 한다. ChangeLog 파일은 XML, YAML, JSON, SQL 형식 중 하나를 선택하여 작성할 수 있다.


여기에는 "어떤 테이블을 생성할지", "어떤 컬럼을 추가할지"와 같은 변경 내용을 구체적으로 기록한다. 작성한 변경사항은 ChangeSet이라는 단위로 관리한다. 하나의 변경 작업(예를 들어 테이블 추가)은 하나의 ChangeSet으로 묶으며,
각 ChangeSet에는 고유한 ID와 작성자(author) 정보가 함께 기록된다.

 

Liquibase를 실행하면, 작성한 ChangeLog 파일을 읽어 아직 데이터베이스에 적용되지 않은 변경사항만 골라 적용한다.
이 과정을 통해 중복 적용이나 오류를 방지할 수 있다. 또한 Liquibase는 데이터베이스 안에 자체적으로  DATABASECHANGELOG라는 테이블을 생성하여, "어떤 ChangeSet이 이미 적용되었는지"를 기록하고 관리한다.

 

이 기록을 기반으로 Liquibase는 변경 이력을 추적하고, 새로운 변경사항만 안전하게 반영할 수 있다.

 

즉 Liquibase는 데이터베이스 변경사항만을 기록하는 지침서(ChangeLog 파일)를 만들어두고, 그 지침서를 따라 변경을 자동으로 관리하는 시스템이라고 이해하였다.

 

 

 

4. Liquibase 기본 사용 흐름

 

1. 변경하고 싶은 작업을 ChangeLog 파일에 작성한다.


2. Liquibase를 실행해서 변경사항을 DB에 적용한다.


3. 적용된 내역은 DB 내부의 DATABASECHANGELOG 테이블에 저장된다.


4. 다음부터는 중복 적용 없이 새로운 변경사항만 실행된다.

 

 

5. Liquibase 예시 (YAML 버전)

databaseChangeLog:
  - changeSet:
      id: 1
      author: kang
      changes:
        - createTable:
            tableName: user
            columns:
              - column:
                  name: id
                  type: bigint
                  autoIncrement: true
                  constraints:
                    primaryKey: true
              - column:
                  name: username
                  type: varchar(255)
              - column:
                  name: password
                  type: varchar(255)
 
 

→ 이런 식으로 테이블 생성도 코드처럼 관리할 수 있다!

 

<<내용>>

 

  • user라는 테이블을 새로 생성하겠다.
  • 테이블 안에는 총 3개의 컬럼(column)이 있다:
    • id 컬럼
      • 자료형: bigint
      • 자동 증가(autoIncrement: true)
      • 기본키(primaryKey: true)
    • username 컬럼
      • 자료형: varchar(255) (최대 255자 문자열)
    • password 컬럼
      • 자료형: varchar(255) (최대 255자 문자열)
  • 이 변경사항은 하나의 ChangeSet으로 묶여 있고,
    • id: 1 (변경 작업 고유 번호)
    • author: kang (작성자 이름이 'kang')
  • 이 ChangeSet은 Liquibase가 실행될 때 적용되고,
    • 적용되면 DATABASECHANGELOG 테이블에 "id 1번은 적용 완료"로 기록된다.

 

 

 

6. Liquibase의 장점


수작업 최소화 개발자/운영자 모두 SQL 직접 쓸 필요 없음
자동 적용 변경 이력을 자동 추적하고 필요한 것만 적용
멀티환경 지원 개발, 테스트, 운영서버에 일관성 유지 가능
다양한 포맷 지원 XML, YAML, JSON, SQL 원하는 파일 포맷 사용 가능
롤백 기능 문제 발생 시 이전 버전으로 쉽게 롤백 가능
 

 

7. 마무리

"Liquibase는 데이터베이스 변경사항을 코드처럼 관리하고, 버전별로 적용/추적할 수 있게 해주는 도구다. 오늘은 기본 개념에 대해 알아보았고, 추후 설치 및  직접 사용해보면서 DB의 변경사항을 관리하는 방법을 실습해보도록 하자!