Flyway 란 By starseat 2023-04-05 14:53:48 java/spring Post Tags # Flyway? ![image.png](/uploads/_temp/20230405/8500b68d00dde25bfc109ebd444b6959.png) 데이터베이스의 형상 관리 목적으로 하는 오픈소스 데이터베이스 마이그레이션 툴 # Flyway 는 왜 필요한가? - 소스 변경 이력과 마찬가지로 어플리케이션 버전에 호환되는 데이터베이스 버전 관리 필요 - 버전에 맞는 DB 스키마 및 컬럼, 필요시 데이터까지 관리 # 동작 방식 ![image.png](/uploads/_temp/20230405/97311ff819ed0de04231a80144f9bab9.png) - 특정 파일시스템 디렉토리에 데이터베이스 마이그레이션 스크립트가 저장하고 관리 - Flyway 는 마이그레이션 스크립트 디렉토리를 접근해서 마이그레이션을 수행할 전체 목록 정보 수집 - 데이터베이스가 비어있다면 모든 마이그레이션 스크립트를 수행해서 최신 버전으로 생성 - 데이터베이스가 버전 1 이라고 확인했다면 그 이후의 마이그레이션 스크립트 (버전 2, 버전 3 ..) 를 수행해서 최신 버전으로 생성 # 주요 기능 **flyway migrate** - 마이그레이션 스크립트를 대상 데이터베이스에 적용 **flyway clean** - 대상 데이터베이스에 설정된 스키마 내 모든 오브젝트 삭제 **flyway info** 마이그레이션 스크립트 디렉토리와 데이터베이스의 버전을 비교한 결과 조회 **flyway validate** - 마이그레이션 스크립트를 수행하기 전 스크립트 버전들과 데이터베이스 버전 간의 호환성 체크 **flyway repair** - 마이그레이션 수행 시 어떠한 이유로 오류가 발생했을 때 다시 마이그레이션을 수행할 수 있도록 **flyway_schema_history 테이블 조정** - 실패한 마이그레이션에 대한 정보 행 삭제 등 # 마이그레이션 스크립트 네이밍 - **Versioned migrations**: V{year}.{month}.{day}.{hour}.{minute}.{second}__{description}.sql - **Undo migrations**: U{year}.{month}.{day}.{hour}.{minute}.{second}__{description}.sql - Versioned migration 과 동일한 timestamp 붙여주어야 함 - **Repeatable migrations**: R__{description}.sql - **{description} 은 대문자 동사로 시작하고, 공란은 underscore (_) 로 연결** # 마이그레이션 스크립트 생성 시 주의사항 ![image.png](/uploads/_temp/20230405/f0d2bf00252dc15030a41b0d67925e2e.png) - 스크립트는 관리 대상이기에 `불변성`을 가져야 함 - 일반적으로 마이그레이션 스크립트는 아래 내용을 포함 - 데이터베이스 파라미터 설정 - 데이터베이스 공용 데이터 (e.g. 타임존, 국가 .. 등등) - 데이터베이스 DDL - 데이터베이스 DML (DDL 로 인해 일괄 데이터 작업이 필요한 경우, 기초 데이터 등) # 결론 **좋다! 쓰자!** # 출처 - [https://flywaydb.org/](https://flywaydb.org/) Previous Post [spring] iBatis 와 MyBatis 결과 차이 Next Post [spring] Spring Boot Flyway 적용