데이터베이스 초기화
이번 주제를 실습하기 위해선 이전 포스팅의 코드가 필요합니다.
필요하신 분들은 JPA 연동하기 를 참고해주시면 됩니다.
JPA를 사용한 데이터베이스 초기화
JPA를 사용한 프로젝트의 경우 해당되는 초기화 방법입니다.
작성해둔 Entity 정보를 바탕으로 스키마를 생성하고 생성된 스키마를 초기화 하는 방법에 대해 알아보겠습니다.
Application.properties 설정
spring.jpa.hibernate.ddl-auto
1 | 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
1 | spring.jpa.generate-ddl=true |
- DDL 변경을 허용하기 위한 프로퍼티입니다.
- 기본적으로 false로 되어있어 true로 설정 해줘야 동작합니다.
- 테스트 환경에선 필요하지 않은 옵션입니다.(주석처리)
spring.jpa.show-sql
1 | spring.jpa.show-sql=true |
- Application 실행시 hibernate 로그(스키마)를 보여줍니다.
- 기본적으로 false로 되어있어 true로 설정 해줘야 동작합니다.
SQL 스크립트를 사용한 데이터베이스 초기화
일반적인 데이터베이스를 사용할 때 사용하는 방법입니다.
- 테스트, Application이 구동될 때 마다 스크립트를 통해 데이터베이스를 초기화합니다.
- 스크립트를 만든상태에서는 ddl-auto, generate-ddl 옵션을 구동시켜도 스크립트로 먼저 스키마 초기화를 하므로 에러가 발생하지 않습니다.
- 스크립트 실행 순서는 schema.sql –> data.sql 입니다.
schema.sql
1 | drop table account if exists |
resource - schema.sql을 생성하여 실행시 스키마를 입력합니다.
- schema.sql 또는 schema-${platform}.sql로 생성합니다.
data.sql
resource - data.sql를 생성하여 스키마를 입력합니다.
- data.sql 또는 data-${platform}.sql