문제 상황
프로젝트를 진행하면서 DB를 변경하게 되면 DB 마이그레이션을 하게 될텐데, 그럴 경우 아래의 방법 둘 중 하나를 사용해야 한다.
DB 마이그레이션 (DB 변경사항 관리) 방법
- spring.jap.hibernate.ddl-auto = create // update create로 DB의 변경사항을 관리하는 경우, 데이터를 유지할 수 없다.
- 수동으로 schema 변경
- 휴먼 에러가 발생할 가능성이 높다.
제안
Flyway
DB 버전을 관리하기도 좋고, 개발 환경의 통일성을 제공해준다는 점이 있다.
또한 새로운 기술을 경험해본다는 점에서 도입할 가치가 있다.
장단점
제안된 기술 도입의 장단점
장점
- DB 버전을 관리하기 편하다.
- 아래의 예시처럼 버전 정보, 스크립트 파일 정보, 변경자, 변경 일자, 성공 여부를 담은 metadata table을 생성, 자동으로 관리함
- 개발 환경의 통일성을 제공한다.
단점
- 프로젝트 기간과 규모에 비해 오버 엔지니어링이 될 수 있다.
- 변경 기록 파일과 마이그레이션 스크립트 파일 변경하게 되면 에러가 발생해 주의가 필요하다.
대안
- 대안1: 수동 관리
- 데이터를 유지하지 못하거나 휴먼 에러가 발생할 가능성이 높음
- 대안2: Liquibase
- flyway 보다 복잡함
최종 채택 및 차후 과제
- 채택
- Flyway 관련 설정을 추가하고 운영 환경에서 사용
- 차후 과제
- 의존성 추가
- dependencies { // Flyway 를 적용하기 위한 라이브러리 implementation('org.flywaydb:flyway-core:6.4.2') // MySQL 데이터베이스를 위한 Flyway 확장 라이브러리 // implementation 'org.flywaydb:flyway-mysql' }
- application.properties (application.yml)에 설정 추가
- #data source 설정 / 본인 환경에 맞게 수정해주세요. spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:13306/flyway spring.datasource.username=ecsimsw spring.datasource.password=1234 #flyway 설정 spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true spring.flyway.enabled=true spring.jpa.generate-ddl=false #Spring boot 2 이상의 경우 아래 설정 추가 spring.flyway.baselineOnMigrate = true
- init 파일 추가 **(resources/db/migration/V1__init.sql) 위치 지켜주셔야 합니다. 제목의 언더바 __ 두개도 작성해야 됩니다. *** 이 파일을 기준으로 flyway가 DB 버전 관리를 하게 되므로, 지우면 절대 안됩니다.DB에 접속해서 SELECT * FROM flyway_schema_history 입력 후 확인하면 이렇게 보입니다. 이렇게 되면 Flyway 설정 완료된겁니다.
- # 이전 table를 지우고 drop table if exists sample_entity; # 초기 스케마를 정의 create table sample_entity( id bigint auto_increment, name varchar(255), primary key (id) );
- 스키마 구조 변경 사항 파일 추가 (resources/db/migration/V2__add_age.sql) 아래의 코드를 설명드리자면 sample_entity 테이블에 age라는 컬럼을 추가하겠다고 알려주는 것입니다!다시 history를 확인해보면 이렇게 될겁니다.
- ALTER TABLE sample_entity ADD COLUMN age integer default 0
- 환경은 gradle, spring boot, MySql 기준
영상과 블로그를 기반으로 작성했습니다. 이후 마이그레이션 스크립트 네이밍, 로케이션은 영상 참고해주시길 바랍니다! https://www.youtube.com/watch?v=pxDlj5jA9z4
출처
https://www.youtube.com/watch?v=pxDlj5jA9z4
https://www.blog.ecsimsw.com/entry/Flyway로-DB-Migration
[✅ flyway 도입 Flyway](https://www.notion.so/flyway-1e13550b7b55806d83fedb506eb38f2c?pvs=21) https://ywoosang.tistory.com/18
[SpringBoot] 데이터베이스 마이그레이션 툴 Flyway 도입기
들어가며프로젝트에서 데이터베이스 마이그레이션 툴로 Flyway 를 도입하면서 이를 정리한 글이다. 데이터베이스 마이그레이션데이터베이스 마이그레이션이란?데이터베이스 마이그레이션은
ywoosang.tistory.com
'kkokkio - 프로젝트 > ADR(의사결정문서)' 카테고리의 다른 글
Spring Batch (0) | 2025.06.11 |
---|---|
Airflow (0) | 2025.06.11 |
Swagger (0) | 2025.06.11 |
MySQL (0) | 2025.06.11 |
Spring Security + JWT (0) | 2025.06.11 |