-
# spring boot flyway 적용하기개발메모 2024. 9. 5. 17:03
1. 작업 환경 (작업 환경에 따라 변할 수 있음)
- spring boot version : 3.1.4
- postgreSQL version : 15
- JDK version : 20.0.1
- kotlin version : 1.8.22
- gradle version : 8.5
- spring boot + kotlin + jpa 조합
2. 작업 내용
- dependency 추가
flyway spring 의존성 build.gradle에 추가
...... dependencies { ... (다른 의존성들...) implementation("org.flywaydb:flyway-core") } .....
- application properties에 flyway 설정 추가
(예시는 yml 파일)
spring: flyway: enabled: true baseline-on-migrate: true
baseline-on-migrate 옵션은 이미 사용 중인 database에 flyway를 추가할 경우 설정해주는 옵션으로, true로 할 경우 기존 테이블과 데이터에 영향을 주지 않는다.
- project root > src > main > resources 에 db/migration 디렉토리 생성.
해당 경로는 migration 버전 관리 용 sql문서를 저장하는 곳이다.
(예시)
* 주의 사항 : 위에서 경로가 db.migration 으로 표기되고 있는데, 이런 현상은 intellij에서 상위 디렉토리에 다른 파일이나 디렉토리가 존재하지 않고 하위 디렉토리 하나만 생성되었을 때 보이는 현상이다. 그러므로 경로생성을 할때 디렉토리 이름을 db.migration으로 만들지 말고, 반드시 db 디렉토리 생성 후 하위에 migration 디렉토리를 생성해야 나중에 실행시 문제가 없다.
- db/migration 디렉토리 하위에 sql 생성
sql 파일 생성시에는 특정 규칙을 따라야 한다. (아래 내용 참조)
(Undo의 경우는 유료버전을 사용할때 지원하므로, Version 만 참조)
V{version_number}__{description}.sql
버전 번호와 설명 사이의 _(언더바)는 2개를 이어서 적어줘야 한다. (그렇지 않으면 버전 관리 문서를 못찾음)
3. 결과
위와 같이 작업해서 spring boot를 실행하게 되면,
데이터베이스에 아래와 같은 테이블이 추가가 된다.해당 테이블에 마이그레이션 버전별 설명과 처리 결과 등이 저장이 되며, 이미 처리된 버전의 경우에는 별도로 실행하지 않게 된다.
JPA에도 ddl-auto등의 옵션을 제공하고 있으나, 해당 옵션은 자칫 잘못하면 테이블의 제약조건이나, 데이터가 유실되는 경우가 발생하여 크게 신뢰를 할수 없었다.
그런 의미에서 flyway는 의존성추가 및 SQL문을 직접 작성해야 한다는 것과 DB 종류에 따라 수정 해야 한다는 단점이 있으나,
버전과 작성 시점을 알 수 있다는 장점이 크고 특히 SQL문으로 직접 제어 할 수 있기 때문에 DB 제약 조건 설정 등에서 문제가 크게 발생하지 않는다는 장점도 있다.
위와 같은 기술들은 어떤 이득을 취할 수 있는지에 따라 작업자가 선택하게 되는 것이므로, 자신의 작업(또는 팀의 작업)에 얼마나 편의성과 안정성을 줄 수 있는지 판단하고 적용하는게 무엇보다 중요할 것이다.** 참조
https://www.baeldung.com/database-migrations-with-flyway
Database Migrations with Flyway | Baeldung
This article describes key concepts of Flyway and how we can use this framework to continuously remodel our application's database schema reliably and easily.
www.baeldung.com
https://leeeeeyeon-dev.tistory.com/12
Spring boot 프로젝트에 Flyway 도입하기 (feat. 기존 데이터가 있을 경우)
Flyway란? Flyway는 데이터베이스의 형상 관리를 목적으로 하는 오픈소스 마이그레이션 툴이다. Flyway를 통해 변경 사항을 추적하고, 업데이트나 롤백을 보다 쉽게 할 수 있다. 우리가 개발하며 필수
leeeeeyeon-dev.tistory.com
https://mindybughunter.com/spring-boot-flyway-적용기/
Spring Boot Flyway 적용기
서론 프로젝트 적용 속도가 빨랐을 당시에는, 데이터베이스에 대한 형상 관리에 대해서 생각해보지 않았었다. 변화하는 테이블이 그리 많지 않았었고 속성이 몇 개 정도 추가되는 거라 DBeaver이
mindybughunter.com
'개발메모' 카테고리의 다른 글
# nestjs 경험하기 (0) 2024.12.11 # 20241030 (0) 2024.10.30 #멋들어진 포트폴리오를 만들어 보자 (0) 2024.09.02 Gradle 설정하기 #1 (0) 2024.08.14 맥북 배터리(전원 X) 상태에서 클램쉘 모드 사용 하기 (0) 2024.08.13