Spring Boot 서버 실행시 ddl-auto, init-sql 작동 순서

김민우·2023년 2월 20일
0

잡동사니

목록 보기
10/22

DB를 연동하여 프로젝트를 할 때 테스트 용 SQL을 작성하여 서버 실행마다 DB에 샘플 데이터를 저장하고 싶으면 어떻게 할까? 일일히 서버를 실행하고 작성한 SQL을 실행하는 것은 매우 번거로울 것이다.

먼저 application.properties 에 다음을 추가하자.

spring.sql.init.mode=always

이후, 서버 실행마다 실행하고 SQL 파일을 src/resources/ 단계에 추가하자. 파일 명은 data.sql 으로 설정하는 것이 관례이다.

이렇게 세팅을 마치고 서버를 실행 했는데 오류가 발생했다.

이유는 generate-ddl 옵션을 통해 테이블을 만드는 과정과 테이블에 데이터를 추가하는 SQL의 작동 순서때문이였다. 내가 바라는 것은 테이블이 생성된 후 데이터를 INSERT 하는 것이였는데, 작동 순서가 반대로 적용됬다.

application.properties 에 다음 문장을 추가하자.

spring.jpa.defer-datasource-initialization=true

위 옵션이 있는 경우 다음 순서로 동작하게 된다.

  1. Hibernateddl-auto
  2. data.sql 실행

테스트를 할 때는 ddl-auto 를 통해 테이블 생성 후 데이터를 삽입하는 것이 일반적이라 생각하여 이 옵션 설정은 필수라 생각된다. 또한, Spring 덕분에 서버 실행마다 특정 SQL을 실행할 수 있었다.

0개의 댓글