[JPA] DB 스키마 자동 생성 (hbm2ddl.auto)

3Beom's 개발 블로그·2022년 10월 10일
0

SpringJPA

목록 보기
2/21

출처

본 글은 인프런의 김영한님 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편 을 수강하며 기록한 필기 내용을 정리한 글입니다.

-> 인프런
-> 자바 ORM 표준 JPA 프로그래밍 - 기본편 강의


1. hbm2ddl.auto

  • JPA에서 활용할 수 있는 property이다.

  • 해당 property를 사용하면, 프로젝트가 실행되는 시점에 JPA가 관리하고 있는 엔티티(클래스)들의 정보를 토대로 DDL을 생성하여 DB에 전송해준다.

  • 즉, 이걸 추가하고 JPA 내에서 DB 테이블과 연결할 클래스들 만들어놓고 실행하면, 프로젝트가 실행될 때 연결된 DB에 알아서 테이블 만들어 준다.

    DDL?? -> DDL vs DML vs DCL

    • DDL (Data Definition Language)
      -> 스키마, 테이블, 제약조건 등 DB를 정의하는 언어
      -> CREATE, ALTER, DROP, TRUNCATE
    • DML (Data Manipulation Language)
      -> DB에 저장된 데이터를 조회하고 넣고 빼고 수정하는 언어
      -> SELECT, INSERT, UPDATE, DELETE
    • DCL (Data Control Language)
      -> DB의 커밋, 롤백과 권한 관련 정보를 제어하는 언어
      -> COMMIT, ROLLBACK, GRANT, REVOKE
  • 보통은 DB에 테이블들 다 만들어 놓고 여기에 맞춰서 서버 개발을 시작하지만(DB 테이블 중심 개발),
    해당 기능을 활용하면 그럴 필요 없이 클래스 다 만들어 놓고 매핑만 잘 해두면 프로젝트 실행할 때 JPA가 알아서 DDL 만들고 보내서 DB에 테이블을 만들어 준다.(객체 중심 개발)
    -> DB 테이블을 객체마냥 쓸 수 있게 JPA가 열심히 도와주고 있다.

  • 또한, MySQL, Oracle, H2 등 여러 종류의 DB에도 해당 DB의 방언 property를 추가해주면 다 적용할 수 있다.

2. 적용하기

  • 프로젝트의 'META-INF/persistence.xml' 파일에 아래 property를 추가해준다.
<property name="hibernate.hbm2ddl.auto" value="create" />
  • 위 코드에서는 value값이 create로 설정되어 있는데, 사용 가능한 value와 그 역할은 아래와 같다.

< value 속성 >

  • 모든 value들의 설명은 프로젝트 실행 시점에 이루어진다.
  • create : 기존 테이블을 지우고 다시 만든다. (DROP -> CREATE)
  • create-drop : create와 같은데, 프로젝트가 종료될 때 테이블이 지워진다. (DROP -> CREATE -> DROP)
  • update : 기존 테이블을 지우지 않고, 수정된 내용만 반영한다. DB 테이블에 저장된 데이터들 지우지 않고 변경 내용 반영하고 싶을 때 쓰면 된다.
    (특정 Column을 빼는 경우는 반영 안된다. 데이터들 다 날아가면 안되기 때문)
  • validate : 엔티티 내용(JPA의 클래스 내용)과 DB 테이블이 정상적으로 매핑 되었는지 여부만 확인한다.
    (DB 테이블 내용과 JPA의 클래스 매핑 내용이 다르면 에러를 발생시킨다.)
  • none : 사용하지 않는다.

3. 주의할 점

  • 해당 기능은 무조건 개발 과정에서만 활용되어야 한다.
  • 운영 중인 서버에서는 절대 활용하면 안된다. (validate 정도는 괜찮을 수도..?)
  • 혼자 개발할 때는 create 혹은 update로 두고 쓰면 굉장히 편하다.
  • 팀단위 개발에서는 DROP 이 굉장히 위험하기 때문에 웬만하면 쓰지 않거나 팀원들과 논의해 볼 필요가 있다.
  • 사실 그냥 혼자 로컬에서 개발할 때만 쓰는게 제일 속편할 것 같다.
profile
경험과 기록으로 성장하기

0개의 댓글