일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- MFA
- preventdefault
- Spring REST Docs
- REACT
- vuejs
- gradle
- openapi3
- Flyway
- SpringRESTDocs
- vue
- Pender
- tasklet
- T-OTP
- cheerio
- Reduxpender
- stopPropogation
- SWAGGER
- Crawling
- MSA
- JavaScript
- SpringBoot
- AuthenticatoinProvide
- OpenStack
- Filter
- 리액트
- cloud native
- axios
- Spring Security
- Spring Batch
- UsernamePasswordAuthenticationFilter
- Today
- Total
Miracle Morning, LHWN
13. DDL-AUTO 와 Flyway 본문
DDL (Data Definition Language)
데이터 정의 언어이다.
컴퓨터 사용자 또는 응용 프로그램 소프트웨어가 컴퓨터의 데이터를 정의하는 컴퓨터 언어 또는 컴퓨터 언어 요소이다.
- CREATE : 새로운 데이터베이스 관계 (테이블), VIEW, 인덱스, 저장 프로시저를 만든다.
- DROP : 이미 존재하는 데이터베이스 관계 (테이블), VIEW, 인덱스, 저장 프로시저를 제거한다.
- ALTER : 이미 존재하는 데이터베이스 개체에 대한 변경, RENAME 의 역할을 한다.
- TRUNCATE : 관계 (테이블) 에서 데이터를 돌이킬 수 없는 제거이다.
ddl-auto
Spring Boot 는 ddl-auto 라는 이름으로 DDL 모드 (DB 초기화 전략) 를 정의한다.
JPA 데이터베이스는 Embedded Database (H2, HSQL, Derby) 를 사용할 때만 자동으로 생성 가능하다.
SpringBoot 속성 파일 내 아래와 같이 ddl-auto 타입을 선언하여 사용한다.
spring.jpa.hibernate.ddl-auto=create-drop
# DDL 모드 종류
- none : 사용하지 않는다.
- update : 변경된 스키마가 존재할 경우 적용한다.
- validate : 변경된 스키마가 존재하는지 확인한다.
- create : 시작할 때마다 스키마를 생성한다.
- create-drop : SessionFactory 가 시작될 때 drop 및 생성을 실행하고, SessionFactory 가 종료될 때 drop 을 실행한다.
{
"name": "spring.jpa.hibernate.ddl-auto",
"values": [
{
"value": "none",
"description": "Disable DDL handling"
},
{
"value": "validate",
"description": "Validate the schema, make no changes to the database"
},
{
"value": "update",
"description": "Update the schema if necessary"
},
{
"value": "create",
"description": "Create the schema and destroy previous data"
},
{
"value": "create-drop",
"description": "Create and then destroy the schema at the end of the session"
},
]
}
데이터베이스 마이그레이션 (DataBase Migration)
스키마 마이그레이션은 (데이터베이스 마이그레이션, 데이터베이스 변경 관리) 은 관계형 데이터베이스 스키마에 대한 증분,
가역적 변경 및 버전 제어를 의미한다.
스키마 마이그레이션은 해당 데이터베이스의 스키마를 최신 또는 이전 버전으로 업데이트하거나 되돌릴 필요가 있을 때마다 데이터베이스에서 수행된다.
# 마이그레이션 관리가 필요한 이유?
만일 하나의 프로젝트에서 DB 스키마가 변경된 이력을 확인할 수 없다면
- 여러 작업자 간 동일한 데이터베이스 환경을 구성하기 어렵다.
- DB 스키마에 문제가 발생했을 때 해결이 어렵다.
- Entity 객체의 변화에 DB 스키마가 바로 반영되기 때문에 실수로 인해 데이터 손실이 발생할 수 있다.
Flyway
SpringBoot 에서 데이터베이스 스키마의 변경이력을 관리하는 기능을 제공하는 라이브러리이며, 데이터베이스를 위한 버전 컨트롤 시스템이다.
# 스키마를 관리하기 위한 7가지 기능
- Migrate
- 스키마를 최신 버전으로 마이그레이션한다. (갱신한다.)
- 스키마 기록 테이블을 자동으로 생성해준다. (history 확인 용도)
- Flyway 워크 플로우의 핵심 기능이다.
- 파일 시스템 또는 클래스 경로를 스캔한 후 데이터베이스에 적용된 마이그레이션과 비교를 수행한다.
- 만일, 차이가 존재할 경우 데이터베이스 마이그레이션을 수행한다.
- Migrate 는 데이터베이스 ↔ 코드의 기대치(코드로 구현해놓은 스키마 파일) 사이의 비호환성을 피하기 위해 어플리케이션 시작 시 실행하는 것을 추천한다.
- Clean
- 구성된 스키마의 모든 개체를 삭제한다.
- 개발 및 테스트 시 큰 도움이 된다.
- 구성된 스키마를 완전히 삭제하여 효과적으로 새롭게 시작할 수 있다.
- 모든 개체 (테이블, 뷰, 프로시저 등) 가 삭제되므로 Production 에서 사용하면 안된다.
- Info
- 모든 마이그레이션에 대한 세부 정보 및 상태 정보를 출력한다.
- 마이그레이션의 현재 상태를 상세히 확인 가능하다.
- Validate
- 사용 가능한 마이그레이션에 대해 유효성 검사를 실행한다.
- 로컬에 사용된 마이그레이션이 데이터베이스에 적용된 마이그레이션과 일치하는지 확인한다.
- 우발적인 변경을 감지하여 스키마를 재생성하는 등의 오류를 방지하는데 유용하다.
- Undo
- 가장 최근에 적용된 버전 마이그레이션의 실행을 취소한다.
- Baseline
- 기존 데이터베이스의 기준을 설정한다.
- Baseline 은 특정 버전에서 기준선을 지정하여 기존 데이터베이스에 Flyway 를 도입하기 위한 것이다.
- 기준 버전을 포함한 모든 마이그레이션을 무시하여 최신 마이그레이션을 적용하게 된다.
- Repair
- 스키마 기록 테이블을 복구한다.
- 실패한 마이그레이션 항목을 제거한다. (DDL 트랜잭션을 지원하지 않는 데이터베이스에만 해당한다.)
- 적용된 마이그레이션의 체크섬, 설명 및 유형을 사용 가능한 마이그레이션 중 하나와 재정렬한다.
- 누락된 모든 마이그레이션을 삭제됨으로 표시한다.
Flyway 사용해보기
# SQL 방식
- Naming
- Prefix : V, U, R
- Version : 점 또는 _ 사용 가능하며, 숫자로 표기
- Separator : __ (two underscorec)
- Description : Underscores
- Suffix : .sql
2. Flyway 가 마이그레이션 파일들을 찾는 규칙
- locations 프로퍼티에 명시된 하나 이상의 디렉토리에서 sql 기반 마이그레이션을 검색
- 접두사가 없거나, classpath: 접두사가 있으면 Java classpath 를 타겟으로 한다.
- 접두사가 있으면 파일 시스템 (filesystem) 을 타겟으로 한다.
- naming 규칙을 준수하는 한 명시된 locations 를 기준으로 새로운 sql 마이그레이션을 Flyway 가 자동으로 선택한다.
# Java 방식
: Java 기반 마이그레이션은 SQL 을 사용하여 쉽게 표현할 수 없는 BLOB & CLOB 변경이나 고급 대량 데이터 변경 (재계산, 고급 형식 변경 등) 에 매우 적합하다.
※ BLOB : Binary Large Object. 이진 대형 객체로 이미지/동영상/MP3 등이 있다.
※ CLOB : Character Large Object. 문자 대형 객체로 Oracle Server 는 CLOB <> VARCHAR2 사이에 암시적 변환을 수행한다.
1. Naming
- JavaMigration 인터페이스를 반드시 구현해야 한다.
- 대개 BaseJavaMigration 구현체를 상속하여 Flyway 가 자동으로 Version 과 Description 을 추출할 수 있도록 한다.
- Prefix : V, U, R
- Version : _
- Separator : __ (two underscores)
- Description : Underscores
2. Flyway 가 마이그레이션 파일들을 찾는 규칙
- locations 프로퍼티에 명시된 하나 이상의 디렉토리에서 Java 기반 마이그레이션을 검색한다.
- 새로운 Java 마이그레이션은 런타임 시 클래스 경로 스캔을 통해 자동으로 검색된다.
- 스캔은 재귀적으로 동작하여 지정된 하위 패키지의 Java 마이그레이션도 선택된다.
출처 : https://fastcampus.co.kr/courses/204729/clips/
'IT 기술 > [JAVA] Spring Boot' 카테고리의 다른 글
14-2. Flyway 사용해보기 - Flyway API (Java) (0) | 2021.05.25 |
---|---|
14-1. Flyway 사용해보기 - Gradle Usage (0) | 2021.05.25 |
12. JPQL, Criteria, Query DSL (0) | 2021.05.17 |
11. JPA (Java Persistence API) (0) | 2021.05.17 |
10. JPA 를 사용한 페이징(Paging) 처리 (0) | 2021.05.11 |