오늘 하루에 집중하자
  • [JPA] 4. 데이터베이스 스키마 자동 생성
    2025년 02월 14일 19시 54분 26초에 업로드 된 글입니다.
    작성자: nickhealthy

    `hibernate.hbm2ddl.auto`는 JPA에서 Hibernate가 데이터베이스 스키마를 자동으로 생성하거나 업데이트하는 기능을 제어하는 설정이다. 설정 값에 따라 DDL(Data Definition Language)을 애플리케이션 실행 시점에 자동 생성할지 결정한다.

     

    설정 값 목록

    옵션 설명
    create 기존 테이블 삭제 후 다시 생성(DROP -> CREATE)
    create-drop CREATE와 같으나 종료 시점에 테이블 DROP(CRATE -> DROP)
    update 기존 테이블을 유지하며, 엔티티 클래스에 맞게 스키마를 자동으로 업데이트.(변경분만 반영)
    validate 기존 스키마와 엔티티 클래스가 일치하는지 검증.
    변경은 하지 않음.
    none 스키마 자동 생성/업데이트를 하지 않음.

     

    • 운영 환경에서는 절대 `create`, `create-drop`, `update` 옵션을 사용하면 안된다.
      • create, create-drop: 운영 데이터가 모두 날라간다.
      • update: 테이블 수정이 이뤄지면 테이블 전체에 락이 발생할 수 있다. 락 발생 시 서비스 장애로 이어진다.
    • 개발 초기 단계는 `create` 또는 `update` 사용
    • 스테이징과 운영 서버는 `validate` 또는 `none` 사용

     

     

    DDL 생성 기능

    아래와 같은 제약 조건을 엔티티에서 설정할 수 있는데 이것을 'DDL 생성 기능'이라고 한다.
    DDL 생성 기능은 DDL을 자동 생성할 때만 사용되고, JPA의 실행 로직(런타임)에는 영향을 주지 않는다.
     

    🔹 예제 코드

    DDL 생성 기능을 통해 `name` 컬럼의 제약 조건을 추가했다.

    package hellojpa;
    
    import jakarta.persistence.Column;
    import jakarta.persistence.Entity;
    import jakarta.persistence.Id;
    
    // JPA가 관리할 객체
    @Entity
    public class Member {
    
        @Id // 데이터베이스 PK와 매핑
        private Long id;
    	
        // DDL 생성 기능
        @Column(unique=true, length = 10)
        private String name;
       
    }

     

    🔹 결과

    테이블을 생성할 때 제약조건도 추가되는 것을 확인할 수 있다.
    하이버네이트 설정 값(`hibernate.hbm2ddl.auto`)이 `create`가 아닌 `update` 옵션도 마찬가지로 제약조건이 추가된다.

    결과

     

    댓글