SpringBoot3 JPA hibernate ddl-auto 종류와 뜻 none, validate, update, create, create-drop

springboot3 jpa hibernate ddl auto types and meanings
spring.jpa.hibernate.ddl-auto:
none, validate, update, create, create-drop

SpringBoot3에서 JPA를 사용할 때 ddl-duto 옵션을 사용할 수 있다.
이것은 SpringBoot3 프로젝트가 실행될 때 연동된 DB 스키마를 어떻게 처리할지에 대한 동작을 설정하는 옵션이다.
ddl-auto 옵션은 5가지 종류이며, `none, validate, update, create, create-drop`이 있다.
각각의 설정값에 따라 SpringBoot3 프로젝트가 실행될 때 JPA에 연동된 DB 스키마를 처리하게 된다.
주의할 점은 운영서버에 반영할 때이며, 옵션값을 `none` 또는 `valudate`로 설정하는 것을 추천한다.

ddl 뜻

옵션을 다루지 전에 `ddl`이 무엇인지 살펴보자.
`ddl`은 `Data Definition Language`의 앞글자를 딴 약어이다.
데이터의 구조와 형태를 정의하는 것을 의미한다.
흔히 DB의 테이블의 구조를 조작하는 명령어 정도로 생각하면 된다.
DB 테이블을 조작하는 명령어의 종류는 4가지이며,
각각 `CREATE, ALTER, DROP, TRUNCATE`가 있다.
이들의 기능을 간단히 살펴보면 다음과 같다.

  • CREATE TABLE
    • 테이블을 새롭게 만든다.
  • ALTER TABLE
    • 테이블을 구조를 변경한다.
  • DROP TABLE
    • 테이블을 완전히 삭제한다.
  • TRUNCATE TABLE
    • 테이블의 구조는 남기고, 데이터를 삭제하고 완전히 초기화한다.

spring.jpa.hibernate.ddl-auto 옵션 종류

SpringBoot3에서 JPA를 사용할 때 Entity를 사용하면 DB 테이블을 편하게 조작할 수 있다.
Entity는 DB 테이블과 1:1 매핑되어 백엔드(BackEnd)에서 CRUD를 할 수 있도록 도와준다.
Entity가 DB 테이블과 1:1 매핑된다는 점에서 `spring.jap.hibernate.ddl-auto`는 상당히 유용하다.
SpringBoot3 프로젝트가 실행될 때 DB 테이블을 자동으로 맞춰준다는 점에 있다.
Entity만 변경하면 DB 테이블 또한 변경할 수도 그대로 둘 수 있다.
상당히 편한 기능이다.
하지만, 주의할 점도 있는데 운영서버일 경우이다.
일단, `spring.jpa.hibernate.ddl-auto`옵션 5개와 동작은 다음과 같다.

  • none
    • 프로젝트 시작시
      DB 테이블 조작을 무시한다.
  • create
    • 프로젝트 시작시
      DB 테이블을 모두 삭제한 후
      Entity 기준으로 새롭게 DB 테이블을 만든다.
  • create-drop
    • 프로젝트 시작시
      DB 테이블을 모두 삭제한 후
      Entity 기준으로 새롭게 DB 테이블을 만들고,
      프로젝트 종료시 DB 테이블을 모두 삭제한다. 
  • update
    • 프로젝트 시작시
      DB 테이블을 Entity 클래스와 비교한 후
      차이가 있는 부분을 자동으로 변경한다.
      DB 테이블에 데이터가 있다면 삭제되지 않고, 유지된다.
  • validate
    • 프로젝트 시작시
      DB 테이블과 Entity 클래스와 비교한 후
      차이가 있다면, 예외를 발생시킨다.
      DB 테이블의 변경은 하지 않는다.

실제 동작 살펴보기

이제는 SpringBoot3 프로젝트를 생성한 후,
JPA를 이용해 `spring.jpa.hibernate.ddl-auto` 실제 동작을 살펴본다.
과정은 다음과 같다.
  1. SpringBoot3 프로젝트 생성하기
  2. JPA 라이브러리 설정하기
  3. build.gradle에 spring.jpa.hibernate.ddl-auto 옵션 설정하기
    1. none
    2. create
    3. create-drop
    4. update
    5. validate

SpringBoot3 프로젝트 생성하기

JPA 기능 중 ddl-auto 동작을 테스트하고, 확인해 보기 위해 
먼저 스프링부트3( SpringBoot3 ) 프로젝트를 생성한다.
여기서는 인텔리제이( IntelliJ )를 기준으로 하며, 설정은 다음과 같다.
프로젝트의 명칭과 경로는 자신이 원하는 것으로 변경해도 된다.

  • SpringBoot 프로젝트 정보
    • Name : 프로젝트 명칭
    • Location : 프로젝트 설치 경로
    • Language : Java
    • Type : Gradle - Groovy
    • Group : 그룹 명칭
    • Artifect : 식별 명칭
    • Package Name : 그룹 명칭 + 식별 명칭 ( 수정 가능 )
    • JDK : 버전 17
    • Java : 버전 17
    • Packaging : Jar
  • Dependency 의존성 외부 라이브러리
    • Lombok
      • Develper Tools > Lombok
    • Spring Web
      • Web > Spring Web
    • Thymeleaf
      • Template Engines > Thymeleaf

인텔리제이 새 프로젝트 설정

기본 의존성 ( Dependencies ) 추가하기

JPA 라이브러리 설정하기

ddl-auto 사용을 위해 SpringBoot3에 의존성을 추가해야 한다.
DB는 MySQL을 사용하도록 한다.

dependencies {
    .....

    /* JPA */
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    /* MySQL */
    runtimeOnly 'com.mysql:mysql-connector-j'
}

위의 의존성 추가 구문을 작성한 후,
Gradle을 새로고침하면
MySQL과 JPA를 사용할 준비는 끝난 것이다.

의존성 새로고침

application.properties에 DB접속정보 설정하기

의존성까지 추가했다면 MySQL에 연결하기 위한 설정을 하도록 한다.
MySQL 설정문자열은 `application.properties`에 작성한다.
구문은 다음과 같다.

spring.datasource.url=jdbc:mysql://localhost:3306/DB_스키마명?serverTimezone=UTC&characterEncoding=UTF-8
spring.datasource.username=DB_아이디
spring.datasource.password=DB_비밀번호
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

프로젝트를 실행하여
스프링부트 프로젝트가 실행되는 것을 확인한다.
정상적으로 실행된다면 `Tomcat started on port 8080` 메세지를 볼 수 있다.

Springboot3 프로젝트 실행

Entity 만들기

`ddl-auto`를 테스트하기 위해 EntityModel Class를 생성한다.
SpringBoot3에서 `Entity`는 DB 테이블과 1:1로 매핑되는 클래스를 의미한다.

package com.test.testspringboot3.ztest;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class EntityModel {

    @Id
    private Long id; /* 고유아이디 */

    private String title; /* 제목 */

    private String userId; /* 작성자 */

    private String createdAt; /* 생성일 */

    private String updatedAt; /* 수정일 */
}

spring.hibernate.ddl-auto 옵션 설정하고, 실행해 보기

ddl-auto 설정을 하기 위해
`application.properties`에
`spring.jpa.hibernate.ddl-auto`에 아래구문을 추가한다.
참고로 `#`은 주석을 의미한다.

spring.jpa.hibernate.ddl-auto=none
#spring.jpa.hibernate.ddl-auto=create
#spring.jpa.hibernate.ddl-auto=create-drop
#spring.jpa.hibernate.ddl-auto=update

테스트하기

이제부터 ddl-auto를 테스트할 수 있는 준비가 되었다.
SpringBoot3 프로젝트를 만들었고,
JPA 라이브러리를 추가했으며,
Entity 매핑을 위한 클래스를 만들고,
MySQL 연결까지 해 주었다.
`spring.jpa.hibernate.ddl-auto`옵션을 변경하며, 
SpringBoot3 프로젝트를 실행하면,
MySQL의 DB 테이블이 변경되는 것을 확인해 볼 수 있다.
하나씩 실행해 보도록 하자.

spring.jpa.hibernate.ddl-auto:none


spring.jpa.hibernate.ddl-auto:create


spring.jpa.hibernate.ddl-auto:create-drop


spring.jpa.hibernate.ddl-auto:update


댓글

이 블로그의 인기 게시물

MySQL 기본 테이블 생성하기 쿼리 만들기

레이싱 마스터 PC 버전 에뮬레이터 설치 방법

AI 종류