Skip to content

[REFACTOR] DB-migration (Flyway 도입) #79

@zzmnxn

Description

@zzmnxn

리팩토링 대상

  • 코드 가독성 및 아키텍처 개선: DB 스키마 정의를 자바 코드(DataInitializer)에서 분리하여 표준 SQL 파일로 관리합니다.
  • 성능 최적화: 서버 기동 시마다 매번 실행되는 Repository 조회 및 삽입 로직을 제거하고 Flyway의 스키마 버전 체크 방식으로 대체합니다.
  • 중복 코드 제거: initTripThemes, initEmotions 등 반복적인 초기화 로직을 제거합니다.
  • 안정성 확보: 운영 환경(prod 프로필)에서 JPA가 스키마를 임의로 수정하는 것을 방지합니다.

리팩토링 목적

  • 현재 ddl-auto: update 설정과 DataInitializer 클래스를 통한 자바 코드 기반의 DB 초기화 방식은 운영 환경(Production)에서 데이터 유실 위험이 크고 변경 이력 관리가 불가능합니다. 앱스토어 출시 및 RDS 이전을 대비하여 SQL 기반의 마이그레이션 도구인 Flyway를 도입하고 DB 관리 프로세스를 표준화합니다.

TODO

  • 의존성 추가: build.gradle에 flyway-core 및 flyway-mysql 라이브러리 추가.
  • 설정 변경:
    application.yml의 ddl-auto를 validate로 변경.
    application-prod.yml에 Flyway 활성화 및 baseline-on-migrate: true 설정 추가.
  • V1 마이그레이션 스크립트 작성:
    현재 MySQL의 테이블 생성문(DDL)을 V1__init.sql로 추출.
    DataInitializer에 정의된 기초 데이터(테마, 감정, 날씨 등)를 INSERT 문으로 변환하여 포함.
  • 기존 초기화 로직 제거: zim.tave.memory.init.DataInitializer 클래스 삭제 또는 @component 제거.
  • 테스트: 로컬 환경에서 Flyway를 통한 DB 구축 및 데이터 정상 삽입 여부 검증.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions