Back End/Spring && Spring Boot

[Spring boot / JPA] 스프링 부트 데이터베이스 초기화

Im_Hayden 2024. 6. 26. 13:49

스프링부트에서 DB를 사용할 경우, 대개 Spring Daat JPA를 사용하여 DB와 상호작용한다.
JPA를 사용할 경우, 프로젝트를 시작할때, 프로젝트에 정의된 Entity에 따라서 자동으로 DB를 초기화해주는 상황을 한번쯤 본 적 있을것이다. 해당 초기화를 잘 사용하면 DB 테이블을 직접 생성하지 않고도 편리하게 테이블을 사용할 수 있다.

이와같은 초기화 방법에 대해 스프링 부트 공식 문서에서는 설명하고 있다.

본 글에서는 해당 내용에 대해 정리해보고자 한다.

DB 초기화

스프링부트에서는 DB를 초기화 하기 위한 두가지 방법을 제공한다.

  1. spring.jpa.generate-ddl (boolean) : DB 초기화 기능을 끄고 킬수 있다.
  2. spring.jpa.hibernate.ddl-auto (enum) : 위의 generate-ddl 보다 좀 더 구체적으로 설정할 수 있다.

spring.jpa.hibernate.ddl-auth

해당 방법으로 초기화 설정시, 아래 5가지 옵션을 줄 수 있다.

  1. none : DB 초기화를 설정하지 않는다, 기본값이다.
  2. validate : DB 테이블을 수정하지 않으면서, 프로젝트의 엔티티와 DB 테이블이 매핑되는지 검사한다. 만약 둘이 일치하지 않으면 예외가 발생한다.
  3. update : 프로젝트의 엔티티를 참고하여, DB의 테이블을 초기화한다. 만약 중복되는 기존의 테이블이 존재할경우, 테이블을 수정한다.
  4. create : 프로젝트의 엔티티를 참고하여, DB의 테이블을 초기화한다. 만약 중복되는 기존의 테이블이 존재할경우, 테이블을 삭제 후 다시 생성한다.
  5. create-drop : 위 create와 동일하게 테이블을 생성한다. 프로젝트 종료 후에는 테이블을 다시 삭제한다.

import.sql

만약 spring.jpa.hibernate.ddl-auth 설정에서 create 또는 create-drop 옵션이 주어진 경우 프로젝트 루트 경로에 있는 import.sql 파일이 실행된다.
해당 파일을 사용하여 DB 테이블 생성과 동시에 초기 데이터 삽입을 할 수 있다.
스프링부트에서 최상단 경로는 resource 폴더이므로, 해당 경로에 import.sql 파일 생성 후 데이터 삽입 쿼리를 작성하면, DB 초기값을 설정 할 수 있다.