티스토리 뷰
🗳 ddl-auto 옵션
JPA의 구현체 중 하나인 Hibernate가 제공하는 기능 중에 하나로, 데이터베이스 스키마 관리를 제어하는 설정
application.yml이나 application.properties에서 관련 설정이 가능하다.
ddl-auto 속성
1. none
데이터베이스 스키마와 관련된 작업을 수행하지 않는다.
실제 운영 환경인 프로덕션 환경에서 주로 사용된다.
2. validate
애플리케이션 실행 시점에 엔티티와 테이블이 정상적으로 매핑되었는지 확인한다.
따로 스키마 변경을 없다.
3. update
애플리케이션 실행 시점에 엔티티와 테이블 상태를 확인하여(엔티티 매핑과 데이터베이스 스키마 비교) 필요한 경우 스키마를 업데이트한다.
기존 데이터는 유지되고, 새로운 엔티티나 변경된 엔티티 필드가 스키마에 반영된다.
기존에 존재하는 칼럼의 속성(타입, nullable 여부 등)은 코드가 변경되어도 반영하지 않는다. 새로운 칼럼이 추가되는 경우의 변경사항을 반영한다.
[⚡주의점]
기존 데이터는 유지되므로 프로덕션 환경에서 사용하면 문제가 없을 것 같다고 생각될 수 있다.
- 그러나 만약 엔티티에 새로운 필드가 추가된다고 해보자. 그리고 그 필드는 @Column(nullable=false)로 지정하여 NOT NULL이어야 한다.
- 애플리케이션을 다시 실행하면 기존 데이터베이스 스키마와 엔티티 매핑 비교 시 차이가 생겼기 때문에 다시 스키마에 데이터들을 insert 한다.
- 그러나 기존 데이터에는 새 필드에 대한 값이 없으므로 테이블에 해당 필드의 데이터를 insert할 수 없다.
4. create
애플리케이션 실행 시점에 기존 스키마들을 모두 삭제하고 다시 생성한다.
즉, 기존 데이터들이 모두 삭제되고 엔티티 매핑을 기반으로 새로운 스키마(테이블)들이 생성된다.
개발 초기에 빈 테이블들을 반복적으로 생성해야 할 때 적절하다.
프로덕션 환경에서는 절대 사용하지 않는다.
5. create-drop
애플리케이션 종료 시점에 기존 스키마들을 모두 삭제하고 다시 생성한다.(create와 차이)
테스트 환경에서 일시적인 스키마가 필요한 경우 유용하다.(매 테스트마다 깨끗한 데이터베이스 상태 유지 가능)
마찬가지로 프로덕션 환경에서는 적절하지 않다.
ddl-auto 속성 사용 권장 시점
- 개발 초기 단계 or 로컬 환경: create, update
- 테스트 서버 : update, validate
- 스테이징 / 프로덕션 환경 : validate, none
SpringBoot의 다중 Profile 사용 시 주의사항
만약 다중 profile을 사용해서 SpringBoot 프로젝트를 진행 중이라면 ddl-auto 속성은 반드시 validate나 none으로 설정하거나 각 profile 속성에 맞게 작성해야 한다.
profile에서 설정하지 않는 속성은 공통 속성에서 가져오기 때문이다.
만약 공통 ddl-auto 속성이 create인데 사용 중인 profile에 ddl-auto 속성을 작성하지 않으면 create 속성이 실행된다.
(만약 사용 중인 profile이 운영 서버였다면 큰일난다.)
참고자료
https://colabear754.tistory.com/136
[JPA] hibernate의 ddl-auto 속성의 종류와 주의해야할 점
목차 개요 JPA의 구현체 중 하나인 하이버네이트는 다양한 기능을 제공하는데 그 중 엔티티만 등록해놓으면 DDL(Data Definition Language)을 자동으로 작성하여 테이블을 생성하거나 수정해주는 ddl-auto
colabear754.tistory.com
내가 ddl-auto를 update로 했던 이유와 패착
JPA에는 ddl-auto라는 설정이 있다.해당 설정은 JPA를 이용해서 데이터베이스를 Initialize 할 수 있게 도와주는 설정이다.Spring 공식 문서에서는 ddl-auto를 아래와 같이 설명하고 있다.spring.jpa.hibernate.ddl
velog.io
'springboot' 카테고리의 다른 글
[JPA] ID 생성 전략 (1) | 2024.11.29 |
---|---|
[JPA] N + 1 문제 (2) | 2024.11.20 |
[SETTING] intellij에서 JAVA JDK 버전 바꾸기 (0) | 2023.11.30 |
[용어] profile (0) | 2023.10.28 |
[JPA] @NotNull vs nullable = false (0) | 2023.08.13 |
- Total
- Today
- Yesterday
- Java
- @Value
- id생성전략
- Thymeleaf
- StreamAPI
- 메인메소드
- N+1문제
- 유효성 검사
- 동등성
- Optional
- springboot
- NPE
- 자바
- @NoArgsConstructor
- 오블완
- null
- JPA
- 일급컬렉션
- Spring
- 생성자
- 이진탐색
- upperBound
- checkedException
- uncheckedException
- 티스토리챌린지
- lowerBound
- @Spring
- @ConfigurationProperties
- 백준
- ddl-auto
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |