Spring Boot에서 schema.sqldata.sql의 역할과 사용 방법

  • 4 minutes to read

Spring Boot는 애플리케이션 실행 시 데이터베이스를 자동으로 초기화할 수 있는 기능을 제공합니다. 이때 src/main/resources 경로에 위치한 schema.sqldata.sql 파일은 특별한 의미를 가지며, Spring Boot에서 공식적으로 지원하는 초기화 스크립트로 동작합니다.

1. 파일의 역할

다음 표는 각 파일의 역할을 정리한 내용입니다.

파일명 설명
schema.sql 데이터베이스 스키마 정의 (테이블, 시퀀스 등 DDL)
data.sql 초기 데이터 삽입 (INSERT 문 등 DML)

이 두 파일은 classpath의 루트 경로에 존재하면, Spring Boot가 자동으로 인식하여 실행하게 됩니다.

2. 실행 순서

Spring Boot는 애플리케이션 시작 시 다음과 같은 순서로 SQL 스크립트를 실행합니다.

  1. schema.sql
  2. data.sql

먼저 테이블 등의 스키마를 생성하고, 이후 해당 스키마에 데이터를 삽입하는 방식으로 동작합니다.

3. 적용 조건

schema.sqldata.sql은 JDBC 기반의 DataSource가 사용될 경우 기본적으로 적용됩니다. Spring Data JPA와 함께 사용하는 경우에는 추가적인 설정이 필요할 수 있습니다.

4. 관련 설정

Spring Boot 2.5 이상 버전에서는 SQL 초기화 동작을 보다 명확하게 제어할 수 있도록 아래와 같은 프로퍼티를 제공합니다.

spring.sql.init.mode=always
설명
always 항상 SQL 스크립트를 실행합니다.
embedded 내장형 데이터베이스(H2, HSQL, Derby 등)에 대해서만 실행됩니다.
never SQL 스크립트를 실행하지 않습니다.

또한, JPA를 함께 사용하는 경우에는 data.sql이 테이블 생성보다 먼저 실행되어 오류가 발생할 수 있습니다. 이러한 경우에는 다음과 같은 설정을 추가하시면 도움이 됩니다.

spring.jpa.defer-datasource-initialization=true

이 설정은 JPA가 먼저 테이블을 생성한 이후에 data.sql이 실행되도록 순서를 조정해 줍니다.

5. 사용 예시

다음은 schema.sqldata.sql의 간단한 예시입니다.

schema.sql

CREATE TABLE users (
    id BIGINT PRIMARY KEY,
    username VARCHAR(100),
    password VARCHAR(100)
);

data.sql

INSERT INTO users (id, username, password) VALUES (1, 'admin', '1234');

6. 유의사항

  • 운영 환경에서는 schema.sqldata.sql보다는 Flyway 또는 Liquibase와 같은 데이터베이스 마이그레이션 도구를 사용하는 것이 더욱 안정적입니다.
  • data.sql은 주로 테스트나 데모용으로 사용되며, 복잡한 초기화 로직에는 적합하지 않을 수 있습니다.
  • 가급적이면 DDL과 DML을 분리하여 각각의 파일에 명확히 작성하시는 것을 권장드립니다.

7. 결론

schema.sqldata.sql은 Spring Boot에서 데이터베이스 초기화를 간단하게 처리할 수 있는 공식적인 방법입니다. 테스트나 간단한 환경에서는 매우 유용하게 활용될 수 있으며, JPA와 함께 사용하는 경우에는 초기화 순서를 조정할 수 있는 설정을 고려해 주시는 것이 좋습니다. 실제 서비스 환경에서는 마이그레이션 도구를 함께 사용하는 것이 바람직합니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com