본문 바로가기

WEB

[WEB] ClassNotFoundException: com.mysql.cj.jdbc.Driver

개요

서블릿 프로그래밍과 MVC 모델에 대한 공부를 마치고, 간단한 CRUD 게시판을 만들어보기로 하였다. 기존의 경우, 사용하는 책이 이클립스를 사용하여 이클립스에서 진행하였으나, 하려고 하는 프로젝트가 워크스페이스 기반일 필요도 없고, 실제 프로그래밍 생산성에 있어서도 intellij가 압도적이기 때문에(개인적인 생각입니다^^) intellij에서 하기로 결정. 그래서 시작 전 간단하게 db 연동 테스트를 하는데 문제가 발생하고 말았다....

 

대단한 에러는 아니다만 처음 intelliJ 쓰는 분들중에 나랑 비슷한 문제를 겪는 분들이 있을까 싶어서 써봅니다^^

 

ClassNotFoundException: com.mysql.cj.jdbc.Driver

DB와 연동을 위해서는 jdbc-connector 모듈을 통해 드라이버를 찾아 등록해야 한다. 그런데 만약 이 과정에서 드라이버를 찾을 수 없을 경우, 위와 같은 에러가 발생한다. 보통의 경우, [file]->[project structure]->[libraries/module]에 들어가서 커넥터를 등록해주면 문제는 손쉽게 해결된다.

 

하지만 나의 경우, 이미 모듈을 추가했음에도 불구하고, 위와 같은 오류가 발생하였다.

 

원인

프로젝트를 실행하면 드라이버를 등록하고 Connection 객체를 생성해 DB를 연동하기 위해 먼저 아래 코드를 실행한다.

Class.forName("com.mysql.cj.jdbc.Driver");

Class.forName 메서드는 파라미터로 주어진 문자열이 이름인 클래스를 찾아 '초기화'한다. Class 클래스의 경우, 클래스의 정보를 담고 있는 메터 클래스이다. 즉, Class.forName을 통해 드라이버의 정보를 받으면 해당 정보를 통해 드라이버를 등록할 수 있는 것이다. 이때 우리가 주목해야할 부분은 '클래스를 찾는다' 이다. class.forName() 이 실행되면 클래스를 찾는다. 해당 클래스는 반드시 프로젝트 내부에 존재해야 한다. 그러므로 당연히 외부 경로로부터 추가된 라이브러리의 클래스의 경우 class.forName은 찾을 수 없고, 이로 인해 ClassNotFoundException이 발생하는 것이다. 

 

해결

이클립스와 마찬가지로 WEB-INF 폴더 내에 lib 디렉토리를 만들어 해당 디랙토리 내에 jsdb-connector....jar 파일을 추가해주면 Class.forName을 실행하면 당연히 해당 드라이버 클래스를 찾을 수 있고, 오류는 해결된다.