[그림1] 전체적인 파일 구조
대체 무엇이 문제란 말인가...
해서 이것저것 해보다가 알게된 것은 바로 오라클 jdbc 드라이버가 잘못된 경로에 위치한 것 때문인데, 사실 이 문제를 야기하게된 배경에는 바로 WTP 가 작업중인 프로젝트의 소스 파일들을 톰켓에 배포하는 일련의 과정이 있었다.
[그림1]에서 보듯이 일반 자바 소스 파일은 Java Resources:src 에 놓여있고 jsp, html 관련 웹 파일들은 WebContent 디렉토리 밑에서 관리된다.
src 디렉토리 밑의 파일들은 톰켓 서버를 가동하고 프로젝트를 배치할 때 WEB-INF/classes 밑으로 전부 들어간다. 그리고 이 애플리케이션이 실행될 때 필요한 다른 라이브러리들은 WEB-INF/lib 밑으로 들어가기 때문에 필요한 라이브러리들을 [그림 2]의 WEB-INF/lib 밑에 넣어두면 웹 애플리케이션 실행시 알아서 복사된다.
[그림2] 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] 실제로 웹 애플리케이션이 배치되는 디렉토리의
jdbc 드라이버를 ${TOMCAT_HOME}/lib 밑에 복사해놓으니 에러 메세지가 사라진다. 아파치 톰켓6의 JNDI DataSource 설정 문서를 보면 JNDI 리소스를 설정하는 두 가지 방법이 나온다. 하나는 모든 Context에게 보이는 Global 영역에서 리소스 지정과 다른 하나는 개별 Context 에서만 사용하도록 하는 방법.
그런데 이 문제를 해결해놓고보니 jndi 리소스의 가시성이 실제 물리적인 라이브러리 배치와는 무관한 셈이다. -_-;
사실 라이브러리를 여기저기 늘어놓는 것을 싫어하는데, 나중에 C 드라이브를 포맷하고 os 를 새로 설치할 경우 이전의 개발 환경과 달라지기 때문에 이전에 작성한 프로젝트를 열어보면 라이브러리를 못찾아서 일일이 찾아다니면서 링크 수정하는게 여간 성가신 일이 아니다.
그래서 보통은 D 드라이브를 개발 전용으로 지정하고 d:/pub_lib 에 모든 라이브러리를 몽땅 넣어둔다. 나중에 ide 들을 새로 설치해도 기존의 프로젝트 설정 파일들은 모두 d:/pub_lib 를 참조하고 있기 때문에 일이 많이 줄어든다.
이번에 오라클 jdbc 드라이버처럼 어쩔 수 없이 톰켓 디렉토리에 넣어둘 경우 이 드라이브를 포맷하고 새로 설치할 때 다시 같은 문제가 반복된다.
이 글을 남겨놓은 것도 나중에 잊어버리고 또 같은 문제때문에 시간 낭비하는 일이 없었으면 해서 남기게 된 것. (미래의 나를 위해서 ^^)
'Dev > Java' 카테고리의 다른 글
Native2Ascii.exe를 Eclipse External Tools 에 등록하기 (1) | 2009.09.19 |
---|---|
java.util.concurrent.locks.Lock 예제 (0) | 2008.07.09 |
[ null String value in Java ] null String problem (1) | 2007.12.27 |