2022. 12. 22. 13:34ㆍJAVA/Spring
1. 데이터베이스 마이그레이션이란 무엇인가
데이터베이스 마이그레이션이란 데이터베이스 스키마의 버전을 관리하기 위한 하나의 방법(데이터 전환)입니다.
개발 시스템에는 데이터베이스 스키마가 변경되었지만, 운영시스템의 데이터베이스 스키마가 변경되지 않았을 경우 마이그레이션을 수행합니다. 작게는 프로젝트 상 테이블 생성 및 변경 작업부터, 하나의 애플리케이션 또는 시스템을 옮기는 것까지 마이그레이션입니다. 요구사항에 따라 애플리케이션과 스키마가 바뀌었지만 개발 과정에는 적용됬지만 운영환경에는 적용되지 않아 데이터베이스 전환 시 애를 먹는 경우가 있습니다. 데이터베이스 마이그레이션은 이러한 문제를 해결합니다.
데이터베이스 마이그레이션은 개별 SQL 파일을 MySQL 콘솔 등에서 직접 실행하지 않고 프레임워크의 특정 명령어를 통해 실행하고 이 결과를 별도의 테이블에 버전 관리를 하는 기법입니다.
2. 스프링부트 프로젝트에 MySQL 데이터베이스 마이그레이션 적용
2.1 의존성 추가
dependencies {
implementation 'org.flywaydb:flyway-core'
implementation 'org.flywaydb:flyway-mysql'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
}
2.2 resource/db.migration 디렉토리 생성
2.3 마이그레이션 파일 생성
파일 이름은 "V1__init.sql"이라고 만듭니다.
마이그레이션 파일 이름 규칙은 다음과 같습니다.
- V숫자__이름.sql
- V는 반드시 대문자로.
- 숫자는 순차적으로(타임스탬프 권장)
- 숫자와 이름 사이에 언더바 두개
- 이름은 가능한 서술적으로
2.4 프로젝트 데이터 소스 설정 및 jpa 설정
resource/application.properties
spring.datasource.hikari.maximum-pool-size=4
spring.datasource.url=jdbc:mysql://localhost:3306/springboot
spring.datasource.username=yonghwan
spring.datasource.password=pass
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.generate-ddl=false
데이터소스 url 및 username 속성들은 다를 수 있습니다.
2.5 데이터베이스에 저장할 테이블 클래스 정의
@Entity
@Getter
@Setter
@EqualsAndHashCode(of = {"id"})
public class Account {
@Id @GeneratedValue
private Long id;
private String username;
private String password;
private boolean active;
}
2.5 V1__init.sql 파일에 sql 입력
drop table if exists account;
drop table if exists hibernate_sequence;
create table account (
id bigint not null,
password varchar(255),
username varchar(255),
primary key (id)
) engine=InnoDB;
create table hibernate_sequence (
next_val bigint
) engine=InnoDB;
2.6 V2__add_active.sql 파일에 sql 입력
ALTER TABLE account ADD COLUMN active BOOLEAN;
2.7 도커를 이용하여 mysql container를 실행시킵니다.
$ - docker run -p 3306:3306 —name mysql_boot -e MYSQL_ROOT_PASSWORD=1
-e MYSQL_DATABASE=springboot -e MYSQL_USER=yonghwan -e MYSQL_PASSWORD=pass -d mysql
2.8 애플리케이션을 실행하여 데이터베이스 마이그레이션 sql 파일이 실행되는지 확인합니다.
2.9 flyway_schema_history 테이블을 보면 데이터베이스 마이그레이션 히스토리 내역을 확인할 수 있습니다.
References
soruce code : https://github.com/yonghwankim-dev/springboot_practice/tree/main/db_migration_demo
[인프런] 스프링 부트 개념과 활용
https://life-with-coding.tistory.com/68
'JAVA > Spring' 카테고리의 다른 글
Logback 라이브러리 설정 (0) | 2023.04.24 |
---|---|
SLF4J 개념 및 동작과정 (0) | 2023.04.23 |
[SpringBoot] 스프링부트, mysql 데이터베이스 연결 (0) | 2022.12.22 |
[SpringBoot][WebMVC] CORS(Cross-Origin Resource Sharing) 적용 (0) | 2022.12.15 |
[SpringBoot][WebMVC] Hateoas (0) | 2022.12.13 |