flyway로 DB도 형상 관리를 할 수 있다! flyway 실습해본 것을 간단하게 정리해봤다.
예전에 팀프로젝트를 할 때 내가 DB를 관리했었는데 형상 관리 관련해서 힘들었다. 특히 프로젝트 초반에 스키마를 자주 변경했다. 스키마를 변경할 때마다 따로 노션에 무엇을 변경했는지 적어 놓고 변경 sql들을 하나의 파일에 주석과 함께 모아놓고 팀원에게 공유했다. 그리고 팀원은 그것을 따라 치면서 각자의 로컬 DB의 스키마를 업데이트 했다.
이렇게 하면 서로 안맞게 되는 경우가 생겼고 특히나 DB를 관리하는 내가 아닌 다른 팀원이 DB 스키마를 변경했을 때 그것을 관리하는 것이 굉장히 힘들었다. 먼저 팀원이 변경했다고 팀에 알리고 나는 그것을 정리하고 다시 그걸 팀 전체에 공유해야됐기 때문이다.
flyway를 이용하면 이 문제를 해결할 수 있다. 일련의 sql들을 하나의 버전으로 취급해서 관리할 수 있다. 그래서 각각의 DB가 현재 어디까지 sql을 업데이트했는지 알 수 있고 버전 관리도 할 수 있다.
flyway를 이용해 DB를 관리하면 누구나 DB를 수정할 수 있게 되고 그러면서 혼자서 관리하던 책임을 나눌 수 있게 된다고 한다.
flyway가 설치 이후부터 단계 정리했다.
flyway.url=jdbc:sqlite:demo.sqlite3
flyway.locations=filesystem:scripts
flyway.user=user
flyway.password=password
locations에 적은 경로에 sql 스크립트를 작성하게 된다.
파일명: V1.1.1__create_group_table.sql
CREATE TABLE groups (
group_id INTEGER PRIMARY KEY,
name TEXT NOT NULL
);
파일명명규칙은 V버전명__내용
과 같이 지켜주어야한다.
scripts 폴더 밖으로 나와 다음과 같은 명령어로 실행한다
flyway -configFiles="flyway.conf" migrate
flyway -configFiles="flyway.conf" info
로 잘 진행되었는지 확인할 수 있다.
info를 하면 현재 스키마의 버전과 이력들을 살펴볼 수 있다.
2번에서 했던 방식대로 V1.1.2__insert_group_table.sql의 파일명을 만들고 안에 insert문을 넣고 3번을 해보면 insert문이 실행되고 버전도 1.1.2로 바뀌는 것을 flyway info
를 통해 알 수 있다.