티스토리 뷰

반응형

 

이번 글에서 작성해볼 내용은 Flyway로 DB Schema 와 Seed 를 관리하는 내용을 담아보려 합니다. 우리는 대개 개발환경을 구성하고 개발 검수가 완료된 소스를 운영서버 또는 스테이지 서버에 올려서 테스트를 진행하곤 합니다. 이 때, DB 작업이 개발 서버에서는 적용되어 정상적으로 검수가 되었으나, 실제로 운영 서버에서 적용이 되지 않아 에러가 발생하곤 하는 실수를 할 수 있습니다. 아무래도 사람이 작업하는 환경이다 보니 더더욱 그럴 수 있습니다. 

가장 먼저 Flyway 는 JPA를 사용하여 DB Schema 가 변경되는 이력 및 테이블 정보를 만드는 DDL 을 자동으로 생성해주는 DevTools입니다. 공식 홈페이지는 https://flywaydb.org/와 같고 실제로도 많은 기업들이 이 기술을 도입하여 이전에 사용하였던 모델로 데이터베이스를 롤백하거나 현재 소스 코드와 맞게 버전 컨트롤링을 하고 있습니다. 

 

설치방법

MacOS 기준 Homebrew 를 사용합니다. 

$ brew install flyway

다음으로 로컬의 환경 기준으로 config 파일을 하나 생성합니다. 

application.properties

# ./src/main/resources/db/migration/flyway.conf
# (여러 context 중 main context 에 해당하는 flyway config 파일)

flyway.url=jdbc:mysql://localhost:43306/
flyway.schemas=my_app_local
flyway.user=root
flyway.password=password
flyway.locations=filesystem:src/main/resources/db/migration/

현재 DB Schema 기준으로 migration 파일 생성

$ mysqldump -h <host> -u <user> --databases <space-separated databasese> --no-data > <output-file-name>

그리고 Flyway 의 규약을 기본적으로 알고 Version 을 분리하여야 합니다. https://flywaydb.org/documentation/migrations#naming

 

Redirecting…

 

flywaydb.org

네이밍 규칙에 따라 이런 형태로 파일을 저장합니다.

그리고 현재 작업 내용이 잘 작동하는지 확인해보기 위해 아래 명령어도 수행합니다.

$ flyway -configFiles=./src/main/resources/db/migration/flyway.conf migrate

그 결과가 현재 DB와 실제로 일치하는지 DataGrip 등의 툴로 접속하여 확인해봅니다.

 

Flyway 후 작업 방식

기존에는 직접 테이블을 생성하거나 수정하는 Alter 문을 수행하였지만 Flyway를 도입하고나선 migration 파일을 작성하여 관리하면 됩니다.

# migration file
$ touch ./src/main/resources/db/migration/V1.1.16_create_tasks.sql

# migration 파일 작성
CREATE TABLE TASKS (

)

# local DB migration
$ flyway -configFiles=./src/main/resources/db/migration/flyway.conf migrate

이 때 작성하는 migration 파일은 하나 파일 내에 작업하는 것이 좋습니다. MySQL 버전에 따라 다르지만 5.7 이하의 버전에서는 Atomic한 액션이 이루어지지 않기 때문에 중간에 Abort 날 가능성이 있어 실패 또는 중단이 되었을 때 대처하기가 어렵습니다. 

 

Local 환경의 Setup

# local DB clean
$ flyway -configFiles=./src/main/resources/db/migration/flyway.conf clean

# local DB migration
$ flyway -configFiles=./src/main/resources/db/migration/flyway.conf migrate

 

Script File Setting

# 현재 시간을 version 으로 하여 원하는 context 에 migration 파일 생성
$ db gen_migration main Add_view_count_to_post

# local DB clean
$ db clean main --env=local

# stage DB migration
$ db migration main --env=stage

# local DB clean + migration
$ db reset

참고: https://www.popit.kr/%EB%82%98%EB%A7%8C-%EB%AA%A8%EB%A5%B4%EA%B3%A0-%EC%9E%88%EB%8D%98-flyway-db-%EB%A7%88%EC%9D%B4%EA%B7%B8%EB%A0%88%EC%9D%B4%EC%85%98-tool/

반응형
댓글
공지사항