Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

한바다

[톰캣에러]java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 본문

카테고리 없음

[톰캣에러]java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

한바다진화 2025. 4. 4. 17:51

🔴 에러 원인

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

✔ 톰캣이 OracleDriver 클래스를 찾으려고 했는데, 클래스 자체가 없다는 오류 발생!

 

✔ 정확한 원인

오라클 JDBC 드라이버(ojdbc.jar)가 톰캣에 등록되지 않았음

 

✅ 해결 방법

1. 오라클 드라이버(ojdbc.jar) 다운로드

오라클 공식 사이트에서 해당드라이버를 다운로드 한다.

https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html

 

JDBC and UCP Downloads page

Oracle JDBC Driver Implements JDBC 4.2 spec and certified with JDK8, JDK11, JDK17, JDK19, and JDK21 Oracle JDBC driver except classes for NLS support in Oracle Object and Collection types. (4,536,186 bytes) - (SHA1: c4e79028b6b15e76b4a626cbea4741e7fb528521

www.oracle.com

2. 라이브러리를 Tomcat에 추가하기

- 프로젝트 > WEB-INF > lib 폴더에 다운받은 ojdbc.jar 파일을 복사하여 붙여넣는다

3. 이클립스에 Build Path 설정

- 프로젝트 우클릭 > Build Path > configure Buil Path

- Libraries 탭에서 → Aee JARs... → WEB-INF/lib/ojdbc11.jar 선택

- 적용(Apply)후 닫기

4. 프로젝트 Clean

- Project > Clean

5. 서버 Clean 후 재시작

- Server > Tomcat > Clean

- Tomcat 재시작

 

톰캣을 실행하면 Class.forName("oracle.jdbc.driver.OracleDriver"); 를 만나서

ojdbc11.jar 안에서 OracleDriver 클래스를 정상 로드하고 DB 연동을 진행할 수 있다

 

위와 같이 실행 하였으나 새로운 에러를 맞닥뜨렸다!!

🔴 에러 원인

java.sql.SQLException: ORA-17067: 부적합한 Oracle URL이 지정되었습니다

 

이 요류는 JDBC 접속 문자열(JDBC URL) 형식이 잘못 되었을 때 발생한다.

 

✅ JDBC 접속 URL이란?

Java에서 오라클 데이터 베이스를 연결할 때 사용하는 고유한 주소 문자열로 형식이 정확해야

Oracle JDBC 드라이버가 인식해서 접속할 수 있다.

✅ 올바른 접속 URL 형식

jdbc:oracle:thin:@호스트:포트:SID
예시(기본값 기준)
jdbc:oracle:thin:@localhost:1521:xe

 

위에서 SID xe는 오라클 데이터베이스이름(보통 Express Edition은 xe이다)

또한 오라클 서비스가 켜져 있어야 하며 오라크 포트가 1521이 맞는지 데이터베이스 이름이

xe가 맞는지 아니면 orcl 또는 다른 값일 수 있다

 

해당 오류를 해결하고 톰캣 실행시 세번째 오류가 찾아왔다....

🔴 에러 원인

ORA-12541: 접속할 수 없습니다. host localhost port 1521에 리스너가 없습니다.

 

✔ 이 에러의 정확한 의미는 JDBC URL이 맞지만, 오라클 서버가 접속을 받아줄 준비가 안된 상태로

   즉, "localhost:1521"에 리스너(listener)가 떠 있지 않다는 뜻이라고 한다 

✅ 해결 방법

- 오라클은 외부 요청을 리스너라는 서비스가 받아서 처리한다.

  리스너가 꺼져 있으면, 접속 자체가 되지 않는다

 

🔧 Windows 기준: 리스너 실행 확인 방법

명령 프롬프트에서 확인

1. CMD (명령프로프트) 실행

2. 아래 명령어 입력:

lsnrctl status

✅ 리스너가 실행 중이면 아래와 같은 정보가 출력된다.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Listening Endpoints      ...

 

❌ 리스너가 꺼져 있으면 아래처럼 나온다.

TNS-12541: TNS: no listener

 

✅ 리스터 시작하기

CMD(관리자 권한) 에서 아래 명령어 실행:

lsnrctl start

✔ 리스터가 실행되면 이제 접속이 가능해진다!!

 

✅ 또한 오라클 데이터베이스도 실행 상태인지 확인한다

window + R -> 서비스(services.msc) 에서 아래 2개 서비스가 실행 중인지 확인

- OracleServiceXE (오라클 DB 본체)

- OracleXETNSListener(리스터 서비스)

 

해당 오류를 해결하고 톰캣 실행시 네번째 오류가 찾아왔다....

🔴 현재 오류: ORA-12505

ORA-12505: SID xe이(가) host localhost port 1521의 리스너에 등록되지 않았습니다.

 

✔ 이말은 SID=xe 라는 DB 이름을 가진 오라클 인스턴스를 리스너가 모르고 있다는 뜻으로

   즉, JDBC 접속 주소는 맞는 것 같은데, 해당 SID(xe)가 오라클에 존재하지 않거나 리스너가

   아직 모르고 있는 상황이다

 

✅ 해결 방법 

1. 실제 오라클 SID 확인하는 방법

CMD(명령 프롬프트)에서 아래 명령어 입력:

echo %ORACLE_SID%

출력값이 xe인지 orcl인지 확인 한다!!

2. JDBC URL을 다시 정확히 지정

📌 SID가 orcl이라면 이렇게 바꿔야 한다!

jdbc:oracle:thin:@localhost:1521:orcl

 

💡 더 안정적인 방법 (Service Name 방식)

오라클 12c 이상에서는 SID보다 Service Name 사용을 권장

jdbc:oracle:thin:@//localhost:1521/XE

- 슬러스 2개 → @//host:port/service_name

- Servict Name이 XE 인지 ORCL 인지 확인 필요 

 

✅ 최종 해결 예시 (URL 수정)

1️⃣ SID 방식:

jdbc:oracle:thin:@localhost:1521:xe

2️⃣ Service Name 방식 (더 권장):

jdbc:oracle:thin:@//localhost:1521/XE

 

현재문제는 JDBC URL에 넣은 SID=xe가 오라클에 없거나 등록이 안됨

해결방법은 SID를 실제 DB SID로 변경하거나, Service Name방식으로 바꾸는 것