개밟자 블로그
liquibase 본문
1. liquibase란
데이터베이스 형상 관리 툴(DB Git)
각기 다른 데이터베이스를 이용해서 배포해야 할 때 장점을 가짐(언어 통일)
데이터 베이스를 선택하는 방식은, 자동 선택 or 태그를 통해 명시적으로 선택
Springboot에서는 run 버튼 하나로 실행 할 수 있다.
단, 최초 실행시 liquibase에 정의된 테이블이 미리 존재하면 안된다. already exists error가 뜨기 때문.
데이터 백업보다는, 전부 삭제하고 실행한 다음에 dummy data 넣는 것을 추천.
2. SpringBoot에서의 초기 세팅
properties에 위와 같이 추가해야 한다.
1번째 줄: master.xml파일의 경로
2번째 줄: liquibase 활성화 여부
liquibase 실행에 필요한 파일을 다음과 같이 생성 해주어야 한다.
위에서 작성한 properties 기준으로, db.changelog-master 파일을 default로 실행함 (ROOT)
<databaseChangeLog>안에 내용을 작성하고, <include> 이외에 작성된 내용은 기본 설정이라고 보면 된다.
<include file="">는 file 속성에 명시된 xml파일을 실행한다는 의미
차례대로 파일을 실행하기 때문에, master.xml에서 include를 작성한 만큼 전부 다 실행한다.
실행되면 테이블 자동생성
실행 흐름
Spring에서 liquibase 인스턴스 생성 및 실행 -> master.xml 실행 -> master.xml에서 include로 명시된 version(1.0).xml 등 실행
-> version.xml에서 changeSet 태그를 통한 DDL 구문 실행 후 스키마 생성/업데이트
최초 실행 시 생성되는 liquibase 관리 테이블이다.
DATABASECHANGELOG는 changeSet 단위로 변경사항을 저장한다.
DATABASECHANGELOGLOCK는 여러 liquibase 인스턴스가 하나의 데이터 베이스를 동시에 업데이트 하는 것을 방지한다. 즉, LOCK을 건다.
3. 작성 방법
changeSet 태그 안에 DDL 구문 작성하면 됨, id는 changeSet의 구분, author는 작성자를 의미
changeSet은 변경사항을 추적할 수 있는(log를 남길 수 있는) 단위이다.
changeSet은 하나의 트랜잭션에서 실행되며, 성공하면 커밋, 에러가 발생하면 롤백된다.
하나의 changeSet 안에 모든 DDL을 넣을 수 있지만, 테이블 단위로 분리하는 것이 버전관리에 좋다고 한다.
작성 규칙은 쿼리문과 비슷하고, liquibase의 DDL 구문은 보이는 대로 changeSet 안에 작성하면 됨
primary key, nullable같은 제약 조건의 설정은 column 태그의 자식 태그로 constraints을 작성하고 그 안에 넣어야 함
다만 primary key, foreign key 제약 조건의 추가는 createTable에 바깥에 선언(ALTER의 작성 방식과 비슷)
예시로, foreignkey 제약 조건은 위의 addForeignKeyConstaraint와 같이 작성 가능함. fk명 필수
4. 주의 사항
이미 실행된 changeSet에 대해 어떠한 수정도 허용하지 않는다.
특정 Table을 수정하고 싶다면 아이디(ex. changelog-table-1.0 -> changelog-table-1.1)를 다르게 명시해주어, 별도의 changeSet을 생성 후, ALTER식으로 추가로 작성 해주어야 한다.
'뇌피셜..' 카테고리의 다른 글
Docker DNS: ERR_NAME_NOT_RESOLVED (0) | 2023.11.26 |
---|---|
Expecting 8 byte values to construct a long이 뭔데 십덕아 (2) | 2023.08.01 |
처음이자 마지막 빵빵데이터 일기 (0) | 2023.06.23 |
[JAVA] 인터페이스 코딩 (0) | 2023.06.20 |
네이버 클라우드 활용해서 3tier 구축 (0) | 2023.04.10 |