ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flyway
    웹 개발 2022. 12. 15. 09:21
    반응형

    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 를 초기화하는 방법

    1. 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 를 이용한다.
    2. Initialize a Spring Batch Database
      • Spring Batch 를 사용하면 SQL 초기화 스크립트 및 페키지가 제공되는데 spring.batch.initialize-schema=always 를 이용할 수 있다.
    3. 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 으로 저장됨
    ex) {Prefix}{Version}__{Description}.sql

    출처 : https://flywaydb.org/documentation/concepts/migrations.html

     

    • 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
Designed by Tistory.