왜 그리고 언제 Liquibase입니까?


98

이 질문을 스택 오버플로에서 검색하려고 시도했지만 이에 대한 질문을 찾을 수 없습니다.
나는 새롭고 Liquibase알고 싶어

  • Liquibase?
  • Liquibase프로젝트에서 정확히 언제 사용해야 합니까?

이것은 모든 데이터베이스 변경 사항 을 한곳에 보관하는 것이지만 SQL일부 저장소 시스템에서 간단한 파일 을 만들고 시간이 지남에 따라 계속 업데이트 하면 비슷한 작업을 수행 할 수 있습니다 .

답변:


70

자체 관리 형 스키마 생성 파일과 Liquibase (또는 기타 스키마 마이그레이션 도구) 의 주요 차이점 은 후자가 스키마 변경 로그를 제공한다는 것입니다. 이것은 시간에 따른 스키마 변경 기록입니다. 이를 통해 데이터베이스 디자이너 는 스키마 변경 사항 을 지정할 수 있으며 필요에 따라 스키마를 프로그래밍 방식으로 업그레이드하거나 다운 그레이드 할 수 있습니다.

다음과 같은 다른 이점이 있습니다.

  • 데이터베이스 공급 업체 독립성 (의심 스럽지만 시도)
  • 자동화 된 문서
  • 데이터베이스 스키마 차이

한 가지 대체 도구는 플라이 웨이 입니다.

데이터 손실없이 스키마 업데이트를 자동으로 관리하고 싶거나 필요할 때 스키마 마이그레이션 도구를 사용하도록 선택할 수 있습니다. 즉, 시스템이 고객 사이트 또는 안정적인 테스트 환경과 같이 수명이 긴 환경에 배포 된 후 스키마가 변경 될 것으로 예상합니다.


1
그러나 파일을 생성하고 그 안에 첫 번째 스크립트를 작성하고이를 git이라고 가정 해 보겠습니다. 이제 시간이 지남에 따라 스키마가 업데이트되고 임의의 시간 간격으로 돌아가서 스키마도 다시 변경할 수 있습니다.
Shakeel Shahzad 2015

1
이러한 접근 방식을 사용 하면 스키마를 다시 만들 수 있지만 다운 그레이드 / 업그레이드 할 수 없습니다. 차이점은 데이터 손실입니다.
Synesso 2015

1
하지만 다른 부분은 언제 사용하지 않습니까?
Shakeel Shahzad 2015

1
Synesso 한동안 사용하고 새로 추가 된 열을 사용하여 데이터에 대한 결정을 내린 후 프로덕션 데이터베이스를 자동으로 다운 그레이드 할 수있는 방법을 아직 알지 못합니다. 이제 반드시 드롭 할 수는 없습니다. 또한 이것이 소스 제어에 보관 된 일련의 버전 화 된 SQL 스크립트보다 나은 이유를 알 수 없습니다. 여기에는 처음에 버전 테이블에 간단한 삽입을 포함하고 마지막에 적용된 내용을 추적하기위한 업데이트가 포함됩니다.
Khorkrak 19

또 다른 질문 추가 ... 어떻게 우리가 자바에서 이메일을 통해 오류를 기록 할 수 있습니까? SQL 변경이 XML을 통해 변경 될 때?
UmaShankar

18

스키마를 수정할 때 개발자들 사이에서 liquibase가 규율을 만드는 것을 보았습니다. 다른 개발자의 변경 사항을 덮어 쓰고 실행할 수는 없습니다. 대신 고유 한 변경 집합을 만들어 실행할 변경 시퀀스의 끝에 추가합니다. 이것은 또한 어떤 변화가 언제 왔고 누가 가져 왔는지에 대한 명확성을 제공합니다.

스키마 유지 관리에 대한 매우 "버전 화 된"접근 방식입니다.

처음에는 "불필요한 작업"이라는 인상을줍니다.


4
나입니다 (당신이 언급 한 정확한 인상을줍니다 : P) 결정적인 결정을 위해 +1
Ismail Sahin

귀하의 말이 맞습니다. 우리는 최근에 변경 한 사람과시기를 모두 추적 할 수 있습니다. 우리가 특정 포인트 liquibase에 rool의 뒷면에 네드 경우 도움이 될 것입니다
Anoop PS

7

dev, qa, production에 여러 데이터베이스 인스턴스가 있고 변경 내역을 자동으로 추적하고 변경 사항을 지능적으로 적용하는 도구 (현재 스키마 및 최종 스키마의 차이 적용)를 원할 때 liquibase 또는 flyway와 같은 도구가 매우 유용합니다. .


3

나는 당신의 철학이 데이터베이스가 사후에 고려 될 때 Liquibase가 훌륭하다고 믿습니다. 이 철학은 프로덕션에서 대부분의 불량 데이터베이스를 유발했으며 대부분은 불량입니다. 데이터베이스는 각각의 사일로에서 작업하는 애플리케이션 개발자가 구성하지 않고 전체 비즈니스 시스템을 전체적으로 볼 수 있도록 설계해야합니다. 후자의 방법은 해결 방법, 비정규 화 된 데이터, 테이블 간의 열악한 관계, 비즈니스 영역의 중복 및 전체적으로 지저분하고 유지 관리 비용이 많이 드는 시스템을 초래하여 클라이언트가 발생하는 문제로 인해 배포 직후 싫어할 것입니다. 데이터베이스가 비즈니스 관계를 정확하게 반영하도록 설계된 경우 수명은 5 배 길고, 불행히도 대부분의 단편적인 방식으로 설계된 데이터베이스보다 5 배 더 나은 목적을 달성 할 것입니다.

Liquibase는 그 자체로는 문제가되지 않지만 응용 프로그램 개발자가 데이터베이스를 설계 할 수 있도록합니다. 그게 문제 야.


19
사양 변경, 새로운 기능 추가, 버그 수정. "데이터베이스가 비즈니스 관계를 정확하게 반영하도록 설계"되었다고 가정하더라도 비즈니스 및 비즈니스 관계는 시간이 지남에 따라 변하기 때문에 시간이 지남에 따라 DB를 변경해야하는 것은 정상이며 예상됩니다. Liquibase는 이러한 변경 사항을 관리하는 데 도움이됩니다. 그게 다야.
Steven Byks

제 경험상 아주 소수의 DBA와 개발자 전체가 Liquibase를 사용합니다. @ bob-barry가 최종 결과의 대부분을 차지한다고 생각합니다. Liquibase와 같은 도구를 사용하는 DBA (또는 변경 내역에 대한 평범한 이전 git)는 유용하다는 것을 알게 될 것입니다.
PhillipHolmes

진화하는 DB 관행과 일반적으로 민첩성은 동료 검토를 장려하고 활성화합니다. 성능이 필요한 DB의 경우 DBA는 여전히 DB 변경을 위해 앱 팀과 협력합니다. Liquibase와 같은 도구를 사용하면 비정규 화 인수에 반대하여 더 쉽게 리팩토링 할 수 있습니다. 10 년 전, 저는 각각 고유 한 패치와 업그레이드주기가있는 20 개 이상의 클라이언트에 설치된 제품을 위해 일했습니다. 2 년 동안 악몽을 꾸고 그런 도구를 손으로 쓰려고 노력한 끝에 알게 되 자마자 리퀴베이스로 뛰어 들었습니다. 그리고 우리는 200M 레코드가있는 테이블을 가지고 있었는데, 그 당시에도 크지는 않았지만 DBA가 필요한 것이 었습니다.
user6317694

3
언젠가 천국에서 만나길 바랍니다. 물론 좋은 것 같습니다.
Bijan


0

내 팀의 DevOps 사람이기 때문에 모든 SQL 파일을 한곳에두고 싶습니다. 즉, SCM (소스 코드 관리)에서

또한 CI / CD 단계에서 DB Schema가 함께 생성되면 많은 시간과 자원을 절약 할 수 있습니다. 해당 클라이언트의 데이터베이스를 관리하는 다른 사람이 필요하지 않습니다.

Flyway, Liquibase, EF 등과 같은 ORM은이를 달성하는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.