Spring을 사용하는 프로젝트에서 DB 형상관리가 필요했다.
찾아보니 flyway와 liquibase가 주로 사용되는 DB 형상관리 툴인 것 같았다. 깊이 찾아보지는 않았지만 liquibase가 무료로 제공되는 기능도 많았고 사용하기도 편하다는 의견이 많았다.
하지만 내가 원하는 기능은 단순히 migration만 해주고 그 내용을 따로 추적할 수만 있으면 됐기 때문에 간단히 살펴본 결과 flyway를 사용하는 게 더 단순하고 간편해 보였다. 물론 더 깊게 사용하면 liquibase가 편할 수도 있지만 이건 나중에 더 필요하다고 생각이 되면 공부해볼 것이다.
flyway를 사용하는 방법은 두 가지를 찾아보았다. flyway는 일반적으로 사용되는 RDBMS인 Oracle, SQL Server, MySQL, MariaDB, PostgreSQL, H2 등을 지원한다. 나는 PostgreSQL을 사용하였다.
1. Maven 기반 Spring Project에서 Flyway 사용하기
우선 flyway를 프로젝트에 적용하기 전에 사용하고 있는 데이터베이스 드라이버가 지원되는 버전인지 확인해야 할 필요가 있다.
Flyway의 Documentation의 Supported Databases에 들어가 보면 지원하는 DB 드라이버 버전이 적혀있다. 버전을 확인했다면 pom.xml에 flyway 의존성을 추가해준다.
그다음은 spring bean만 등록하면 flyway의 사용 준비는 끝이 난다. 나는 테스트 프로젝트로 사용했기 때문에 root-context.xml에 모두 넣어주었다.
이렇게 작성하면 init-method로 migrate를 설정해주었기 때문에 프로젝트를 실행할 때 자동으로 migration을 시작한다.
따로 flywayConfig에 locations property를 설정해 주지 않았다면 프로젝트의 src > main > resources > db > migration에 sql 파일을 넣어 관리해주면 된다.
sql 파일명은 아래와 같은 규칙을 따른다.
- Prefix: 파일명은 대문자 V로 시작한다. (undo나 repeatable migration을 사용할 때는 U, R로 시작하면 되는데 자세한 내용은 flyway documentation을 읽어보면 된다.)
- Version: V 다음에는 숫자로 이루어진 버전을 적어준다. dot(.)이나 underscore(_)를 넣은 숫자로도 작성 가능하다. 버전은 순차적으로 작성되어야 하고 타임스탬프를 이용하는 것이 권장된다.
- Separator: Version과 Description 사이에 두 개의 underscore(_)를 넣어준다.
- Description: underscore(_)나 공백으로 구분된 설명을 작성한다. 이는 가능한 서술적으로 작성하는 것이 좋다.
나는 테스트를 하기 위해 BOOKSTORE라는 DB를 만들고 아래의 내용이 적힌 V1__init.sql 파일을 작성하였다.
이제 tomcat을 실행시키면 flyway가 migration 폴더에서 파일을 찾은 뒤 현재 연결된 DB의 이력과 비교하여 적용되지 않은 항목들을 migration 한다.
tomcat 실행 후 다시 DB를 보면 V1__init.sql에 적어 두었던 BOOKS 테이블이 생성되었고 flyway에서 변경 이력을 저장하는 테이블인 FLYWAY_SCHEMA_HISTORY 테이블이 생성되었다.
이후부터는 변경되는 사항을 SQL 스크립트로 작성하여 migration 폴더에 넣어주기만 하면 된다.
Spring 프로젝트에 flyway를 사용하면 SQL 스크립트만 작성하여 migration 폴더에 넣어주면 실행될 때 자동으로 DB도 업데이트되니 DB 수정을 하지 않아 발생하는 문제를 방지할 수 있다.
2. Command-line으로 Flyway migration 사용하기
1
2
|
wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/7.5.0/flyway-commandline-7.5.0-linux-x64.tar.gz | tar xvz && sudo ln -s `pwd`/flyway-7.5.0/flyway /usr/local/bin
# requires sudo permissions
|
cs |
우선 위의 명령어를 실행하여 flyway를 설치한다.
flyway 설치가 끝나면 flyway.conf에 연결할 DB를 설정해주면 된다. 기본 경로는 /root/flyway-{version}/conf이다.
conf 설정이 끝나면 locations의 경로에 위와 같은 방법으로 SQL 스크립트 파일을 작성하고
flyway migrate 명령어를 실행시켜주면 끝이 난다.
지금은 Flyway의 migreate 기능으로 충분해서 이 정도만 공부해 봤지만 다른 기능이 필요해지면 더 공부하면 좋을 것 같다. 그리고 Liquibase도 한 번 직접 써보면서 비교해보는 것도 좋을 것 같다.
물론 아직 크게 쓸 필요는 없지만...
'Etc > 2021' 카테고리의 다른 글
[Chrome 확장] Udemy(유데미) 한글 자막으로 보는 법 (feat. 크롬 확장) (17) | 2021.05.21 |
---|---|
[Eclipse] JavaScript semi-colon expected 에러 해결하기 (2) | 2021.05.14 |
[GitHub Pages] GitHub Pages 404 에러가 뜰 때 (10) | 2021.05.13 |
[Jekyll] Jekyll에서 emoji 사용하기 (0) | 2021.05.12 |
[정보] 무료 eBook(이북) 대여 서울전자도서관(구독형) (2) | 2021.01.27 |