application.properties에서 spring.jpa.hibernate.ddl-auto=
의 속성 값을 update
, create-drop
, create
3개 중에 하나로 설정하면 자동으로 스키마가 생성된다.
update는 기존 데이터를 유지해 줄 수 있지만, create와 create-drop은 기존 데이터가 지워진다.
그리고 위에서 설정해준 옵션을 사용할지 말지를 정해주는 spring.jpa.generate-ddl=true
도 설정해준다.
이렇게 두 가지 설정을 해주면, @Entity 정보를 바탕으로 매핑이되는 스키마를 자동 생성해준다.
이전에 사용했던 Account 엔티티(참고: https://velog.io/@max9106/Spring-Boot-spring-data-JPA)를 그대로 사용하고 애플리케이션을 재실행 하면, Account 스키마가 생겼음을 볼 수 있다.
위의 설정은 개발시 하는 것이다. 실제 애플리케이션 운영시에는 spring.jpa.hibernate.ddl-auto=validate
spring.jpa.generate-ddl=false
로 해준다.
validate는 현재 Entity 매핑이 relation DB에 매핑 할 수 있는 상황인지를 검증하는 것이다.
validate일 때, entity에 어트리뷰트를 추가해주면 애플리케이션 실행시 에러가 난다. 매핑을 할 수 없기 때문이다.
update인 경우 추가된 어트리뷰트를 스키마에 반영해주지만, 기존 어트리뷰트의 이름을 바꿔주면 스키마에서 그 부분의 변경사항을 반영해주지는 못한다.
resources 밑에 schema.sql을 만들어 쿼리문을 적어주면 된다. 그럼 실행할 때 마다, 해당 쿼리문이 실행된다.
마찬가지 방법으로 data.sql을 만들어 초기 데이터를 스키마에 넣어줄 수도 있다.
실행 순서는 schema.sql -> data.sql 이다.
보통 개발 때는 jpa를 사용하여, update 방식으로 쓰다가, 배포 할 때 쯤, test 파일로 깔끔한 스키마를 얻어서, schema.sql에 쿼리문을 넣어서 사용한다. 이 때는 validate 방식을 사용한다고한다.