-
반응형
ChatGPT 가 Hot 하길래 한번 이용해보기위해 Flyway 를 검색 해보았다..
더보기Flyway is a database migration tool that helps users automate the process of database schema changes. It allows users to define and manage database changes in a version control system, and then apply them to a database. This helps ensure that the database schema is up-to-date and consistent across different environments, such as development, staging, and production. Flyway supports a wide range of database systems, including MySQL, PostgreSQL, and SQL Server.
단순히 Flyway 가 무엇인지 검색을 하는 것은 구글 검색창에서 검색하는 것과 비슷하여 이런식으로 이용해보기보단..
다른 많은 활용도 있는 주제나 질문으로 이용할 수 있겠다 생각했다.. ㅎㅎ그래도 ChatGPT 로 검색해본 결과로는
Flyway 란 데이터베이스의 스키마 변경을 자동화하는데 도움이 되는 마이그레이션 도구라고 한다.
이를 통해 사용자는 버전 제어를 함과 동시에 변경 사항에 대해 정의하고 관리하며, 변경 사항을 적용한다.
이렇게 하면 development, staging, production 과 같은 다양한 환경에서 최신 상태의 일관성을 유지하는데 도움이 된다고 한다.* Database 를 초기화하는 방법
- Initialize a Database
- JPA, Hibernate
spring.jpa.generate-ddl, spring.jpa.hibernate.ddl-auto 를 이용해 생성할 수 있다. - DDL script
스프링 부트는 자동으로 스키마를 생성하고 이를 초기화할 수 있는데, Database 표준 root classpath 에 schema.sql, data.sql 을 위치 시킨다. 단, spring.jap.hibernate.ddl-auto 를 사용하지 않아야하며,
spring.datasource.initialization-mode 를 이용한다.
- JPA, Hibernate
- Initialize a Spring Batch Database
- Spring Batch 를 사용하면 SQL 초기화 스크립트 및 페키지가 제공되는데 spring.batch.initialize-schema=always 를 이용할 수 있다.
- Use a Higher-level Database Migration Tool
- Flyway, Liquibase 의 migration tool 을 이용한다.
* Flyway
- 오픈소스 데이터베이스 마이그레이션 도구
- DB Schema 를 코드로 관리
* Flyway 의 장점
- DB Schema 의 변경 이력이 남는다.
- DB Schema 또한 애플리케이션 코드처럼 이력이 관리가 되고, Schema 에 어떤 문제가 발견 되었다면, 이력을 통해 문제 해결을 할 수 있다.
- DB 변경 작업이 안전하다
- 직접 DB에 작업하는 대신 코드로 실행하기 때문에 빼먹거나 실수할 여지가 줄고, 배포시에 자동화도 가능하다.
- 사전 문제 파악이 가능하다.
- 코드로 관리되어 서로 리뷰를 받을 수 있고, 이를 통해 미리 문제를 파악할 수 있다.
- 실제 환경과 동일하게 local 환경을 구축하기가 쉬워져서 local 에서 개발하기가 수월하다.
* Flyway 와 JPA
- spring.jpa.hivernate.ddl-auto 의 설정으로는 validate 를 추천한다.
- DB 스크립트는 Flyway 에만 의존하여 마이그레이션 스크립트만으로 테이블이 관릳뢰어 엔티티 변경 후 validate 옵션으로 확인할 수 있다.
- hibernate 의 hibernate.hbm2ddl.auto 옵션 중 validate 의 검증 범위
- table, columns 의 존재 여부를 검증합니다.
- table structure 를 검증합니다.
- table structure 는 describe table 로 확인할 수 있으며, field, type, nullable, key, extra 등을 포함합니다.
* Flyway 적용
- build.gradle 추가
implementation 'org.flywaydb:flyway-core'
- Config 파일 작성
Java 로 Config 를 설정하였다.
@Configuration public class FlywayConfig { @Value("") private String username; @Value("") private String password; @Value("") private String url; @Bean public Flyway flyway() { Flyway flyway = Flyway.configure() .dataSource(url, username, password) .baselineOnMigrate(true) .load(); // 데이터베이스 마이그레이션을 시작합니다. // 보류 중인 모든 마이그레이션이 순서대로 적용됩니다. flyway.migrate(); return flyway; } }
- 스크립트 작성
스크립트 작성 규칙
- Prefix : V(Version), U(Undo), R(Repeatable)
- Version : 버전 정보(timestamp 를 많이 사용한다고 함)
- Seprator : __ ( underscore(_) 가 2개)
- Description : 설명, 이후 flyway_schema_history 테이블에 description 으로 저장됨
- V1__init.sql ( test 라는 테이블의 새로운 생성)
drop table if exists test; create table test ( id bigint not null auto_increment primary key, created_date_time datetime not null, last_modified_date_time datetime not null, testColumn int not null );
- 정상 작동
- flyway_schema_history 테이블이 생성되고 버전 별 데이터를 기록
- 스크립트 내용 실행(test테이블 생성)
* 참고
- flyway_schema_history 테이블이 없을 때 해당 테이블을 만드는 것을 V1 으로 기록하기때문에 미리 만들어둔 V1의 스크립트는 실행되지 않았다.
1. base_line_migrate 옵션의 true 이면 flyway_schema_history 테이블이 없을 때 생성하하는데 없으면 V1 의 행위로 flyway_schema_history 테이블을 만든다.
2. 미리 flyway_schema_history 테이블을 만들던지, baselin-verision 옵션으로 0으로 시작하게 하면된다.
반응형'웹 개발' 카테고리의 다른 글
Pageable 을 파헤치자. (39) 2024.04.29 자바 HashTable 과 HashMap (0) 2024.03.28 User-Agent 정보 가져오기 (0) 2024.03.20 정적 코드 분석 도구 Sonarqube 도입 제안 (2) 2024.02.24 @RequestBody, @ResponseBody ?? (2) 2024.01.27 - Initialize a Database