java.lang.ClassNotFoundException: 특정 Db Driver 못찾는 오류
보통 회사의 프로젝트를 하다보면 한 Project에서 여러 Db 연동을 경험할 수 밖에 없다. (보통 yml, properties로 연동)
그 상황에서 내가 최근에 겪은 오류는, 원격의 site에서 db를 연동하여 로컬에서 테스트 환경을 적용할 때 일어난 일이다.
sybase의 저버전이나 vertica같은 경우(지원이 안되거나) 따로 project의 lib에 탑재할 확률이 있다. (열악한 환경에 따라서)
그래서 버전별로 아래와 같이 jdbc를 compile 선언을 해줄 수 있다. (나는 gradle이다.)
그래도 내가 겪었던 오류는, 위의 모든 환경과 상관 없이 ClassNotFoundException 이었는데, 간단히 해결해보자면
위의 모든 상황의 대처를 했던 사람은 추가적으로 intelliJ라면 File -> projectStructure 에서
1. Project Settings -> Libraries 탭에서 + 버튼을 눌러 JAVA에 수동적으로 받아져 있는 내 jdbc Driver 파일을 추가해줘야 한다.
💡문제는, 이 Project의 Naming을 단순히 Connection을 도와주는 파일의 이름으로 수행해서는 안된다.
예를 들어, sybase를 추가하고 싶으면 jconn42.jar를 추가해 줘야 하는데, 그렇게 추가하게 되면
보는 것과 같이 각 db Driver 의 파일이 가진 파일명으로 jdbc DriverClass 파일이 등록이 된다.
그런데 이렇게 파일을 올리면 우리 생각은 컴퓨터에 파일을 올렸으니까 그냥 보고 알아서 올려주겠지란 막연한 판단을 하는데,... 이것이 문제의 시발점이 된다.
이 이후에 잘 작동이 안되고 계속 DirverClassNotFound (혹은 다른 여러가지 문제가 발생할 수 있다.) 발생이 되면,
저 명칭 자체를 DriverClass의 명칭으로 수정해줘야 한다.
ex ) Sybase DB의 DataSource의 driver-class-name 은
com.sybase.jdbc42.jdbc.SybDriver
인데, 저 네이밍 자체를 저렇게 바꿔줘야 한다.
Oracle, Vertica, Mssql 등 DB에 따라 요구하는 driver-class-name이 있을 테니, Db에 요구되는 사항에 따라 맞춰서 하면 될듯. 내 문제는 이렇게 해결됐다. (고객사의 로컬에서 개발환경을 구축하는 상황)