사용자 삽입 이미지

[그림1] 전체적인 파일 구조

어제 톰켓에 JNDI 설정을 하면서 한시간 넘게 삽질을 했지만 계속해서 오라클 접속 드라이버를 찾을 수 없다는 메세지만 계속 나온 상황.

대체 무엇이 문제란 말인가...

해서 이것저것 해보다가 알게된 것은 바로 오라클 jdbc 드라이버가 잘못된 경로에 위치한 것 때문인데, 사실 이 문제를 야기하게된 배경에는 바로 WTP 가 작업중인 프로젝트의 소스 파일들을 톰켓에 배포하는 일련의 과정이 있었다.

[그림1]에서 보듯이 일반 자바 소스 파일은 Java Resources:src 에 놓여있고 jsp, html 관련 웹 파일들은 WebContent 디렉토리 밑에서 관리된다.

src 디렉토리 밑의 파일들은 톰켓 서버를 가동하고 프로젝트를 배치할 때 WEB-INF/classes 밑으로 전부 들어간다. 그리고 이 애플리케이션이 실행될 때 필요한 다른 라이브러리들은 WEB-INF/lib 밑으로 들어가기 때문에 필요한 라이브러리들을 [그림 2]의 WEB-INF/lib 밑에 넣어두면 웹 애플리케이션 실행시 알아서 복사된다.

사용자 삽입 이미지

[그림2] lib 밑에 들어있는 jar 파일들은 실행 시 그대로 복사된다.

[그림 2]에서 볼 수 있듯이 개발 시 참조되는 jar 파일들을 build path에 지정해준 후 lib 디렉토리에 jar 라이브러리 파일을 복사해서 넣어놓은 모습.(개발 환경과 실제 애플리케이션 실행 환경은 별개의 문제이다.)

지금까지는 이렇게해서 라이브러리 참조 문제를 해결해왔는데 어제 오라클 드라이버라는 복병을 만난셈이었다.

마찬가지로 오라클 jdbc 드라이버를 JSTL 관련 라이브러리와 함께 넣어놓았지만 웹 서버를 실행한 후 JNDI 로 Connection 을 얻어올 때 드라이버를 찾을 수 없다고 나온 상황. 뭐냐 이거...

문제를 해결하기 위해서 실제 애플리케이션이 톰켓에 어떻게 배치되었나 보기 위해 톰켓 디렉토리를 찾아봤지만.. 이럴수가........ 그 안에는 아무것도 없었다. -_-; AccountBook 이라는 디렉토리와 관련 자바 파일들 그리고 jsp 파일을 번역한 자바 파일 등 아무것도 없어서 당황스러웠다...

윈도우 검색창을 이용해서 저 파일들을 추적한 끝에 개발 중인 파일들이 어디에 배치되는지 알 수 있었는데 그 위치는 바로 아래와 같다.

${ECLIPSE_WORKSPACE}/.metadata\.plugins\org.eclipse.wst.server.core

WTP가 톰켓 서버를 실행 한 후 개발중인 코드들을 wtpwebapps 에 복사한 뒤에 웹 애플리케이션을 가동하는 것이다.

tmp0/wtpwebapps 밑에 AccountBook 이 들어가 있고 작성한 jsp 파일의 자바 소스 코드는 work/Catalina 밑에서 찾을 수 있다. 이곳을 확인해보니 WEB-INF/lib 밑에 오라클 jdbc 드라이버가 존재한다.

사용자 삽입 이미지

[그림 3] 실제로 웹 애플리케이션이 배치되는 디렉토리의

WTP의 버그가 아니라 이 라이브러리가 Context 내에서만 사용되는게 아니라 톰켓 자체에서 사용되는 것이라고 짐작할 수 밖에 없는 상황.

 jdbc 드라이버를 ${TOMCAT_HOME}/lib 밑에 복사해놓으니 에러 메세지가 사라진다. 아파치 톰켓6의 JNDI DataSource 설정 문서를 보면 JNDI 리소스를 설정하는 두 가지 방법이 나온다. 하나는 모든 Context에게 보이는 Global 영역에서 리소스 지정과 다른 하나는 개별 Context 에서만 사용하도록 하는 방법.

그런데 이 문제를 해결해놓고보니 jndi 리소스의 가시성이 실제 물리적인 라이브러리 배치와는 무관한 셈이다. -_-;

사실 라이브러리를 여기저기 늘어놓는 것을 싫어하는데, 나중에 C 드라이브를 포맷하고 os 를 새로 설치할 경우 이전의 개발 환경과 달라지기 때문에 이전에 작성한 프로젝트를 열어보면 라이브러리를 못찾아서 일일이 찾아다니면서 링크 수정하는게 여간 성가신 일이 아니다.

그래서 보통은 D 드라이브를 개발 전용으로 지정하고 d:/pub_lib 에 모든 라이브러리를 몽땅 넣어둔다. 나중에 ide 들을 새로 설치해도 기존의 프로젝트 설정 파일들은 모두 d:/pub_lib 를 참조하고 있기 때문에 일이 많이 줄어든다.

이번에 오라클 jdbc 드라이버처럼 어쩔 수 없이 톰켓 디렉토리에 넣어둘 경우 이 드라이브를 포맷하고 새로 설치할 때 다시 같은 문제가 반복된다.

이 글을 남겨놓은 것도 나중에 잊어버리고 또 같은 문제때문에 시간 낭비하는 일이 없었으면 해서 남기게 된 것. (미래의 나를 위해서 ^^)

Posted by yeori
,