안녕하세요 오늘은 ddl-auto
기능에 대해 알아보겠습니다.
데이터 정의어(Data Definition Language, DDL) 은 데이터베이스 테이블(스키마)의 생성, 변경, 삭제를 담당하는 명령어 입니다.
대표적으로 CREATE, ALTER, DROP, RENAME, TRUNCATE 가 있습니다.
DDL 말고도 DML, DCL 이 있습니다. 해당 개념에 대해서는 여기 를 참고해주세요 👨💻
이번 포스팅의 주제인 ddl-auto
는 데이터베이스의 테이블을 JPA 의 구현체가 자동으로 생성해주는 기능을 말합니다. 테이블 자동 생성 전략
이라고 불립니다.
데이터베이스에는 다양한 dialect
가 존재하는데 JPA 구현체는 application.yml
에 지정되어 있는 dialect
에 맞는 적정한 DDL을 생성합니다.
자 그렇다면 ddl-auto
에는 어떤 속성이 있는지 알아봅시다!
속성 | 기능 |
---|---|
create | 기존 테이블을 삭제 후 다시 생성한다. |
create-drop | create + 서버 종료시 테이블 삭제한다. |
update | 변경 부분만 반영한다. |
validate | 엔티티와 테이블이 정상 매핑 되었는지만 확인한다. |
none | 아무 기능도 하지 않는다. |
ddl-auto
는 이렇게 5가지 속성을 제공하며 해당 기능을 통해 개발자는 직접 DDL 을 생성할 필요 없이 데이터베이스를 관리할 수 있게 됩니다.
ddl-auto
은 application-properties(yml)
을 통해 사용할 수 있습니다.
spring:
h2:
console:
enabled: true
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:test
username: sa
password: 1111
jpa:
open-in-view: false
hibernate:
ddl-auto: create // spring.jpa.ddl-auto 를 통해 설정 가능
properties:
hibernate:
show_sql: true
format_sql: true
defer-datasource-initialization: true
해당 코드는 실제 프로젝트 진행시 사용했던 application.yml
파일입니다 👨💻
위에서 알아본바와 같이 ddl-auto
는 개발자의 수고를 덜어줄 수 있는 기능입니다.
하지만 각별한 주의를 기울여 사용해야합니다 ☢️
왜냐하면 해당 기능을 잘못된 경우에 사용시 중요한 데이터가 날아갈 수 있으며, 서버에 큰 에러가 발생할 수도 있기 때문입니다 😰
create
, create-drop
, update
절때 사용 금지create
, update
사용update
,validate
사용validate
, none
사용실제 운영 서버에서는 직접 쿼리를 날리는 것이 좋습니다 👍