데이터베이스 초기화
이번 주제를 실습하기 위해선 이전 포스팅의 코드가 필요합니다.
필요하신 분들은 JPA 연동하기 를 참고해주시면 됩니다.
JPA를 사용한 데이터베이스 초기화
JPA를 사용한 프로젝트의 경우 해당되는 초기화 방법입니다.
작성해둔 Entity 정보를 바탕으로 스키마를 생성하고 생성된 스키마를 초기화 하는 방법에 대해 알아보겠습니다.
Application.properties 설정
spring.jpa.hibernate.ddl-auto
spring.jpa.hibernate.ddl-auto=
위 옵션을 통해서 스키마를 운영할 수 있습니다.
- update: 기존의 스키마는 놔두고 추가된 사항만 변경합니다.
- create-drop: 처음에 스키마를 만들고 Application 종료시 스키마를 drop합니다.
- create: 처음에 스키마를 삭제하고 스키마를 새로 만듭니다.
- validate: 현재 Entity 매핑이 릴레이션 DB에 맵핑할 수 있는 상황인지 맵핑이 되는지를 검증합니다.(운영환경에서 사용)
- 테스트 환경에선 필요하지 않은 옵션입니다.(주석처리)
만약 Entity 클래스에 새로운 컬럼을 추가하고 update를 하면 어떻게 될까요?
Email이라는 컬럼을 추가하였습니다.
update를 주고 실행하였더니 기존 컬럼은 그대로 있고 컬럼이 추가된 것을 볼 수 있습니다.
그렇다면 Email이란 컬럼을 추가하지 않고 validate를 했다면 어떻게 됐을까요?
Entity에만 존재하고 운영 DB에는 아직 생성되어있지 않으니 email이란 컬럼을 찾지 못했다고 하게 됩니다.
spring.jpa.generate-ddl
spring.jpa.generate-ddl=true
- DDL 변경을 허용하기 위한 프로퍼티입니다.
- 기본적으로 false로 되어있어 true로 설정 해줘야 동작합니다.
- 테스트 환경에선 필요하지 않은 옵션입니다.(주석처리)
spring.jpa.show-sql
spring.jpa.show-sql=true
- Application 실행시 hibernate 로그(스키마)를 보여줍니다.
- 기본적으로 false로 되어있어 true로 설정 해줘야 동작합니다.
SQL 스크립트를 사용한 데이터베이스 초기화
일반적인 데이터베이스를 사용할 때 사용하는 방법입니다.
- 테스트, Application이 구동될 때 마다 스크립트를 통해 데이터베이스를 초기화합니다.
- 스크립트를 만든상태에서는 ddl-auto, generate-ddl 옵션을 구동시켜도 스크립트로 먼저 스키마 초기화를 하므로 에러가 발생하지 않습니다.
- 스크립트 실행 순서는 schema.sql --> data.sql 입니다.
schema.sql
drop table account if exists
drop sequence if exists hibernate_sequence
create sequence hibernate_sequence start with 1 increment by 1
create table account (id bigint not null, email varchar(255), password varchar(255), username varchar(255), primary key (id))