chore: flyway 도입#130
Conversation
- gpa_score, language_test_score 테이블 추가 - 이름이 맞지 않는 FK 이름 수정 - 누락되었던 FK 추가 - application.is_delete 추가
There was a problem hiding this comment.
궁금한 부분들에 대해 코멘트 남겼습니다😊
추가적으로, 전체 스키마를 생성하는 V1__init.sql과 같은 파일이 없어도 괜찮은 이유가 조금 헷갈리는데요😓
제가 이해하고 있는게 맞는지 확인 부탁드립니다.!
- 지금의 db : 기존 것들이 이미 만들어져있는 상태이므로 필요하지 않음
- 나중에 마이그레이션을 또 한다고 하더라도 : 기존 것을 dump 할 것이므로, 이미 만들어져있는 상태. 따라서 필요하지 않음
그리고 flyway 로 DB 형상 관리를 하는만큼,
application-db.yml 의 ddl-auto 설정을 prod 와 dev 모두 validate 로 바꾸는게 좋겠습니다.
Entity와 데이터베이스의 설정이 일치하지 않으면 실행조차 되지 않도록요!
src/main/resources/db/migration/V2__add_gpa_score_and_language_test_score.sql
Show resolved
Hide resolved
src/main/resources/db/migration/V2__add_gpa_score_and_language_test_score.sql
Show resolved
Hide resolved
src/main/resources/db/migration/V2__add_gpa_score_and_language_test_score.sql
Show resolved
Hide resolved
src/main/resources/db/migration/V2__add_gpa_score_and_language_test_score.sql
Show resolved
Hide resolved
src/main/resources/db/migration/V2__add_gpa_score_and_language_test_score.sql
Outdated
Show resolved
Hide resolved
|
위백님 flyway 에 대해 이런 의견도 있더라고요.. 정리하자면, 저는 물론 저 의견도 일리가 있지만 개발용 서버/DB 를 둬서 거기에 테스트하면 여기에 대해 위백님의 의견도 듣고 싶습니다. |
|
저도 확실히 이해한 것은 아니지만, V1__init.sql가 필요하지 않은 이유에 대해서 말해보자면, 즉 이미 만들어져 있는 상태의 디비를 버전1로 하고, 여기서 쌓아올라가는 방식으로 진행하는 것이니 이해하신게 맞습니다! 추가적으로 초기 DB상태를 형성관리에 추가하기 위해 현재 디비 상태의 DML을 따서 V1파일로 생성해주는 것이 좋을 것 같습니다. |
위 글에서는 Flyway를 사용하지 않고 DDL을 수동으로 실행해야 할 이유로 데이터가 DDL 자체에 문제가 있을경우 데이터가 유실되거나 장애가 발생할 수 있다는 이유를 드는데, 수동으로 마이그레이션을 한다해도 DDL 자체에 문제가 있을 경우에는 동일한 문제가 발생한다고 생각합니다. 수동으로 마이그레이션을 진행한다고 이를 막을 수 있다고 생각이 되지는 않고, 이를 방지하기 위해서는 stage 서버등에서 미리 테스트를 해보는 것이 필요할 것 같습니다. 배포시 DB 마이그레이션 문제 발생시에도 영향을 최소화 하려면 backward compatibility를 유지하면서 스키마를 변경하거나, 무중단 배포를 진행할 때 오류가 발생하면 인스턴스 전환을 취소하는 안정장치를 추가하는게 좋을 것 같습니다.
말씀하신대로 마이그레이션시 운영 서버에 바로 수동으로 DDL/DML을 적용하는 것보다 개발용 DB에 먼저 테스트를 해보는 것이 오류를 줄이는데 더 도움이 될 것 같습니다. 또한 저희는 성능 문제로 인해서 마이그레이션을 조정해서 실행해야 할 일도 없을 것 같습니다. |
좋은 것 같습니다. 다만 배포 컨피그에는 마이그레이션 실패시(배포 실패시) 롤백하는 과정을 cd에 넣은 후에 적용하는 것이 좋을 것 같습니다. |
동의합니다!
동의합니다🙆🏻♀️ |
늦어서 죄송합니다. Flyway에서는 baseline 버전 이하의 버전은 "이미 적용 된 것"으로 간주하고 무시하는 것으로 알고 있습니다. 즉 현재 상황에서 prod에 baseline을 V1로 설정하고(기본값) V2파일을 적용시킨다면, 이후 V1파일이 추가되더라도 baseline 버전 이하의 버전이기에 무시됩니다. 즉 prod에서는 문제가 없습니다. 즉 V1.1을 굳이 추가할 필요 없이, V1__init.sql 파일을 추가하면 될 것 같습니다. V1__init.sql은 production 환경에서는 쓰이지 않고, 이후 dev 환경을 Flyway로 관리할 때를 대비한 파일인 것이죠. create if not exists로 생성하는 것은 아주 좋은 아이디어 인것 같습니다. 참고해서 화요일까지 ddl 올려놓겠습니다. |




관련 이슈
작업 내용
production 디비 변경사항을 관리하고, 마이그레이션을 용이하게 하기 위하여 flyway를 도입하고자 합니다.
flyway 라이브러리를 추가하고, 이번에 추가/수정되어야 할 사항들을
V2__add_gpa_score_and_language_test_score.sql로 추가해두었습니다.V2 마이그레이션 파일에는 #109 추가 기능을 위한 테이블/필드 뿐만 아니라 기존에 반영이 안되있었던 FK 도 포함되어 있습니다.
참고자료:
https://documentation.red-gate.com/fd/baseline-on-migrate-224919695.html
https://engineerinsight.tistory.com/206
특이 사항
22일 일요일 안으로 마이그레이션 테스트 후 결과 공유하겠습니다.
리뷰 요구사항 (선택)