1. 소개

데이터베이스 개발에 대한 지속적인 통합과 자동화된 리팩토링의 시대에 우리는 진화적인 데이터베이스 설계 기술이 필요합니다 . Liquibase  및  Flyway 와 같은 도구는  이러한 기술을 따르고 반복적인 개발 접근 방식을 제공합니다. 이 기사에서는 Liquibase와 Flyway의 차이점과 유사점을 연구합니다.

모든 사용 사례에 완벽한 도구는 없습니다. 각 도구는 고유한 위치에서 강력합니다.

2. Liquibase와 Flyway의 유사점

Liquibase와 Flyway는 진화 데이터베이스의 설계 원칙을 구현하기 때문에 유사한 기능을 많이 제공합니다. 두 도구:

  • 어느 정도 오픈 소스이며 데이터베이스 스키마 변경 사항을 관리, 추적 및 배포하는 데 도움이 됩니다.
  • 데이터베이스 스키마 변경에 버전이 지정된 마이그레이션 접근 방식을 사용합니다.
  • Java를 기반으로 하며 Spring BootVert.x 와 같은 Java 프레임워크에 대한 광범위한 지원을 제공합니다 .
  • Maven 및 Gradle과 같은 빌드 도구와의 통합을 지원합니다.
  • 제공된 스크립트를 통해 명령줄과 독립적으로 실행할 수 있습니다.
  • 다양한 데이터베이스를 지원합니다.

이제 이러한 도구가 제공하는 제품 간의 차이점에 대해 설명합니다.

3. Liquibase와 Flyway의 차이점

3.1. 변경 정의

Flyway는 변경을 정의하기 위해 SQL을 사용합니다. 반면에 Liquibase는 XML, YAML 및 JSON과 같은 SQL을 비롯한 다양한 형식으로 변경 사항을 지정할 수 있는 유연성을 제공합니다. Liquibase를 사용하면 데이터베이스에 구애받지 않는 언어로 작업하고 스키마 변경 사항을 다양한 데이터베이스 유형에 쉽게 적용할 수 있습니다.

Flyway는 버전이 지정된 각 변경 사항에 따라 증가 하는 선형 데이터베이스 버전 관리 시스템을 중심으로 구축되었습니다 . 이것은 때때로 병렬 개발과 충돌을 일으킬 수 있습니다. Flyway 스크립트의 파일 이름은 마이그레이션 유형을 정의합니다 . 예를 들어 마이그레이션에는 V  (버전 관리), U(실행 취소) 및 R(반복 가능)과 같은 접두사 규칙이 있어야 합니다 . 버전 번호와 구분 기호 __(밑줄 2개), 설명 및 V01__Add_New_Column.sql  과 같은  접미사 .sql 이 옵니다 .

Liquibase 마이그레이션은 파일 이름 규칙을 따를 필요가 없습니다. Liquibase에서 변경 사항은 모든 마이그레이션을 포함하는 것으로 정의되는 마스터 변경 로그로 알려진 하나의 원장에 의해 관리됩니다 .

3.2. 변경 사항 저장

두 도구 모두 배포된 변경 사항을 테이블에 저장합니다. Flyway 마이그레이션은 flyway_schema_history 라는 기본 테이블과 함께 데이터베이스 스키마에 저장됩니다 . 마찬가지로 Liquibase는 배포된 마이그레이션을 databasechangelog 라는 테이블에 저장  합니다 . 두 도구 모두 기본 구성 재정의를 지원하여 테이블 이름을 변경합니다.

3.3. 변경의 실행 순서

변경 순서를 관리하는 것은 Flyway에서 비교적 어렵습니다. Flyway에서 순서는 파일 이름의 버전 번호와 마이그레이션 유형에 따라 다릅니다. 이와는 대조적으로 Liquibase는 master_changelog 라는 별도의 파일 을 사용 하여 변경 사항이 정의된 순서대로 배포됩니다.

3.4. 변경 사항 롤백

이제 데이터베이스 마이그레이션의 주요 측면 중 하나에 대해 논의해 보겠습니다. 잘못된 변경으로 인해 애플리케이션에 치명적인 문제가 발생할 때마다 롤백이 필요합니다. Liquibase는 모든 것을 롤백하거나 특정 마이그레이션을 실행 취소하는 방법을 제공합니다(유료 버전에서만 사용 가능).

Flyway에는  U 로 시작하는 파일 이름 뒤에 실행 취소해야 하는 버전이 따라오는 실행 취소 마이그레이션도 있습니다. 유료 버전은 훨씬 더 복잡한 실행 취소 기능도 제공합니다.

두 도구 모두 적절한 롤백 기능을 제공하지만 무료 버전만 고려하면 Flyway는 사용하기 좋은 솔루션을 제공합니다.

3.5. 변경 사항의 선택적 배포

하나의 환경에만 변경 사항을 배포해야 하는 사용 사례가 있습니다. 변경 사항을 선택적으로 배포해야 하는 경우 Liquibase가 유리합니다. Flyway도 가능하지만 각 환경이나 데이터베이스에 대해 다른 구성 파일을 설정해야 합니다. Liquibase를 사용하면 레이블과 컨텍스트  를 쉽게 추가하여 특정 위치에 배포할 수 있습니다.

3.6. 자바 기반 마이그레이션

두 도구 모두 강력한 Java 지향적이고 Java 기반 마이그레이션을 제공합니다. FlywayLiquibase 를 사용하면 Java 파일 내에서 마이그레이션을 정의할 수 있습니다. 이는 일부 시나리오에서 유리할 수 있습니다.

3.7. 스냅샷 및 데이터베이스 비교

Liquibase는 사용자가 데이터베이스 의 현재 상태에 대한 스냅샷을 찍을 수 있도록 합니다. 이 상태를 사용하여 다른 데이터베이스와 비교할 수 있습니다. 이는 장애 조치 및 데이터베이스 복제와 같은 시나리오에서 매우 유용합니다. 반면에 Flyway는 스냅샷 기능을 지원하지 않습니다.

3.8. 조건부 배포

Liquibase는 사전 조건이라는 추가 기능을 제공합니다. 사전 조건을 통해 사용자는 데이터베이스의 현재 상태를 기반으로 변경 사항을 적용할 수 있습니다. 변경 집합은 이러한 전제 조건을 통과하는 경우에만 실행됩니다.

반면에 Flyway는 이것을 지원하지 않습니다. 그러나 절차를 통해 대부분의 SQL 기반 데이터베이스에 조건을 적용할 수 있습니다.

4. 결론

이 기사에서는 가장 많이 사용되는 데이터베이스 마이그레이션 도구인 Liquibase와 Flyway를 비교했습니다. 도구 중에서 선택할 때는 항상 절충점이 있습니다. 두 도구 모두 서로 비교할 때 강한 단점이나 장점이 없습니다. 애플리케이션 요구 사항에 따라 Liquibase 또는 Flyway를 선택하고 대부분의 상자를 선택할 수 있습니다.

Persistence footer banner