DEV ℧ Developer Diary

[JPA] 데이터베이스 스키마 자동생성

해당 포스트는 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 듣고 정리한 글입니다.

데이터베이스 스키마 자동생성

  • DDL을 애플리케이션 실행 시점에 자동생성
  • 테이블 중심에서 객체 중심 으로 설계를 할 수 있음.
  • 데이터 베이스 방언(dialect)을 활용해서 JPA가 데이터베이스에 맞는 적절한 DDL 생성
  • 이렇게 생성된 DDL은 개발 장비에서만 사용 해야 한다. (실수로 운영에서 쓰다가는 테이블이 날라갈수 있다.)

데이터베이스 스키마 자동생성 - 속성

hibernate.hdm2ddl.auto

  • create : 기존 테이블 삭제 후 다시생성 (DROP + CREATE)

<property name="hibernate.hdm2ddl.auto" value="create"/>

기존 테이블을 삭제후 다시 생성한다.

drop table if exists Member CASCADE

create table Member (
   id bigint not null,
    name varchar(255),
    primary key (id)
)
  • create-drop : create와 같으나 종료시점에 테이블 DROP

<property name="hibernate.hdm2ddl.auto" value="create-drop"/>

drop table if exists Member CASCADE

create table Member (
   id bigint not null,
    name varchar(255),
    primary key (id)
)

select
    member0_.id as id1_0_0_,
    member0_.name as name2_0_0_
from
    Member member0_
where
    member0_.id=?

drop table if exists Member CASCADE
  • update : 변경분만 반영(운영 DB에는 사용하면 안됨)
  • validate : 엔티티와 테이블이 정상 매핑 되었는지만 확인
  • none : 사용하지 않음

주의 할점

  • 운영 장비에는 절대 create, create-drop, update 사용하면 안된다. 잘못하면 데이터가 날라간다..
  • 개발 초기단계에는 create 또는 update
  • 테스트 서버에는 update 또는 validate
  • 스테이징과 운영 서버에는 validate 또는 none

DDL 생성 기능

  • 제약 조건 추가 : 예시) 회원 이름은 필수, 10자 초과 X
    • @Column(nullable = false, length = 10)
  • 유니크 제약조건 추가
    • @Table(uniqueConstraints = (@UniqueConstraint(name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"})))
  • DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고 JPA가 실행 되는 동안의 로직에는 영향을 주지 않는다.