본문 바로가기

[Spring] 애플리케이션 실행시 data.sql / schema.sql 이 실행되지 않을 때

@xuv22025. 10. 16. 22:43

프로젝트를 진행하면서 테스트 코드를 작성하기 위해 GPT에게 더미 SQL 파일을 만들어달라고 했다.

 

문제 상황

원래, 스프링 프로젝트의 resources 경로에 data.sql / schema.sql 파일은 애플리케이션 시작시 먼저 실행이 된다.

그러나 로그를 까먹고 캡쳐를 못했는데, 하이버네이트가 테이블은 정상적으로 만드는데 INSERT 문이 단 한개도 안날라갔다.

 

해결방법

spring:
  profiles:
    active: test

  sql:
    init:
      mode: always

  datasource:
    url: DB 주소 입력
    driver-class-name: org.h2.Driver
    username: sa
    password:

  jpa:
    database: h2
    hibernate:
      ddl-auto: create
    show-sql: true
    defer-datasource-initialization: true

해당 코드는 테스트 DB인 H2를 적용한 설정 파일인데, 중요한 옵션 두가지를 켜야 한다.

  1. sql.init.mode = always
  2. jpa.defer-datasource-initialization : true

1번 옵션을 켜야하는 이유는 H2는 잘 모르겠지만, MySql 같은 경우에는 애플리케이션 시작시 자동으로 data.sql을 실행하지 않는다. 그래서 1번 옵션을 켜줘야 한다.

2번 옵션은 실행 순서에 관련된 내용인데, 만약 data.sql이 실행 되어지고 하이버네이트가 뜨면서 ddl-auto 설정에 따라 해당 테이블을 drop하고 새로 만들어 데이터가 사라질 가능성이 있기 때문에, 반드시 하이버네이트 (JPA)가 뜨고 그 이후에 data.sql이 실행 되도록 해야한다.

내가 걸린 문제는 아마 1번 문제였던 것 같고, 혹시 모를 상황을 대비해 2번 옵션까지 적용 해주니 다음과 같이 정상적으로 로컬 DB와 테스트 DB에 모두 데이터가 잘 들어갔다.

 

xuv2
@xuv2 :: xuvlog

폭싹 늙었수다

목차