본 포스트는 아래와 같은 환경에서 작성하였습니다.
java 17 / springboot 3.1.0 / mariadb 11
0. flyway 적용 방법
저희 팀은 flyway를 사용해서 데이터베이스 형상관리를 하고 있습니다.
springboot에서는 아래와 같이 dependency를 추가하고 sql문을 작성해주면 쉽게 적용할 수 있습니다.
implementation 'org.flywaydb:flyway-core'
implementation 'org.flywaydb:flyway-mysql'
라이브러리 추가 후에는 resources/db/migration 위치에 sql 파일을 추가해주시면 됩니다. 파일 이름은 V${version} __ ${name}.sql로 지정하면 되고 version 순서대로 관리가 됩니다!
1. checksum 에러 발생
이렇게 적용한 뒤에 잘 사용중이었는데요..!
member 테이블을 만들어 사용하던 중 요구사항의 변경으로 인해 테이블의 컬럼을 추가해야하는 상황이 생겼습니다.
그때 데이터베이스와 연동이 안되는 이슈가 발생했습니다. 이런 에러가 발생했네요..
에러의 내용을 보면 Migration checksum mismatch for migration version 으로 checksum의 버전이 일치하지 않아서 생기는 문제입니다.
2. 에러 해결 방법
데이터베이스에 접속하면 자동으로 생성된 flyway_schema_history 테이블을 확인할 수 있는데요. checksum 컬럼을 통해 파일 내용을 해싱해서 저장해둡니다.
repair() 을 통해서 이 checksum 컬럼을 재설정해주면 문제를 해결할 수 있습니다.
@Configuration
public class FlywayConfig {
@Bean
public FlywayMigrationStrategy cleanMigrateStrategy() {
return flyway -> {
flyway.repair();
flyway.migrate();
};
}
}
'Etc' 카테고리의 다른 글
[NestJS] mysql 데이터베이스 연동하기 (0) | 2022.07.06 |
---|
댓글