[Springboot] Failed to configure a DataSource

스프링 부트를 배우면서 초기 실행 단계에서 다음과 같은 에러가 발생했다. 분명 영상을 통해서 했던 순서 그대로 했는데 왜 이런 에러가 떴을까?

 

나의 경우 in-memory 방식 h2 데이터베이스를 사용하고자 했다.

우선은 다음과 같은 에러가 무엇인지 살펴보기 위해서 메세지를 읽었다. 그 가운데 Failed to configure a DataSource라는 메세지와 함께 url 속성 관련 내용이 있었다. 여기서 크게 어려움 없이 h2 Db 연결관련 접속 정보를 지정하지 않았구나라는 생각이 바로 들어 다음과 같이 application.yml에 h2 DB 연결 정보를 넣어주었다.

다음과 같이 접속정보를 설정해주고나니 기존에 Failed to configure a DataSource 문제는 해결된 것 같다.

그런데 이번에는 해결하니 뭔가 에러메세지가 더 길어지고 많아졌다.... 

 

에러원인들을 한번 살펴보니 다음과 같은 메세지가 나타났다.

 

[org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource ]

 

[Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in class path resource ]

 

[Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.zaxxer.hikari.HikariDataSource]: Factory method 'dataSource' threw exception; nested exception is java.lang.RuntimeException: Failed to load driver class org.h2.Driver in either of HikariConfig class loader or Thread context classloader]

 

[Caused by: java.lang.RuntimeException: Failed to load driver class org.h2.Driver in either of HikariConfig class loader or Thread context classloader]

 

우선 차분하게 내가 공부한 스프링에 내용들을 생각해보면서 읽다보니 몇 가지 눈이 띄는 부분들이 있었다. 공통적으로 class path에 생성하려는 자원이 없다는 메세지였다. 이 부분을 쭉 생각하면서 문득 DB를 연결해주는 기능을 하는 어떤 클래스가 현재 내가 작업하는 프로젝트에 없다는 것을 알았다. 그러나 이때까지는 도대체 뭐가  없는 것일까?라는 생각을 계속하면서 build.gradle도 확인해보고 설정대로 받아 온 라이브러리 자원이 있는 External Libraries도 찾아보고 여기저기 패키지 안에 클래스들을 뒤적거렸다. 그러나 쉽게 어떤 부분인지는 알지 못했다.

 

결국은 뭐가 문제인지 도저히 모르겠어서 기존에 설정했던 프로젝트를 열어서 서로 비교해보았다. 그리고 build.gradle에서 h2 database를 사용하기 위한 dependencies를 추가해주지 않았다는 것을 단번에 알아차리고 바로 추가 후 Gradle reload하여 프로젝트를 다시 실행해보았다.

 

결과는 다음과 같이 깔끔하게 성공했다. 휴....

 

이처럼 직접 환경설정을 해주고 사용한 라이브러리들을 추가하는 과정에서 추가 되지 않았을 경우 어떠한 에러가 발생하며, 오늘의 경우는 해당 db관련 연결을 위한 driver 라이브러리를 추가하지 않을 때 발생할 수 있는 에러 메서지를 확인해 볼 수 있었다. JPA, lombook, web  , thymeleaf 등은 상대적으로 추가할 때 인식하기 쉬웠으나 db를 연결하기 위한 드라이버 관련 라이브러리는 놓쳐버린 것이다. 그러나 해당 경험을 통해서 설정하나로 필요한 라이브러리들을 미리 땡겨와 줌으로 개발자가 너무 편하게 개발을 할 수 있다는 경험을 했다. 기존 스프링에서 어려운 점은 서로간에 종속성 문제였다고 한다.만약 단순 지정을 안해준 것이 아닌 이와같이 설정부분에서 종속성으로 인한 에러가 발생한다면 어떨까라는 생각을 해보게도 되었다.  그러다보니 프링 부트가 종속성을 관린해주기 엄청 편해지고 개발자가 개발에 더욱 집중할 수 있게 되었다는 이야기들에 대해서 조금이나마 생각해보고 경험해본 계기라고 생각한다.