Develop/database

flyway. DB 형상관리 및 다양한 기능을 제공! 재택근무 시 유용해요! 1탄

에디개발자 2020. 11. 21. 10:05
반응형

이번글에서는 flyway에 대해서 알아보겠습니다.

모든 소스는 github에 올려두었습니다.

 

 

나를 닮았다고 한다....

 

요즘 코로나로 인해 재택근무가 많아지는 상황입니다. 저도 재택근무를 한번 해봤는데 집에서 로컬 db 환경으로 작업해야하는 상황이 있었습니다. 물론 슬랙으로 동료분들과 db 변경사항을 공유했지만 누락되는 내용도 있었고 각자 로컬 db 스키마 정보가 달라서 작업하는데 어려움이 있었습니다. 이럴경우 아주 유용한 것이 flyway입니다.

 

flyway는 다양한 기능을 제공해줍니다. 하나씩 살펴보겠습니다.

 

flyway

간단하게 데이터베이스 형상관리 툴이라고 생각하시면 됩니다. 다양한 환경에서 적용이 가능합니다. 전 spring boot, mysql 환경에서 적용해보았습니다.

 

작동원리

형상관리는 table로 이루어지고 있습니다. ( table : flyway_schema_history )

table은 간단한 설정으로 직접 생성할 수도 있고 자동으로 만들어줄수도 있습니다.

-- auto-generated definition
create table flyway_schema_history
(
    installed_rank int                                 not null
        primary key,
    version        varchar(50)                         null,
    description    varchar(200)                        not null,
    type           varchar(20)                         not null,
    script         varchar(1000)                       not null,
    checksum       int                                 null,
    installed_by   varchar(100)                        not null,
    installed_on   timestamp default CURRENT_TIMESTAMP not null,
    execution_time int                                 not null,
    success        tinyint(1)                          not null
);

create index flyway_schema_history_s_idx
    on flyway_schema_history (success);

 

default 경로인 resources/db/migration 하단에 sql 파일을 생성하여 관리합니다.

sql 파일은 Version 별로 User가 직접 생성해야하고 application을 실행하거나 플러그인을 실행하면 flyway가 경로의 sql 파일을 버전별로 읽으며 자동으로 테이블을 업데이트 해줍니다.

다음글 실전편에서 application, plugin 두가지 모두 다루어보겠습니다.

 

기능

  • baseline 
    • 형상버전관리를 시작할 baseline을 설정합니다.
    • history 테이블을 생성하고 row 하나를 생성합니다. ( version : 1, decription : flyway baseline 이라고 생성합니다. )
    • 해당 라인이 생성되면 sql 파일은 v2 부터 생성해야 flyway가 정상 작동합니다!
  • clean
    • 지정된 스키마의 테이블을 모두 삭제합니다.
    • 이 명령을 실행할 경우가 있을까..? 모두의 승락이 있기 전까진 사용하지 않는 것을 추천드립니다!!
  • info
    • 데이터베이스에 적용 된 스키마 정보와 로컬에 변경 정보를 보여줍니다.
    • history 테이블의 정보를 읽어와 보여줍니다.
  • migrate
    • 스키마 정보를 데이터베이스에 마이그레이션합니다.
    • history 테이블을 읽으며 실제 사용하는 디비에 적용되지 않은 부분이 있다면 마이그레이션을 수행하여 sql 파일과 동기화를 합니다.
  • repair
    • 마이그레이션 실패한 내역을 수정합니다. ( 삭제 및 교체 )
  • undo
    • 마지막 버전의 Sql을 취소합니다.
  • validate
    • 데이터베이스에 적용 된 스키마 정보와 로컬의 변경된 정보를 비교합니다.

 

지켜야할 사항

경로

경로를 맞춰주세요. resources/db/migration 을 사용하자! 설정으로 경로를 변경도 가능합니다.

 

파일명

Prefix 명시 + __ ( underbar 2개입니다 ) + 설명 + .sql 로 작성해주시면 됩니다.

예시)

  • V1__init.sql, V2__create_user_table.sql

 

파일 삭제 금지!

경로 resources/db/migration 에 있는 sql 파일을 삭제하시면 안됩니다! 해당 파일로 버전관리를 하기 때문에 파일 변경 시 형상관리에 문제가 될 수 있습니다!

 

간단하게 flyway의 기능과 작동원리에 대해서 알아보았습니다. 

다음글에서는 실제 작성된 소스코드를 기반으로 정리하도록 하겠습니다.

 

 

 

 

 

 

반응형