
본 포스팅은 Spring Boot 3.3.4, MySQL 9.0.1 을 다루고 있습니다.
문제 상황
스프링 부트 애플리케이션을 만들 때, 더미 데이터는 data.sql 파일에서 관리할 수 있다.
이 데이터를 외부 DB 와 연동해서 확인을 하고 싶은데, MySQL Workbench 에서 확인한 결과 아무 것도 나타나지 않았다.
우선 기존의 내 설정은 다음과 같았다.

특별한 건 없고, spring.sql.init.mode 의 옵션값을 always 로 설정함으로써 애플리케이션이 실행될 때 sql 파일을 반드시 실행하도록 설정했다.
이후 MySQL 의 board 스키마에서,

Article 엔티티의 테이블을 확인할 수 있다.
그리고 내가 필요로 하는 더미 데이터 또한 Article 객체들이다.
더미 데이터는 전술했듯이 data.sql 에 다음과 같이 작성해 주었다.

그런데 이를 MySQL Workbench 에서 확인해 보려고 했더니 ARTICLE 테이블까지는 생성이 잘 되어 있는데, 담겨 있는 값이 없었다.

그 말은 즉슨, data.sql 의 데이터들이 초기화되는 과정에서 문제가 발생한 것이다.
그 해답은 구글링 해 보니까 생각보다 간단하게 찾을 수 있었다.
문제 해결
application.properties 에 다음 옵션을 추가해 주면 된다.
spring.jpa.defer-datasource-initialization=true
Spring Boot 2.5 버전 이후부터는 Hibernate 초기화 이전에 data.sql 이 실행되기 때문에 Hibernate 가 스키마를 생성하는 과정에서 추가한 데이터를 삭제한다.
따라서 해당 옵션은 Hibernate 초기화가 끝나면 data.sql 의 데이터를 가져오도록 설정하는 것이다.
여기서 Hibernate 의 스키마 생성(=초기화)이란, 애플리케이션 내에 있는 엔티티 클래스들을 DB 테이블로 매핑하는 과정이다.
data.sql 의 더미 데이터를 Article 테이블에 넣을 건데,
더미 데이터를 삽입하고 Article 테이블을 생성하면 당연히 초기화돼서 사라지는 거다.
Article 테이블을 먼저 생성하고, 더미 데이터를 삽입함으로써 문제를 해결했다.