본문 바로가기
Java/Spring with Error

[해결 방법] Failed to determine a suitable driver class

by HJ0216 2024. 9. 28.

Factory method 'dataSource' threw exception with message: Failed to determine a suitable driver class

 근데 이제 DataSource와 Drive class를 곁들인

Environment
Language: Java 17
Framework: SpringBoot 3.1.0, Junit5
DB: MySQL, Redis

 

오류

dataSourceScriptDatabaseInitializer의 Bean 생성을 실패

적합한 드라이버 클래스를 찾지 못함

 

 

원인

.gitignore에 환경변수 설정과 관련된 정보가 들어있는 application.properties를 추가

github에서 application.properties가 제거된 채로 업로드

왜인지 모르겠지만.. 로컬에서도 함께 사라짐..

 

 

해결

application.properties 파일 복구

 

 

DataSource와 DriverClass

자바 언어로 DB에 접근하기 위해 사용하는 API를 JDBC라고 합니다.

JDBC를 사용해서 Oracle Database, MySQL 등 다양한 DB에 일관된 방법으로 접근할 수 있습니다.

JDBC API를 사용하기 위해서는 JDBC 드라이버를 먼저 로딩한 후 데이터베이스와 연결해야 합니다.

  * JDBC 드라이버: JDBC 인터페이스를 구현한 구현체입니다.

 

DB와 통신하는 과정은 다음과 같습니다.

1. DB Driver를 Load

2. DriverManager를 통해 Connection을 획득

  * DriverManager: 드라이버들을 관리하고 Connection을 획득하는 기능을 제공

3. 질의 수행

4. 결과 획득

5. Connection 종료

 

문제는 이렇게 매번 커넥션을 생성하기 위해서는 네트워크와 연결하고 서버의 자원을 사용한다는 점입니다.

즉, 연결하는 데에 추가적인 시간이 걸리며 매번 리소스를 사용하게 된다는 것입니다.

이러한 문제점을 해결하기 위해 커넥션 풀(Connection Pool)을 사용합니다.

즉, 데이터베이스와의 연결이 필요할 때마다 매번 새로운 커넥션을 생성하는 대신 미리 생성된 커넥션을 커넥션풀에 보관하고 필요할 때마다 커넥션을 꺼내서 사용하는 것입니다.

 

이처럼 커넥션을 획득할 때 DriverManager를 통해서 커넥션을 획득하거나 커넥션풀을 통해서 커넥션을 획득하는 등 여러 방법이 존재합니다.

그래서 DataSource 인터페이스를 통해서 커넥션을 획득하는 방법을 추상화합니다.

이를 통해 커넥션을 획득하는 방식과는 무관하게 일관된 방식으로 데이터베이스와 통신할 수 있는 것이다.

 

이 때, 오류가 HikariDataSource인 것을 보아서 미리 커넥션을 생성해 놓은 커넥션풀을 사용하고 있다는 걸 알 수 있습니다.

  + DriverManagerDataSource의 경우, DB에 연결할 때마다 커넥션을 생성해서 획득하는 방식입니다.

 

 

 

🙋‍♀️

본 포스트는 공부 목적으로 작성하였습니다.
보시는 도중 잘못된 부분이나 개선할 부분이 있다면 댓글로 알려주시면 수정하도록 하겠습니다.

 

📑

참고 자료

https://tecoble.techcourse.co.kr/post/2023-06-28-JDBC-DataSource/

 

JDBC와 DataSource 이해하기

JDBC란? JDBC(Java Database Connectivity)는 자바 프로그래밍 언어를 사용해 데이터베이스에 접근할 수 있도록 하는 자바 API이다. 이를 통해서 우리는 데이터베이스에 접속하고, SQL…

tecoble.techcourse.co.kr