간략히 알아보는 FlyWay 적용법
FlyWay?
- DB Migration Tool
도입하게된 이유는?
- 진행 중인 프로젝트에서
spring.jpa.hibernate.ddl-auto
속성을update
을 이용했었는데 운영서버와 개발서버 간의 문제가 간간히 발생했고,create
속성으로 두기에도 데이터가 계속해서 날라가는 단점이 있었다.validate
으로 두고 진행하니, 운영서버와 개발서버를 나누고 있는 상황에서 한 쪽에만 DDL, DML을 적용되는 실수가 발생할 수 있기에 이를 쉽게 관리하기 위해 사용했다. 또한, 버전 기록이 남아있어 변경 내역을 확인할 수가 있다는 장점이 있다.
적용법
build.gradle 의존성 추가
dependencies { implementation 'org.flywaydb:flyway-core:6.4.2' }
application.yml / properties에 설정값 추가
spring: flyway: baseline-on-migrate: true baseline-version: 0
baseline-on-migrate
default 값은 false 이다. true일 경우
flyway_schema_history
테이블이 없는 경우 생성해준다.
false는 해당 테이블이 기존에 생성되 있어야 한다.baseline-version
default 값은 1이다. 밑에서 언급할 version의 시작 기준 값을 나타낸다.
sql 파일 작성
V1__init.sql
에는 테이블 생성 쿼리가,V2... .sql
에는 컬럼 이름 변경에 대한 쿼리가 적혀져 있는 상황이다.resources/db/migration/prod 디렉터리 내부에 sql 파일을 작성한다.
파일 이름 형식은V{버전 숫자}__{name}.sql
이다. 언더바는 반드시 2개가 들어가야한다.
위의 설정에서baseline-version
을 0으로 두어야 V1 부터 읽는다.DB 내의
flyway_schema_history
에 적힌 버전을 보고 반영될 버전 오름차순으로 차례대로 적용해준다.
DB 별로 스크립트가 다를 수 있으니 syntax error에 유의해야 한다.spring.jpa.hibernate.ddl-auto
는 validate
으로 두자.
'Infra' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 개념 간략 정리 (2) | 2022.01.22 |
---|---|
쿼리 튜닝 미션 적용기 (0) | 2021.10.13 |
[Jenkins] 간략히보는 SonarQube와 Jenkins 연동하기 (0) | 2021.08.06 |
[DB] Mysql Order By 쿼리 ONLY_FULL_GROUP_BY 문제 해결 (0) | 2021.08.06 |
[Nginx] 하나의 Nginx로 여러 upstream 처리하기 (2) | 2021.08.04 |