테이블 매핑, 기본키 매핑, 일반 필드와 컬럼의 매핑까지 완료되었다. 이런 매핑의 설정을 통해 데이터베이스의 스키마를 자동생성을 할 수 있다.
데이터베이스 스키마 자동생성 기능은 JPA이전에 Hibernate에서부터 되었다.
이를 사용하기 위해 내 기준으로는, application.yml(Gradle)나 properties.xml(Maven)에 자동생성을 추가시켜주었다.
<property name="hibernate.hbm2ddl.auto" value="create" />
Maven
jpa:
hibernate:
ddl-auto: update #create update none
Gradle
'DDL(데이터 정의어)를 자동으로 사용할 것인가' 라는 뜻으로 직역된다.
사실 말의 의미는 이게 다 라는 생각이 들었다. 실제로 시사하는 바가 무엇이냐 하면, 지금까지 공부한 것을 기준으로는 그게 전부인 것 같다.
하지만, ddl-auto를 어떻게 설정할지가 새로웠다.
보통 나의 기준으로는 테이블을 드롭시키고 전부 새롭게 만들 때 create, 기존에 테스트 데이터들을 그대로 사용해서 테이블 속성에 약간의 변화만 있을 때에는 update를 썼다.
create | 테이블이 있으면 드랍하고 새롭게 만든다. |
create-drop | 테이블이 있으면 드랍하고 새롭게 만든다. 대신 애플리케이션 실행이 끝나면 테이블을 드랍시킨다. ( |
update | 변경이 있는 부분만 DB에 반영시켜준다. |
validate | 매핑이 잘 되었는지만 확인해준다. |
none | 사용하지 않는다. |
이걸 내가 미리 알았다면 기능 테스트중에 테이블들을 날려먹진 않았겠지
이렇게 ddl-auto를 통해 데이터베이스 스키마 자동생성 기능을 사용할 수 있다.
여기에 몇가지 주의사항이 있다면,
- 운영장비는 절대로 create, create-drop, update는 사용하지 않는다.
그냥 운영장비에서는 ddl-auto자체를 쓰지 않는게 좋은것 같다. - create-drop을 빼고, 개발 초기부터 테스트까지 create-update-validate순으로 넘어가다가 운영때 none을 쓰면 좋다는 이야기도 들은 것 같다.
정도를 경험과, 유튜브 강의들에서 본 것 같다. 내가 update나 validate로 안바꾸고 테스트하다가 날아가버린 데이터 미안해!!
'스프링 공부 > JPA' 카테고리의 다른 글
[JPA] 10. 연관관계 매핑의 방향성, 그리고 주인 (0) | 2022.11.02 |
---|---|
[JPA] 9. 객체지향에서 연관관계를 만들어야 하는 이유 (0) | 2022.11.02 |
[JPA] 7. 필드와 컬럼 매핑 (0) | 2022.10.20 |
[JPA] 6. 기본키 매핑 (0) | 2022.10.20 |
[JPA] 5. 테이블 자체의 어노테이션에 대하여 (0) | 2022.10.20 |