소스코드는 svn, git 등 vcs(version control system)로 형상 관리한다.
데이터베이스의 변경 이력은 어떻게 관리해야 할까?
몇년전 flyway 와 같은 녀석(?)을 모를때에는
데이터베이스 무결성 검사 (현재 Application 에서 필요한 데이터베이스 스키마 정보와 일치하는지 확인)
를 위한 모듈을 직접 개발하여 Application 구동 시 또는 엔지니어가 버튼 클릭을 통해 확인하도록 기능을 제공했다.
물론 현재도 해당 모듈을 이용하면 쉽게(?) 그리고 디테일 하게 필요한 테이블 스키마를 맞춰줄 수 있다.
다만, 해당 모듈을 사용하려면 각 테이블에 대한 SQL 파일 뿐 아니라 index 에 대한 파일, 각 컬럼에 대한 명세 파일 등을 수동으로 하나하나 만들어야 하는 불편함이 크다.
해당 모듈을 개선할까..생각하다가 이런건 뭐 없나? 해서 검색 해 보니 ... 바로 나오네.....
왜 5년전에는 검색해 보지 않았을까.. ㅜㅜ
Flyway는 버전별 DB 스크립트 파일을 열거 해 두면 알아서 SQL 파일을 수행해 주고 DB 변경 이력에 대한 관리를 해 주는 녀석이다 .
Flyway는 V + 버전 + __ + 설명.sql 이라는 규칙으로 파일명을 작성해야 한다. ex) V1.0__INIT.sql
그럼 Flyway Plugin 이 flyway_schema_history 내부 스키마를 이용하여 파일 버전을 관리하게 된다.
Flyway로 관리될 SQL 파일은 반드시 src/main/resources/db/migration 위치에 저장되어야 한다.
그래야 Flyway Plugin 이 인식한다. 그리고 위에서 언급한 파일명 규칙을 따라야 한다.
현재 진행중인 프로젝트 (Spring Boot + JPA) 에 적용해 보자.
먼저 pom.xml 에 dependency를 추가하고
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
필요한 테이블 생성 스크립트를 약속된 위치에 생성한다.
그리고 Boot 를 run 하면 된다.
Spring Boot 는 CoC를 추구하기 때문에 기본적으로 flyway를 dependency에 추가하면
관례적으로 개발자들이 수행하는 작업 (flyway를 실행시켜주는 일) 을 알아서 해 준다.
물론 직접 @Configuration 을 통해 flyway initializing 을 직접 수행할 수도 있다.
spring.jpa.generate-ddl, spring.jpa.hibernate.ddl-auto, schema.sql 옵션을 통해서도
데이터베이스 테이블의 초기화 전략을 가져갈 수 있으나
초기화 뿐 아니라 형상관리를 위해서라면 flyway가 필요하다.
flyway 는 버전별로 지정한 SQL을 수행하면 히스토리를 관리하기 위한 flyway_schema_history 테이블을 생성한다.
이미 수행된 SQL 파일을 수정하면 어떻게 될까?
Boot startup 시 flyway 에서 checksum 이 맞지 않는다는 예외를 던진다.
이제 앞으로 스키마가 변경되는 일이 있을 경우 버전 명시와 이름 설정한 sql 파일만 넣어주면 된다.
편하다.
'IT' 카테고리의 다른 글
VirtualBox Error: VT-x is not available (0) | 2020.06.25 |
---|---|
UEFI boot mode 변경 시 file system not found (0) | 2020.06.22 |
Inverted Index (역색인) 원리 (0) | 2019.08.26 |
JWT (토큰 기반 인증 방식) 의 이해 (0) | 2019.08.23 |
ASCII / ANSI / UNICODE / UTF-8 쉽게 이해하기 (0) | 2018.09.10 |