본문 바로가기
Spring/JPA

스키마 자동생성 옵션

by YellowCow 2023. 2. 14.

JPA에서는 테이블을 자동생성해주는 기능이 존재한다

 

자동생성옵션은 아래와 같다

 

스키마 자동생성 옵션

  • create
    • 애플리케이션 시작 시에 기존 테이블을 Drop 한 뒤, 테이블을 생성
  • create-drop
    • 애플리케이션 시작 시에 테이블을 생성한 뒤, 애플리케이션 종료 시에 테이블을 Drop
  • update
    • 테이블에 변경사항이 있다면 Update(컬럼추가, 제약조건 추가 등)
    • 컬럼 삭제는 안 됨
  • validate
    • 테이블과 엔티티 매핑정보가 일치한 지 검증
    • 일치하지 않을 경우 에러 발생
  • none
    • 아무동작 하지 않음
    • none 자체는 아무의미 없음
    • "asdl;kfj;asdkljfl;adksjfkl;j"와 같은 문자열을 입력한 거랑 동일함

 

운영환경 별 권장옵션

운영환경 권장옵션
개발 create, update
테스트 update, validate
스테이징 validate, none
운영 validate, none

위와 같이 권장옵션을 적어놓았지만

왠만하면 validate나 none을 쓰는 게 안전하다

 

생각해보라,

아무리 조심해서 사용한다 해도

개발자의 실수로

운영DB에 있는 수 천만건의 데이터가 날라가면 얼마나 끔찍하겠는가?

 

스키마 자동생성 옵션 설정방법

스키마 자동생성 옵션을 설정하는 방법은 아래와 같다

 

1. persistence.xml 이용하는 방법

- hibernate.hbm2ddl.auto라고 된 부분의 Value를 변경하면 된다

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
    <persistence-unit name="hello">
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
            <property name="javax.persistence.jdbc.user" value="sa"/>
            <property name="javax.persistence.jdbc.password" value=""/>
            <property name="javax.persistence.jdbc.url" value="jdbc:h2:tcp://localhost/~/Documents/spring_trainning/inflearn/JPA/jpaprac"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
            
            <!-- 스키마 자동생성옵션 설정하는 부분 -->
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
    </persistence-unit>
</persistence>

 

2. application.yml 이용하는 방법

spring:
  jpa:
    database: mysql
    #스키마 자동생성옵션 설정하는 부분
    hibernate:
      ddl-auto: create

 

 

DDL 생성 시 테이블 속성 지정

아래와 같이 테이블 생성 시 속성을 지정할 수 있다

@Entity
@Getter @Setter
//테이블 이름 지정
@Table(name="MBR")
public class Member {
    @Id
    @GeneratedValue
    private Long id;
    
    //컬럼 이름과 제약조건 설정
    @Column(name="name", unique = true, length = 20)
    private String username;

    private Integer age;

}

댓글