
Flyway
를 스프링부트 프로젝트에 적용해 사용하고 있다.
스프링부트에서 Flyway
를 사용할 때 알아두면 좋은 것들에 관해 정리하고자 한다.
초기 작업
build.gradle
implementation 'org.flywaydb:flyway-core'
초기 스프링 프로젝트 생성 시 flyway migration
을 선택하여 위와 같은 의존성이 등록된다.
그리고 나는 프로젝트에서 postgresql
을 사용하기 때문에 아래 의존성도 추가해주었다.
implementation 'org.flywaydb:flyway-database-postgresql'
db별 Flyway
구현체가 다름에 주의하자.
다음으로,
Flyway
마이그레이션 파일 위치도 설정해주어야 한다.
기본 경로는 resources/db/migration
이다.
만약, 경로를 바꾸고 싶다면 아래처럼 YAML
파일에서 변경하면 된다.
spring.flyway.locations=classpath:/db/temp/migration
플러그인

만약, Flyway
를 사용한다면 IntelliJ
의 Flyway Migration Createion
플러그인을 꼭 설치해주자.
위 플러그인 사용 시 파일명을 생성하거나 버전 관리를 함에 있어 도움을 얻을 수 있다.

플러그인을 설치한 다음 위와 같이 Flyway
파일을 생성하면 되고,

위와 같이 띄어쓰기로 구분만 해주면 알아서 언더바 설정을 해준다.
그리고 동시에 V20241130170103
와 같이 날짜와 시간으로 버전을 생성해준다.
예를 들어 파일 명을 위와 같이 create table temp
로 하고 생성하게 되면
V20241130170103__create_table_temp.sql
형식의 파일이 생성이 된다.
왜 버전을 시간으로 할까?
확실한 정보는 아니지만 만약, 그냥 단순하게 정수형으로 하게 되면
2명의 작업자가 동시에 같은 번호를 사용하는 경우 버전이 꼬이게 된다.
그런 상황을 초 단위의 시간 형식으로 완화할 수 있다고 생각한다.
하지만, 이런 경우가 또 존재한다.
예시상황)
만약, A가 오후 9시에 Flyway 파일을 생성해놓고 커밋을 하지않았고,
B가 오후 9시 5분에 Flyway가 파일을 생성하고 먼저 커밋을 한다면?
위의 상황을 해결을 위해 application.yml
의 out-of-order
설정이 존재한다.
flyway:
baseline-on-migrate: true
out-of-order: true
- out-of-order: true로 설정하면 migration작업을 버전의 순서에 상관없이 수행하도록 설정할 수 있다.
- 하지만, 이 경우 순서에 상관없이 migration작업이 진행되기에 순차적으로 버전 관리를 하는 의미가 퇴색될 수 있다.
- 따라서, out-of-order를 적용하지 않고 배포에 따라 timestamp를 조정하도록 팀 내에서 합의하는 방법도 있다고 한다.
- baseline-on-miograte: true로 설정하면 flyway_schema_history 테이블이 없을 시 자동으로 생성해준다.
실수 방지
- ddl-auto: validate
- 현재
Flyway
로 설정된 테이블과 코드 내의 Entity 간의 스키마 차이를 오류로 발생시킨다. - 따라서,
Flyway
를 사용할 때 발생할 실수를 방지할 수 있다.
- 현재
- 테이블을 만들 때 create table if not exists 사용
- 여러 사람이 작업하는 경우
create
를 중복 실행할 수 있다. - 이 경우 오류가 발생하기에
create table if not exists
를 사용하는 것이 좋다.
- 여러 사람이 작업하는 경우
'Infra' 카테고리의 다른 글
[Infra] 프록시의 2가지 사용 전략인 Forward Proxy와 Reverse Proxy (0) | 2024.03.16 |
---|---|
[Infra] 프록시의 개념 및 프록시의 4가지 장점 (0) | 2024.03.16 |
[Infra] 무중단 배포의 2가지 방법(Rolling Update, Blue-Green) (0) | 2024.03.16 |