
이번에 JPA를 사용하면서 SQL 스크립트로 데이터베이스를 초기화하는 방법을 정리했습니다.
schema.sql 의 역할은 데이터베이스 테이블과 인덱스 등 DDL 작업을 수행합니다. 그리고 기본 위치는 src/main/resources에 작성해주시면 됩니다.
DROP TABLE IF EXISTS members;
CREATE TABLE members (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_email ON members(email);
data.sql의 역할은 초기 데이터를 삽입하는 DML 작업을 수행합니다. 기본 위치는 schema.sql과 같이 src/main/resources에 작성해주시면 됩니다.
INSERT INTO members (name, email) VALUES ('John Doe', 'john.doe@example.com');
INSERT INTO members (name, email) VALUES ('Jane Smith', 'jane.smith@example.com');
SQL 스크립트를 실행하도록 설정합니다. schema.sql이 먼저 실행되고, data.sql이 이후 실행됩니다.
spring:
sql:
init:
mode: always # SQL 스크립트 실행 모드 설정
schema-locations: classpath:db/schema.sql # schema 파일 경로 (필요시 변경)
data-locations: classpath:db/data.sql # data 파일 경로 (필요시 변경)
jpa:
hibernate:
ddl-auto: none # DDL 작업을 SQL 스크립트로 처리할 경우 'none'으로 설정
spring.jpa.hibernate.ddl-auto를 none으로 설정해야 SQL 스크립트가 정상적으로 실행됩니다.classpath:/schema.sql, classpath:/data.sql)를 사용하지 않는 경우, schema-locations와 data-locations를 통해 별도로 경로를 지정합니다.