문제 발생
@DataJpaTest를 사용하려던 도중 에러가 발생했다. 강의 내에선 이 에러를 짚지 않고 넘어갔기에 혼자서 해결해야 했다. (왜 나만 발생한 건지 의문이다.. 심지어 물어보시는 분들도 없었다..)
Error creating bean with name 'dataSourceScriptDatabaseInitializer'
에러메시지만 읽었을 때 데이터베이스가 초기화되지 않았다는 것을 느꼈다. 그리고 구글링을 통해 dataSource를 Bean으로 등록하지 못했으니 database를 embedded 하고 싶으면 @AutoConfigureTestDatabase의 설정을 하라는 것을 알 수 있었다.
문제 원인
문제 원인을 파악하기 위해 내가 작성한 @DataJpaTest와 해결방법인 @AutoConfigureTestDatabase에 대해 알아보았다.
먼저 @DataJpaTest를 작성하면 따라오는 어노테이션들이다.
They also use an embedded in-memory database (replacing any explicit or usually auto-configured DataSource). The @AutoConfigureTestDatabase annotation can be used to override these settings.
DataJpaTest의 주석을 읽어보면 위와 같은 문장을 확인할 수 있다.
내장된 메모리 데이터베이스를 사용하고 설정을 재정의하기 위해선 @AutoConfigureTestDatabase 를 사용하라고 적혀있다.
이후 @AutoConfigureTestDatabase의 EmbeddedDatabaseConnection에서 원인을 알 수 있었다.. @DataJpaTest는 DB를 테스트하는 것이고 테스트할 때 사용할 DB를 정의해줘야 한다는 것인데 오류가 났던 이유는 DB를 설정하지 않았기 때문이다.
즉 @DataJpaTest를 사용하면 자동으로 EmbeddedDatabase를 사용해버리기 때문에, 내가 사용하려는 DB 설정할 수 없다.
문제 해결
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
나는 data.sql에 있는 데이터를 사용할 것이기 때문에 NONE으로 DB를 설정해 주었고, 에러를 해결할 수 있었다.
참고
[JPA] DataJpaTest: 테스트시에 실제 DB 사용하기
Error creating bean with name 'dataSourceScriptDatabaseInitializer'
'Dev > Spring' 카테고리의 다른 글
[Spring] OCP, DIP를 위반하는 클라이언트 코드 고치기 (feat. DI) (0) | 2023.09.10 |
---|---|
[Spring] 스프링이란? (0) | 2023.09.03 |
[Spring] DI를 사용하여 구현 클래스 변경하기 (0) | 2023.09.01 |
[Spring] 스프링 빈과 의존관계 (0) | 2023.09.01 |
[Spring] @ResponseBody (0) | 2023.08.31 |