Flyway 버전 관리 목적실행환경Dependencybuild.gradle 의존성 추가여기서 발생한 문제해결전체 build.gradleaplication.yml개발 준비개발 준비 완료변경 발생migration script 작성네이밍(naming)결론 참고 영상
Flyway is an open-source database-migration tool
즉, 데이터베이스의 형성관리를 목적으로 하는 툴이다.
Flyway 버전 관리 목적
SCHEMA_VERSION 테이블을 통해 SQL 스크립트의 변화를 추적하면서 자동적으로 관리한다.
실행환경
- java 17
- gradle
Dependency
- spring web
- spring data jpa
- mysql connector
- flyway migration
build.gradle 의존성 추가
- flyway migration을 추가하지 않은 경우 밑을 gradle에 추가
여기서 발생한 문제
mysql을 사용하려 했고 flyway는 mysql 8.0버전을 지원하지 않는다의 에러가 발생하였다.
해결
gradle에 밑에 있는 것을 추가하면서 해결하였다.
전체 build.gradle
aplication.yml
개발 준비
- member에 대한 기본 엔티티를 생성한다.
- src.resources.db.migration 폴더에 V1__init.sql 파일을 작성하여 초기 db를 세팅한다.
- 애플리케이션을 실행하여 member를 저장해본다
개발 준비 완료
- member가 저장이 되었다면 member와 flyway_schema_history 테이블이 생성이 된다.

- select * from flyway_schema_history 을 통해 script 부분에 V1__init.sql이 떠있다.

- 그러면 flyway 세팅과 개발 준비가 완료된 것이다.
변경 발생
member 엔티티에 나이(age)를 추가하였다.
- 이렇게 바로 실행을 하게 되면 에러가 터지게 된다.

- WHY? 엔티티에 변경이 일어났지만 flyway에게 변경 사항을 알려주지 않았기 때문이다
- 해결
변경 사항을 알려주기 위한 migration script 파일을 작성해준다.
migration script 작성
이전 정보 모두를 알려주는 것이 아니라 변경 부분만 알려준다.
실행을 하면 정상 작동을 하게 되고 flyway DB에 다음과 같이 history가 남는다

네이밍(naming)
- v , u, R

- 예
- V1__init.sql
- V1_0_1__add_column.sql
- 등등
결론
일단 보류하는 걸로