[Spring] Spring Boot 시작 시 데이터베이스 초기화하기
ㅁ 들어가며
ㅇ Spring Boot를 시작하면서 데이터베이스 초기화하는 방법을 검토 중이다.
ㅇ 이번 글에서는 Spring Boot는 애플리케이션 실행 시 데이터베이스를 초기화하는 방법을 개론적으로 정리해 보았다.
ㅇ 구체적으로 적용이 필요한 시점에 구체적인 적용방법을 정리할 것이다.
ㅁ 관련 글
ㅇ [Spring] JUnit5 조건부 테스트 실행방법
ㄴ JPA의 ddl-auto 기능과 함께 사용하면 개발환경 별 자동 테스트 환경을 구축할 수 있다.
ㅁ JPA를 사용한 초기화
ㅇ JPA의 DDL생성 기능을 활용해 애플리케이션 시작 시 데이터베이스 스키마를 생성할 수 있다.
ㅇ 다음 두 가지 설정으로 제어한다.
// JPA의 DDL 생성 기능을 켜고 끈다.
spring.jpa.generate-ddl: true/false
// Hibernate의 스키마 생성 모드를 세부 제어한다.
spring.jpa.hibernate.ddl-auto: none/validate/update/create/create-drop
ㅇ 이 부분은 [JPA] Spring JPA의 ddl-auto 기능, 데이터베이스 스키마 자동 관리하기에 정리하였다.
ㅁ SQL 스크립트를 사용한 초기화
spring.sql.init.mode: always|embedded|never
ㅇ application.yaml에 설정한다.
ㅇ DatabaseInitializationMode
- always: 애플리케이션 시작 시 항상 SQL 초기화를 수행한다.
- embedded: 내장형 데이터베이스(예: H2, HSQL, Derby)에만 초기화를 수행한다.
- never: SQL 초기화를 수행하지 않는다.
ㅇ schema.sql과 data.sql 파일을 src/main/resouces에 위치시켜 초기화할 수 있다.
ㄴ schema-${platform}.sql과 data-${platform}.sql 형식으로 데이터베이스별 스크립트도 지원한다.
ㅁ 고급 데이터베이스 마이그레이션 도구 사용
ㅇ Flyway나 Liquibase 같은 고급 마이그레이션 도구를 사용할 수 있다.
Flyway란?
Flyway는 데이터베이스의 스키마나 데이터를 관리할 때, 버전 관리나 마이그레이션 등의 일을 자동화할 수 있는 데이터베이스 형상 관리 도구이다. Flyway를 사용하여 버전 관리와 마이그레이션을 자동화할 수 있고, 개발자의 실수를 예방할 수 있으며, 개발 협업 시, 데이터베이스의 일관된 상태를 유지할 수 있어 데이터베이스 관리가 편리해진다.
ㅇ org.flywaydb:flyway-core 의존성을 추가한다.
ㅇ `V<VERSION>__<NAME>.sql` 형식의 마이그레이션 스크립트 작성
ㅇ 기본 위치(`classpath:db/migration`)나 `spring.flyway.locations`로 지정한 위치에 스크립트 배치한다.
ㅇ Flyway는 애플리케이션 시작 시 자동으로 마이그레이션을 실행한다.
ㅇ 자세한 내용은 Spring Boot Flyway 적용기에서 확인할 수 있다.
ㅁ 결론
Spring Boot는 다양한 데이터베이스 초기화 방법을 제공한다. 프로젝트의 요구사항과 개발 환경에 맞는 방법을 선택하여 사용하면 된다. 단, 여러 초기화 기술을 혼용하는 것은 권장하지 않으며, 특히 프로덕션 환경에서는 Flyway나 Liquibase 같은 안정적인 마이그레이션 도구 사용을 고려해볼 만하다.
ㅁ 함께 보면 좋은 사이트
ㅇ Spring Boot - Database Initialization