우선 Flyway 가 무엇인지, 왜 도입하려 했는지 간단하게 설명드리겠습니다.
해결 방법을 보기 원하시면 스크롤을 쭉쭉 내려주시면 됩니다!
Flyway 란?
Flyway는 데이터베이스 스키마에 대한 버전 제어를 가능하게 하는 오픈 소스 데이터베이스 마이그레이션 도구입니다. 데이터베이스 스키마는 시간이 지남에 따라 변경사항을 관리하고 데이터베이스 스키마에 적용하여 개발, 테스트 및 프로덕션과 같은 다양한 환경에서 스키마가 동기화되도록 합니다.
Flyway 의 장점
Flyway를 사용하면 다음과 같은 주요 이점이 있습니다!
1. 버전 제어: Flyway를 사용하면 데이터베이스 스키마의 버전을 변경하고 시간 경과에 따른 변경사항을 추적할 수 있습니다. 이렇게 하면 이전 버전으로 되돌리거나 스키마가 변경된 내용을 쉽게 이해할 수 있습니다.
2. 반복 가능한 마이그레이션: Flyway는 동일한 마이그레이션 스크립트가 서로 다른 환경에서 일관되게 적용되도록 보장합니다. 이렇게 하면 불일치를 방지하고 오류 위험을 줄일 수 있습니다.
3. 자동화된 배포: Flyway를 빌드 및 배포 프로세스와 통합하여 데이터베이스 변경사항의 배포를 자동화할 수 있습니다.
4. 호환성: Flyway는 MySQL, Postgre와 같은 널리 사용되는 데이터베이스를 포함하여 광범위한 데이터베이스 관리 시스템을 지원합니다.
간단히 말해서 Flyway는 데이터베이스 스키마의 변경사항을 관리하는 체계적인 방법을 제공하여 시간이 지남에 따라 데이터베이스를 더 쉽게 유지관리하고 발전시킬 수 있습니다.
위와같은 장점 때문에 변경된 내역을 쉽게 파악, 협업에 유리, 유지보수에 좋다고 생각을 하여 도입을 하게 되었습니다.
BeanCreationException 발생!?
flyway 를 적용시키고자 자연스럽게 구글에 검색하여 블로그 글을 보며 적용을 시키고 있었습니다.
블로그에 설명 된 대로 이렇게 의존성을 추가하고
resources 셋팅 그리고 yml 파일 작성까지하고 실행을 시켜봤습니다. 그런데..
BeanCreationException 이 발생을 하게 되었습니다.
왜일까 생각을 하다 우선 해당 에러로 검색을 해봤지만 주로 스키마 변경에 대한 에러라고 나옵니다.
변경없이 새로 만들었는데 왜 이런 에러가 나왔을까 다시 꼼꼼히 에러코드를 살펴보니..
Unsupported Database 즉, Mysql 8.0 에는 지원이 되지 않는다고 에러가 나옵니다.
하지만 공식문서에 분명 지원한다고 적혀있었는데..!
이제 또 뭐가 잘못됐을까 찾아보다 버전이 업데이트 되면서 달라진 부분이 있다고 들었습니다.
새로운 종속성이 필요하다고 설명되면서 MySQL 문서를 안내해 줍니다.
https://flywaydb.org/documentation/database/mysql#java-usage
간단하게 정리하면 Flyway 8.2.1에서 MySQL과 MariaDB 데이터베이스 지원은 모두 별도의 집중적인 설정을 해야 합니다.
그래서 gradle에 의존성 부분을 'org.flywaydb:flyway-core'가 아니라 'org.flywaydb:flyway-mysql'로 설정해야 합니다.
의존성을 바꾸니 Flyway가 정상적으로 작동을 합니다! 앞으로는 블로그 글을 믿기보다는 공식문서 위주로 꼼꼼하게 체크해야 겠다는 생각이 들었습니다. 아무래도 블로그는 예전에 써져있을 경우도 있고, 업데이트를 즉각 반영하지 않으니 이런 문제가 생겨버린 것 같습니다.
이렇게 또 직접 문제를 해결하니 앞으로도 다른 문제가 생겨도 잘 해결할 수 있을 것 같은 자신감이 듭니다.
이 글을 읽으시는 분들도 저와 같은 경험이 있으시다면 공식문서도 같이 보며 크로스체크를 하면 좋을 것 같습니다.
감사합니다!
[출처]
'프로젝트 정리' 카테고리의 다른 글
MyBatis 를 사용한 1:N 관계 조회하기 (0) | 2022.10.19 |
---|