스프링 공부/JPA

[JPA] 8. 데이터베이스 스키마 자동생성

장아장 2022. 10. 20. 20:26

테이블 매핑, 기본키 매핑, 일반 필드와 컬럼의 매핑까지 완료되었다. 이런 매핑의 설정을 통해 데이터베이스의 스키마를 자동생성을 할 수 있다. 

 

데이터베이스 스키마 자동생성 기능은 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를 통해 데이터베이스 스키마 자동생성 기능을 사용할 수 있다. 

 

여기에 몇가지 주의사항이 있다면, 

  1. 운영장비는 절대로 create, create-drop, update는 사용하지 않는다. 그냥 운영장비에서는 ddl-auto자체를 쓰지 않는게 좋은것 같다. 
  2. create-drop을 빼고, 개발 초기부터 테스트까지 create-update-validate순으로 넘어가다가 운영때 none을 쓰면 좋다는 이야기도 들은 것 같다. 

정도를 경험과, 유튜브 강의들에서 본 것 같다. 내가 update나 validate로 안바꾸고 테스트하다가 날아가버린 데이터 미안해!!