본문 바로가기

웹 프로그래밍/eclipse

500에러_MyBatisSystemException_Could not get JDBC Connection 해결

 

오랜만에 예전에 한달동안 혼자 진행한 프로젝트를 실행해봤다.

오랜만에 켰는데도 메인 페이지는 문제없이 잘 출력됐다.

 

하지만 그렇게 안심하기도 전에 상품 카테고리 "아우터"를 클릭하자 500 에러가 났다.

원래 아우터 리스트 페이지로 이동되야 하는 데 말이다..

 

오류 내용을 보니...

 

 

DB 연결 관련 문제인 것 같다.

 

 

//문제원인 확인&분석

 

1. service단에서 myBatis를 호출하는 과정에서 잘못 됐다.

( mapper.xml의 namespace 이름과 service단에서 호출하는 namespace 이름이 다른 경우 )

->문제 없음(pass)

 

 

2. myBatis의 쿼리문이 잘못 됬다.

 

  2-1. myBatis 쿼리문에 오타가 있는 경우 ->문제 없음(pass)

 

  2-2. service로 부터 받는 변수의 정보가 잘못 된 경우(Controller단, Service단에서 넘겨주는 변수 정보 확인)

 

  // 문제해결 detail

     2-2. 비즈니스 로직 - 상품 페이지 - Controller로 가서 myBatis의 쿼리문을 확인했다.

    그리고 myBatis에서 service로 부터 받아오는 변수 #{menu_id } 앞에 product. 연산자를 줬다.

    (  가끔 HashMap에 담아서 넘겨주기도 하기 때문에 #{product.menu_id }  )

 

 

    그리고 실행해보니 오류가 났다.

    하지만 희망적이게도 오류 내용은 달라졌다!!

    HashMap으로 담아서 불러오는 문제는 아니다!

 

   그럼 이번에는 myBatis의 변수 #{member_id }를 지우고 다이렉트로 문자 1로 줘 봤다(하드코딩 방법).

 

 

    이것으로도 문제가 해결되지 않았다. 

    따라서 이 문제도 아니다!!

    ->문제 없음(pass)

 

 

3. DB의 data type과 다른 경우(예를 들어 DB는 NUMBER형인데, 변수는 String형인 경우 안됨) 

   varchar2와 string으로 같음 ->문제 없음(pass)

 

 

4. DB가 연결이 안된 경우

 

// 문제해결 detail

  4-1. pom.xml에서 DB connect 관련 설정이 누락됐거나, 잘못된 경우

 

  예전에 겪어본 erorr이다. 

  그당시 이 문제로 2시간 넘게 삽질한 경험 덕분에 내 로컬에 정리해 놨었다.

 

       <!-- dependencies위에 추가 -->
<repositories>
	<repository>
		<id>codelds</id>
		<url>https://code.lds.org/nexus/content/groups/main-repo</url>
	</repository>
</repositories>



<!-- ojdbc -->
<dependency>
	<groupId>com.oracle</groupId>
	<artifactId>ojdbc6</artifactId>
	<version>11.2.0.3</version>
</dependency>
  

 

pom.xml 확인해보니 이 설정과 같았다.

->문제 없음(pass)

 

 

  4-2. DB Service가 로컬에서 실행이 안된 경우

 

  로컬에서 오라클 service가 실행이 안된 경우가 간혹 있었다.

  프로젝트 초기 당시에 이 오류 때문에 고생을 밥 먹듯이 한 기억이 있다.

 

우선 오라클이 제대로 실행됐는지 확인하기 위해 DB툴을 이용해 DB server를 실행해 봤다.

접속이 되지 않는다.

 

 

Oracle Error 17002 "Io Exception: The Network Adapter could not establish the connection"


 

오라클 오류 코드는 ORA-17002

 

 

내 컴퓨터 서비스 관리에서 'OracleServiceXE'와 'OracleXETNSListener'이 시작되지 않아서 에러가 발생한 것이다.

 

실행시켜 봤지만 해결되지 않았다.

 

다시 실행>cmd창을 켰다.

아래 명령어를 순서대로 cmd창에 입력한다.

 

1. 리스너 상태를 확인해 본다.

lsnrctl status

 

2. 리스너를 정지시킨다.

lsnrctl stop

 

3. 리스너를 실행한다.

lsnrctl start

 

 

 

해결 완료!!

결국 원인은 DB service가 정상적으로 실행되지 않았기 때문이였다...