|
Tomcat 4.0.x를 기준으로 작성하였습니다.
* CLASSPATH 란?
CLASSPATH 를 알기 위해서 우선 class 와 path 에 대해서 짚고 넘어 가도록 하겠습니다.
- CLASS : 자바로 코딩을 할때 보통 AboutJsp.java 와 같이 만들게 됩니다. 그리고 그걸 javac 를 이용해서 컴파일을 하면 자바 바이너리 파일 즉, class 파일이 생성됩니다. 이러한 class 파일은 직접 실행( # java AboutJsp 와 같이 커맨드 라인에서 직접) 할수도 있고, 다른 프로그램에서 그 class 파일을 가져다가(상속이나 특정 목적에 의해서 import 하여.. ) 사용할수도 있습니다. 어째든 뭐뭐.java 파일을 컴파일한 것이 class 파일입니다.
- PATH : PATH 는 경로(위치)를 뜻합니다. 예전 도스를 사용해 보신 분들이 무엇인지 아시겟지요? 유닉스(리눅스)에서도 현재까지 쓰이고 있는데요, path 라는 환경변수를 하나 설정하고 이곳에 디렉토리를 나열해(쉘 마다 나열방식은 약간 다름) 놓은후, 특정 명령어를 프롬프트에 입력하게되면 그 명령어를 path 에 나열된 디렉토리에서 찾아서 실행하게됩니다. (나열된 가장 앞 디렉토리 부터 검색) 따라서 특정 명령어를 실행시키 위해서 그 파일이 있는 디렉토리 까지 움직일 필요는 없게 됩니다.
결국 CLASSPATH 라는 것은 CLASS 파일이 저장되어 있는 디렉토리의 나열을 말하는 것이죠. 자바 프로그램에서 어떤 CLASS 파일을 요청했을때 컴파일러는 CLASSPATH 에 지정되어 있는 디렉토리에서 해당 CLASS 파일을 찾으려 하게되는 것입니다..
아뭏튼 CLASSPATH 는 CLASS 파일이 저장된 디렉토리의 나열 이라는것! 이것만 기억해 두시고 넘어 가도록 합시다
* CLASSPATH 설정하기
CLASSPATH 는 일반 PATH 와는 달리 디렉토리 외에 파일을 지정할수도 있는데, 지정할수 있는 파일의 종류는 *.jar, *.zip 등이 있습니다. jar 파일은 class 파일을 묶어서 압축해 놓은 파일로, 이 파일을 CLASSPATH 에 추가 하게 되면 그 파일안에 class 파일을 모두 사용할수 있게 됩니다. 정리해서 말하자면 classpath 에는 class 들이 저장되어 있는 디렉토리와, 그러한 class 파일을 묶어 놓은 jar 혹은 zip 파일등을 지정할수 있는 것입니다. 한가지 주의 할점은 classpath 에 지정된 디렉토리에 jar 파일을 놓다 둔다고 해서 사용가능해지지는 않는 다는 것입니다. jar 파일은 반드시 classpath 의 한 구성요소 이어야만 합니다.
윈도우에서는.... 아래와 같은 순서로 추가하시면 됩니다.
1. 내컴퓨터 등록정보 -> 고급 -> 환경변수
2. 새로만들기 -> 변수이름에 CLASSPATH를 변수 값에 원하는 CLASSPATH 등록
다음으로 리눅스(유닉스)에서는 로긴 이니셜 파일에 추가하면 되는데, 사용하는 각 쉘별로 설정하는 파일이 다릅니다.
먼저 리눅스에서 가장 일반적으로 사용하는 bash 의 경우(리눅스의 default 쉘은 bash이다. 특별한 설정이 없었다면 bash라고 생각하자) .bash_profile 에 추가하면 됩니다. "."(쩜)으로 시작하는 파일은 숨긴 파일로 'ls -al' 명령으로 파일의 존재[?]를 확인할수 있습니다. 수정하는 방법은 처음 로긴한 위치(홈디렉토리)에서
$ vi ./.bash_profile
와 같이 하여 파일을 열고 아래와 같이 한줄을 추가 합니다.
export set CLASSPATH=.:$CLASSPATH:/usr/local/jdk1.3.1/lib/mm.mysql.jar:/usr/local/classes
vi에 익숙하지 않다면 아래와 같이 하십시요
$ cat export set CLASSPATH=.:$CLASSPATH:/...sql.jar:usr/local/classes >> ./.bash_profile
이렇게하면 bash_profile 의 가장 아랫에 한줄로 추가되게 됩니다.
다음은 각 쉘별 이니셜파일 입니다.
- Bourn Shell : .profile
- Korn Shell : .profile
- C Shell : .login
이렇게 설정을 한루 다시 로그인 한후
$ echo $CLASSPATH
라고 치면 현재 설정되어 있는 CLASSPATH 를 보실수 있습니다.
* 톰캣에서의 CLASSPATH
일반적으로 이러한 환경을 설정 하고난 후에 특정 어플리케이션을 실행하면 그 환경 변수를 그대로 받아서 사용하게되는 것이 일반적인 원리 입니다. 어떨때는 이러한 환경이 설정되어있지 않으면 실행자체를 거부하는 것들도 있습니다.
그런데 톰캣은 이러한 기존의 CLASSPATH 를 완전히 무시해 버립니다. (바로 위에 까지 열심히 읽으신 분들.. 허무하시죠? ^^;;; ) 따라서 CLASSPATH 를 따로 설정을 해주어야 하는데요..
...tomcat/bin 의 디렉토리를 보면 startup.sh 라는 스크립트 파일이 있는데, 이것이 바로 톰캣을 시작하는 스크립트 이지요. 하지만 실질적으로 사용되는 스크립트 파일은 catalina.sh 입니다. vi 또는 익숙하신 에디터로 이 파일을 수정하도록 하겠습니다. 자~알 살펴 보시면 CLASSPATH에 대한 설정 부분이 있을 겁니다. 여기 중간쯤에 CLASSPATH를 추가합니다. 저는 아래와 같이 85번째 줄에 추가 했습니다.
catalina.sh 수정
윈도우에서는 catalina.bat 라는 파일입니다. 역시 비슷한 위치(조금더 위에)에 아래와 같이 추가 합니다.
set CLASSPATH=%CLASSPATH%;c:\jdk1.3\lib\mysql_2.0.11
* 특별한 디렉토리! WEB-INF
이번엔 조금 특별한 디렉토리인 WEB-INF 디렉토리에 대해서 알아 보도록 하겠습니다. WEB-INF 디렉토리에는 몇가지 특별한 기능이 있는데(web.xml을 이용한..) 그중에서 아래의 두가지 디렉토리에 대해서 알아 보도록 하겠습니다.
- WEB-INF/classes
- WEB-INF/lib
1) WEB-INF/classes
이 디렉토리는 많이들 보셨으리라 생각됩니다. servlet 을 작성할때, JavaBeans를 작성할때 이곳에 컴파일된 class 파일을 넣어두고 servlet 혹은 Beans 를 호출하여 사용하게 됩니다. 이렇게 특별히 CLASSPATH 에 지정된 디렉토리에 있지 않더라도 이곳에 넣으면 바로 사용이 가능하게 됩니다. servlet, beans 가 아니래도 ~~.class 로 되어 있는 파일들은 모두 이 디렉토리에 넣고 바로 사용이 가능합니다. 예를 들자면 JDBC 드라이버 같은 경우도 이곳에 압축을 풀어서 넣어 두면 곧바로 사용이 가능해 지는 것이지요.
2) WEB-INF/lib
JSP 에 익숙하신 분들이라도 이 디렉토리는 생소하실 분들이 많으리라 생각됩니다. classes 와는 달리 이곳에는 jar 파일을 넣어 둘수 있는 디렉토리입니다. 즉, 이곳에 뭐뭐.jar 파일을 넣어두면 이파일을 classpath 에 추가한 것과 마찬가지로 사용이 가능해 진다는 것이죠. 신기하죠? ^^ 단점이라면.. 웹서버를 재시작해야 한다는것이죠.(서블릿컨테이너마다 다르나 일반적으로는 재시작 해야 합니다.)
|
Tip - import
|
|
아래와 같은 구조로 class 파일이 배치되어 있다고 할 때
WEB-INF/classes/First.class
|
*--/com/Second.class
이경우 보통 Second.class 를 사용하기 위해서 우리는 아래와 같이 import 합니다.
import com.*;
그렇다면 First.class 를 어떻게 import 해야 할까요? 답은 아래와 같습니다.
import First;
어떤 사람들은 가장 위에 있으니 import 를 하지 않아도 되는것이 아닌가 하고 생각하시는 분도 계신데, 이때는 반드시 개별적으로 import 를 해주어야 정상적으로 작동합니다.
JDK 1.4부터는 디폴트패키지의 import가 금지 되었습니다. 즉, import First; 는 에러입니다. 반드시 import com.Second; 와 같은 형태가 되어야 합니다.
|
지금까지 CLASSPATH 에 대해서 알아 보았습니다. 아무쪼록 이글을 통해 CLASSPATH 설정하는데에 불편함이 없기를 바랍니다.
|