JPA의 구현체 중 하나인 하이버네이트는 다양한 기능을 제공하는데 그 중 엔티티를 등록하면 DDL(Data Definition Language)을 자동으로 작성하여 테이블을 생성하거나 수정해주는 ddl-auto라는 설정이 있다.
사용법
- application.yml
jpa:
hibernate:
ddl-auto: # create, none, validate, update, create-drop
ddl-auto 속성
ddl-auto에 올 수 있는 속성은 다음과 같다.
1. create
2. create-drop
3. update
4. validate
5. none
create
create는 단어 그대로 엔티티로 등록된 클래스와 매핑되는 테이블을 자동으로 생성(create)해준다. 이 과정에서 기존에 해당 클래스와 매핑되는 테이블이 존재한다면 기존 테이블을 삭제(drop)하고 테이블을 생성한다.
create-drop
create-drop은 create와 비슷하게 엔티티로 등록된 클래스와 매핑되는 테이블이 존재한다면 기존 테이블을 삭제하고 자동으로 테이블을 생성해주는 것은 똑같지만, 애플리케이션이 종료될 때 테이블을 삭제한다는 차이가 있다.
update
update는 엔티티로 등록된 클래스와 매핑되는 테이블이 없으면 새로 생성하는 것은 create와 동일하지만 기존 테이블이 존재한다면 위의 두 경우와 달리 테이블의 컬럼을 변경하게 된다.
하지만
기존에 존재하는 컬럼의 속성(nullable, 크기, 데이터 타입 등)은 건드리지 않고, 새로운 컬럼이 추가되는 변경사항만 반영한다.
예를 들어, 어떠한 엔티티 클래스의 String 필드를 Int로 변경하더라도 해당 엔티티에 매핑되는 테이블의 해당 컬럼은 숫자타입으로 바뀌지 않고 문자열 타입으로 유지된다.
Validate
다른 속성들과는 다르게 DDL을 작성하여 테이블을 생성하거나 수정하지 않고, 엔티티 클래스와 테이블이 정상적으로 매핑되는지만 검사한다. 만약 테이블이 아예 존재하지 않거나, 테이블에 엔티티의 필드에 매핑되는 컬럼이 존재하지 않으면 예외를 발생시키면서 애플리케이션을 종료한다.
엔티티 클래스의 필드가 매핑되는 테이블에 모두 존재하기만 한다면, 테이블의 컬럼이 더 많더라도 아무 일도 일어나지 않는다.
none
none은 사실 속성이 존재하는 것이 아니라 위의 4가지 경우를 제외한 모든 경우에 해당한다
(다만 스프링부트의 경우에는 none이라고 명시하거나 아예 ddl-auto 속성을 명시하지 않아야 한다.)
이 경우에는 아무 일도 일어나지 않는다.
참고
[JPA] hibernate의 ddl-auto 속성의 종류와 주의해야할 점
목차 개요 JPA의 구현체 중 하나인 하이버네이트는 다양한 기능을 제공하는데 그 중 엔티티만 등록해놓으면 DDL(Data Definition Language)을 자동으로 작성하여 테이블을 생성하거나 수정해주는 ddl-auto
colabear754.tistory.com
'Back-end > Spring' 카테고리의 다른 글
[Spring] createdAt, updatedAt 사용하기 (0) | 2024.06.19 |
---|---|
[Spring] Spring Security + OAuth2 + JWT [카카오 소셜 로그인 구현] (1) | 2024.06.18 |
[Spring] WebClient를 사용한 외부 API 통신 (0) | 2024.06.16 |
[Spring] Swagger 사용 및 JWT과 https 적용해보기 (2) | 2024.06.05 |
[Spring] data.sql을 사용하여 서버 실행 시 데이터 삽입하기 (1) | 2024.05.28 |