-
Notifications
You must be signed in to change notification settings - Fork 20
[BE] DB flyway
xrabcde edited this page Aug 5, 2021
·
8 revisions
- Flyway는 오픈소스 마이그레이션 툴이다.
- 소스코드를 형상관리하는 Git과 같이 Flyway는 버전 관리 목적인 SCHEMA_VERSION 테이블을 통해 SQL 스크립트의 변화를 추적하면서 자동적으로 DB를 관리한다.
- 스프링 부트
build.gradle
에서 의존성을 추가한다.
dependencies {
implementation 'org.flywaydb:flyway-core:6.4.2'
}
-
application.properties
에 아래 설정을 추가한다.
# flyway
spring.flyway.baseline-on-migrate=true
spring.flyway.baseline-version=0
spring.flyway.useMysqlMetadata=true
-
spring.flyway.baseline-on-migrate
- 기본값 : false
- false로 하려면 flyway_schema_history 테이블이 생성되어 있어야 함
- true로 하면 flyway_schema_history 테이블이 없는 경우 생성함
-
spring.flyway.baseline-version
- 기본값 : 1
- 보통 버전파일이 V1__의 형태로 버전 1부터 시작하기 때문에 0으로 하는 것을 추천
-
resources/db/migration/prod
위치에 sql 파일을 생성한다. - 파일의 네이밍 규칙은 다음과 같다.
- 왼쪽부터 prefix, version, description, suffix 순
- prefix : default로 V는 버전 마이그레이션, R은 반복 마이그레이션 용 접두사 (반드시 V 혹은 R로 시작)
- version : version은 버전 마이그레이션에서만 사용되며 숫자나 언더바 조합으로 사용
- version과 description 사이의
__
(언더바 2개)는 반드시 있어야 함 (1개면 에러 발생) - description : schema_version 테이블에 저장시 설명으로 사용
- suffix : 확장자, 기본은
.sql
- 컬럼 추가
ALTER TABLE 테이블이름 ADD COLUMN 컬럼이름 varchar(20) NOT NULL;
- 컬럼 추가 (디폴트값 지정)
ALTER TABLE 테이블이름 ADD COLUMN 컬럼이름 varchar(20) NOT NULL DEFAULT 기본값;
- 컬럼 변경
ALTER TABLE 테이블이름 MODIFY COLUMN 컬럼이름 varchar(20) NOT NULL;
- 컬럼 이름 변경
ALTER TABLE 테이블이름 CHANGE COLUMN 기존컬럼이름 변경할컬럼이름 varchar(20) NOT NULL;
- 컬럼 삭제
ALTER TABLE 테이블이름 DROP COLUMN 컬럼이름;
한번 작성 후 빌드가 된 sql문은 수정 혹은 삭제를 하면 안 됩니다. 변경이 필요하다면 버전을 올린 sql문을 추가로 작성해주셔야 합니다.
- 다음과 같은 history 내역을 남기며 DB에는 V1__init.sql 내부 쿼리문들이 적용되지 않는 이슈가 있었음
mysql> select * from flyway_schema_history;
+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
| installed_rank | version | description | type | script | checksum | installed_by | installed_on | execution_time | success |
+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
| 1 | 1 | << Flyway Baseline >> | BASELINE | << Flyway Baseline >> | NULL | root | 2019-11-19 10:47:52 | 0 | 1 |
+----------------+---------+-----------------------+----------+-----------------------+----------+--------------+---------------------+----------------+---------+
-
application-prod.properties
파일에spring.flyway.baseline-version=0
설정이 누락되어 있었음 - 위 baseline version의 default 설정은
1
이기 때문에 flyway가 우리가 처음 작성한 V1 파일을 무시했던 것임
- 단순히 V2 파일을 추가로 만들어서 해결함
- reference를 참고했음