스키마를 체계적으로 버전 관리하는 것이다. DB 스키마와, 데이터에 일어나는 변경을 sql파일로 관리하는 것이다.
Flyway와 Liquibase가 있는데 Flyway를 사용해보겠다.
의존성을 추가해준다.
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
그 후, resources 밑에 db/migration 디렉토리를 만든다.
이 안에 sql 들을 쌓아나가면 된다.
V는 꼭 대문자로 써줘야하고 '_' 를 두개 붙여줘야한다.
이렇게 한 후 실행하면, application context가 뜨다가, Flyway를 실행해서 V1__init.sql로 인해 스키마가 생성되고, 그 다음 hibernate가 validation을 진행한다.
flyway_schema_histroy는 flyway가 자기정보를 관리하는 테이블이다. 어떤 sql파일이 언제 생성되었고, 누가만들었고 등등의 정보가 담겨져있다.
이 상황에서 Account Entity에 새로운 column을 하나 추가해보겠다.
이 후 실행하면 매핑을 할 수 없기 때문에 validation에 의해 에러가 난다.
이 경우, V1__init.sql 파일을 수정하는 것이 아니라, 새 버전을 만든다.
한 번 적용 된 sql파일은 절대 수정하면 안된다 무조건 새 파일을 만들어서 적용해야한다.
이렇게 하면 flyway가 새로운 버전을 적용해준다.