본문 바로가기

DataBase

[ flyway ] flyway 개념 및 실습

반응형

| 개념

데이터베이스 마이그레이션 툴이다. 이는 소스코드를 형상관리하는 Git, SVN 등과 같은 맥락이다.
간단하게 말하자면 데이터베이스 스키마의 버전을 관리하기 위한 방법이라고 할 수 있다.
sql 파일을 생성하여, 특정 명령어를 통해 관리한다.

 

| 설치

리눅스 환경에서 다룰 것이기 때문에 아래의 링크에서 tar 파일을 다운로드 해서 압축을 풀어준다.

 

 

Flyway by Redgate • Database Migrations Made Easy.

Migrate directly from within your application Flyway flyway = Flyway.configure().dataSource(url, user, password).load(); flyway.migrate(); Get Started with the Java API

flywaydb.org

 

| 기본 설정

설치가 끝나면 해당 버전이 대한 flyway 디렉터리가 생성될 것이다.
flyway-6.5.5 디렉터리 상세는 다음과 같다. 

 

 

 

 

먼저 conf 디렉터리의 flyway.conf 설정파일을 연다.

 

$ vi conf/flyway.conf

 

 

 

 

그리고 위와 같이 DB 접속 정보를 설정해준다. 또한 한글이 깨지는 것을 방지하기 위해 
인코딩을 추가해주고, placeholderReplacement 옵션도 추가해준다.

접속하려는 IP 및 포트, 데이트베이스와 계정 및 패스워드를 설정해준다.

 

| 파일 추가

실행하려는 쿼리문에 대한 파일을 생성해서 sql 디렉터리 안에 넣어주어야 한다.
파일명은 다음과 같이 설정해야 한다.

 

V(대문자)버전__(언더바 2개)파일설명.sql

V(대문자)버전.날짜.숫자__(언더바 2개)파일설명.sql

 

(후자가 파일을 구분하고 관리하기 용이하다.)

 

예를 들면 다음과 같다.

 

V2.20200909.1__insert_ddl.sql
V2.20200912.1__insert_user_info_default_data.sql
V2.20200912.2__insert_user_group_default_data.sql

 

* 주의사항 *
처음에 메모장으로 저장해서 실행했을 때, 에러가 발생했다.
checksum 에러였는데 그걸 해결하기 위해서는 notepad++에서 
Windows(CR LF) => Unix (LF) 로 변경해서 저장하니까 해결됐다.

 

| 실행명령

Migrate : database 마이그레이션. 
Info : 모든 마이그레이션 상세정보를 출력한다. 
Validate : database에 적용된 마이그레이션 정보의 유효성을 검증한다
Baseline : flyway로 관리하기 이전에 database가 존재 시 해당 database를 flyway baseline 으로 설정할 수 있다.
Repair : 메타 데이터 테이블 문제를 해결하기 위해 사용하는데 두가지 용법이 존재한다. 
- 실패한 마이그레이션 항목 제거( DDL 트랜잭션을 지원하지 않는 database에만 해당) 
- 적용된 마이그레이션의 체크섬을 사용 가능한 마이그레이션의 체크섬으로 재정렬. 
Clean : database의 schema_version테이블 포함한 모든 objects(tables, views, procedures, ...)를 drop시킨다.  ( production(운영환경) 에선 절대 실행 금지 ) 

 

| 실행방법

주로 사용하는 것은 4가지 명령어이다. 아래와 같다.

 

$ ./flyway cmd.baseline

 

flyway_schema_history' 라는 테이블이 연결 DB에 생성된다.
이 테이블은 migrate한 sql 파일에 대한 정보를 담고있다. 
그래서 새로운 파일이 추가됐을 때 기존의 파일과 비교하여 상태를 나타내게 된다.

 

$ ./flyway info

 

 

 

마이그레이션 관련 파일들을 보여준다. 만약 인코딩이 맞지 않으면 여기서 에러가 발생할 것이다.
State는 반드시 Pending 상태가 되어 있어야 migrate 할 준비가 되어있는 것이다.

 

$ ./flyway migrate 


준비가 끝났으면 마이그레이션을 실행한다. 버전 및 날짜와 순서를 통해 차례대로 파일이 실행된다.
실행 중에 에러가 생기면 마이그레이션은 멈추게 된다.
에러를 확인하고 수정을 했으면 아래와 같이 실행한다.

 

$ ./flyway repair

 

 

먼저 info 로 확인해보면 성공한 파일은 Success, 에러가 난 파일 상태가 Failed 로 뜰 것이다.

 

이를 다시 Pending 상태로 만들어주기 위해서 이 작업을 하는 것이다.
위의 명령어를 실행하고 다시 info 로 확인해보면 Pending상태로 바뀌어 있는 것을 알 수 있다.

모두 Success가 뜨게 되면 정상적으로 마이그레이션 작업이 됐음을 알 수 있다.

 

 

 

 

 

반응형