JSDK 및 JServ의 설치 및 환경 설정

 김진덕 hexcode@mail.hanyang.ac.kr (한양대 리눅스 사용자 모임)
servlets.html  25 Jan 2000, ver0.0.1

1. JSDK 설치 및 환경 설정
2. Apache에 JServ 모듈 붙히기
3. 서블릿 테스트 하기
4. JServ 환경 설정

 1. JSDK (서블릿 개발킷) 설치 및 환경 설정

 서블릿 개발 킷은 선 마이크로 시스템즈 사의 홈페이지에서 구할수 있습니다. 아직 리눅스 전용의 JSDK는 없고 솔라리스것을 쓰셔야 됩니다. 크게 문제는 없습니다. http://java.sun.com/prducts/servlet/index.html 입니다.
http://java.sun.com/prducts/servlet/download.html은 바로 다운 받는 곳입니다. JSDK2.0은 맨 아래에 있습니다. . 플랫폼을 선택(유닉스)해 주시고 그다음 화면에 라이센스에 동의 버튼을 클릭하면 바로다운 받을수 있습니다.

JSDK는 최근 2.1까지 나왔지만 리눅스에서는 아직 2.0을 쓰셔야 됩니다. JSDK2.1은 아직까지 지원하는 웹서버가 솔라리스 뿐이 없는 것같습니다. 리눅스 아파치 서블릿 모듈은 아직 JSDK 2.0만 지원합니다. 용량은 400KB정도 됩니다.

 그럼 JSDK를 설치해 봅시다.

 jsdk20-solaris2-sparc.tar.Z파일이름에도 알수있듯이 솔라리스 스팍 버전 입니다. 그러나 상관 없습니다. 리눅스에서도 잘 됩니다. 저는 역시 / 에 깔았습니다.

#tar -xvzf jsdk20-solaris2-sparc.tar.Z 그러면 /JSDK2.0 이란 디렉토리가 생 깁니다.

이것도 역시 사람들이 가장 많이 쓰는 디렉토리가 /usr/local/JSDK이므로 심볼릭 링크를 걸어 둡니다.

#ln -s /JSDK2.0 /usr/local/JSDK

이러면 일단 설치는 다 되었습니다. 그럼 JSDK에 대한 환경 설정 작업을 해봅시다. 저는 본어겐스트 쉘(bash)을 쓰므로 /etc/profile 에 패스를 걸었답니다.

각자의 쉘에 따라환경 설정 파일에 해주시면 됩니다.

export PATH="$PATH:/usr/X11R6/bin:/usr/local/java/bin:/usr/local/JSDK"

이렇게 JDK의 패스와 /usr/local/java/bin JSDK의 패스 /usr/local/JSDK를 추가를 했습니다. 또한 자바의 환경변수를 정해야 되는데 역시 /etc/profile 아무곳에 다음과 같은 라인을 추가 시켜 주면 됩니다.

export JAVA_HOME="/usr/local/java"
export CLASSPATH=".:/usr/local/JSDK/lib/jsdk.jar" 

이렇게 해주어야 서블릿으로 작성된 것을 컴파일 할때 CLASSPATH를 통해 서블릿에 관련된 클래스 파일(javax.servlet.*)들이 import되어 컴파일이 됩니다. 위에 경우에는 JDK환경과 JSDK환경을 같이 설정 하였습니다. 어자피 서블릿 소스를 컴파일 하실려면 JDK가 필요 합니다. 위에 설정 파일은 서블릿 동작에서는 문제가 없으나 서블릿 소스를 편집하고 재 컴파일 할때 JDK 에서 서블릿 클래스 파일이 존재 하지 않아 클래스 파일을 찾을수 없다는 에러가 나므로 위와 같이 해주시면 서블릿 개발 킷에 있는 클래스 파일들의 위치를 알게 되므로 컴파일이 되는 겁니다.

C와 비슷하게 생각하면 헤더파일 위치를 어디 인지 알려주는 개념과 비슷합니다. C에서 헤더파일을 인클루드(include) 시키는데 자바에서는 비슷한 개념으로 import라는 예약어를 씁니다. 그러나 C와 완전히 똑같은 개념은 아닙니다.

만약 JDK1.1.x 버전대를 사용하신다면 다음과 같이 해주셔야 됩니다.

export JAVA_HOME="/usr/local/java"
export CLASSPATH=".:$JAVA_HOME/lib/classes.zip:/usr/local/JSDK/lib/jdsk.jar"

2. Apache에 JServ 모듈 붙히기

Apache JServ 모듈은 자바 아파치 프로젝트 사이트 (http://java.apache.org) 에 가시면 있습니다. 직접 받으실려면
http://java.apache.org/jserv/dist 에 들어가면 버전별로 여러 가지가지 형태가 있습니다. 소스형태 및 rpm형태 주로 두가지 행태가 있습니다. 소스를 구해서 직접 컴파일 하셔도 되는데 굉장히 복잡한 과정을 거칩니다. 그래서 저는 이과정에 대해서는 자신이 없어서 설명을 못드리겠습니다.


그런데 다행이 래드햇 6.0및 5.2용으로 rpm파일을 제공합니다.

저는 ApacheJServ-1.1-b2_RH6x.i386.rpm 파일을 받았습니다. 이것은 깔기만 하면 자동으로 아파치에서 서블릿 모듈 올려주고요 환경 설정도 자동으로 해줍니다.

ApacheJServ-1.1-b2_RH6x.i386.rpm 형태의 파일을 받았으면 다음과 같은 명령으로 설치를 하시면 됩니다.
#rpm -Uvh ApacheJServ-1.1-b2_RH6x.i386.rpm

이렇게 하면 쫙 깔리면서 우리가 다른 것은 손대줄 것은 거의 없습니다.

자동으로 httpd.conf파일 수정해서 모듈 올려주고, 기타 서블릿에 관련 설정파일 생성 및 세팅을 해 줍니다. 소스 형태라면 이것을 직접 컴파일 하고 아파치에 모듈 설정 해주고 하는 작업이 굉장히 복잡하니다. 복잡한 과정을 좋아하시는 분은 소스파일에 나와 있는 설명파일을 보시면서 직접 하시면 됩니다. rpm 형태는 완벽하게 설정을 해주기 때문에 문제가 없이 동작 될 것 입니다.

우리가 확인을 해야 될것은 만약에 JDK1.2.2버전을 다른 디렉토리에 깔 았을 경우엔 다음 파일을 수정해 주셔야 됩니다. 자바 가상머신을 찾으 므로 새로 생성된 서블릿 모듈 설정 파일중에 하나인 /etc/httpd/conf/jserv/jserv.properties 을 열으셔서 다음과 같은 항목을 확인 합니다. 자바 가상머신이 위치한 곳을 설정 해주는 것입니다.
wrapper.bin=/usr/local/java/bin/java

위에 경우엔 자바 가상머신(java) /usr/local/java/bin/java에 있는 경우입니다. 설정 값이 적용되기 위해서는 리눅스 서버를 재부팅하거나 아니면 아파치 데몬을 죽였다 다시 시작하면 당장 서블릿이 동작합니다. 아마 저와 같이 했다면 수정할것은 거의 없습니다.

3. 서블릿 테스트 하기

서블릿이 동작되는지 확인하실려면 예제 서블릿 파일이 있으니 예제 파일 하나를 실행 해보시면 됩니다. 웹 브라우저를 띄우시고 아래와 같이 해주시면 됩니다.

http://localhost/servlets/IsItWorking 을 치시면 잘 동작되고 있다는 html문서를 뿌리면 일단 성공 입니다.

신기하게도 자바는 보통 느릴 것 이라고 생각해 왔는데 놀랄 만큼 처리 속도가 무척 빠릅니다. 그리고 한번 실행 시킨 서블릿 바이너리들은 그다음 부터는 메모리에 계속 남아 있는 것인지? 아닌지는 잘 모르겠지만 아무튼 무척 빠르게 동작 됩니다.

/home/httpd/servlets이란 디렉토리가 생성이 되었는데 이곳에 자바 서블릿 바이너리 예제 파일들이 위치하고 있습니다. 당장은 IsItWorking.class 파일 뿐이 없는 것 같습니다. 서블릿 개발킷 디렉토리에는 더 많은 예제 파일 들이 있습니다. JSDK 디렉토리 내에 있는 examples 밑에 있는 class 파일들을 /home/httpd/servlets 디렉토리 밑에다 옮겨서 해당 class파일 이름을 위와 같이 치시면 됩니다. 만약 HelloWorldExample.class 파일이라면

http://localhost/servlets/HelloWorldExample 이라고 웹 브라우저에서 치시면 동작되고있는 것을 확인할수 있습니다.

또한 리눅스에 다음과 같은 프로세스들이 여러개 떴는지 확인으로서 동작이 제대로 되고 있는지 잘 알수가 있습니다.
#ps -aux

nobody 604 0.0 8.1 74092 7780 ? s 19:56 0:0 /jdk1.2.2/bin/i386/native_threads/java org.apache.jserv...
.
.

위와 같은 프로세스들이 여러개 떠 는지 확인으로서 알수 있습니다. 시스템 환경이나 JDK디렉토리 환경에 따라서 각각위에 프로세스 값들은 틀리므로 너무 신경 안쓰셔도 됩니다. 또한 선 마이크로 시스템즈의 JDK를 이용하시는 분들은 프로세스가 한 개만 뜹니다.

자바에서 바이너리는 모두 *.class로 끝납니다.

/etc/httpd/conf/jserv/jserv.conf 에는 서블릿에 대한 설정 파일입니다.

당장 서블릿이 동작된다는 것 만으로도 성공 한것 같네요.

4. JServ 환경 설정하기

 JServ를 설치하신뒤엔 ApacheJServ 설치로 인해 이것이 아파치 설정 파일에 어떠한 설정을 해 놨는지 간단히 알아 보겠습니다.

아파치 자바서블릿 모듈을 RPM 형태로설치 했으면 다음과 같은 디렉토리에 새로운 파일들이 생깁니다.

/etc/httpd/conf/jserv/jserv.conf
/etc/httpd/conf/jesrv/jserv.properties
/etc/httpd/conf/jserv/zone.properties
위에 세개의 파일들은 서블릿을 구성하는 설정 파일들 입니다.

/etc/httpd/conf/jserv/jserv.secret.key 서블릿 보안키 파일 
/var/log/httpd/mod_jserv.log 서블릿 로그 파일 (에러가 생길때 이 파일을 보시면 해결책을 알 수 있습니다.)
/etc/httpd/modules/ApacheJServ.jar 서블릿을 구현한 클래스 파일
/home/httpd/classes/servlet-2.0.jar JSDK 클래스 파일
/home/httpd/servlets/IsItWorking.class 예제 파일
/home/httpd/servlets/IsItWorking.java 예제 파일 소스
/usr/doc/ApacheJServ-1.1/ 밑에는 아파치 자바서블릿 솔류션에 대한 문서파일 들이 존재 합니다.
 
그럼 하나 하나 각각의 역활에 대해서 설명을 드리겠습니다. 소스로 설치 했다면 아마 위에 같은 파일들을 구성이 다소 틀려질수가 있습니다.  
rpm형태로 설치 하셨다면 아파치 환경 설정 파일은 /etc/httpd/conf/httpd.conf을 자동으로 수정해 줍니다.
 
그 파일을 열어 보시면 아래와 같은 문장이 추가 되었음을 알수 있을 것입니다.  
<IfModule mod_jserv.c>
             Include /etc/httpd/conf/jserv/jserv.conf
</IfModule>

 httpd.conf파일에 jserv.conf 구성파일을 인클루드 시킨 것입니다.

서블릿에 관한 기본 설정은 jserv.conf파일을 통해서 하면 됩니다. 그럼 /etc/httpd/conf/jserv/jserv.conf 파일 구성을 보면 여러 설정 부분이 있는데 모두다 건들일 필요는 없고 그냥 몇가 중요한 설정은 서블릿 특성을 담은 프로퍼티 파일 및 서블릿 마운트, 서블릿 로그 파일 위치등을 눈여겨 보시면 됩니다. 대부분 기본 설정으로 잘 되어 있으니 그 값을 쓰시면 됩니다. 자신이 원하고자 하는 디렉토리에 위치 시키고자 한다면 고쳐 주시면 됩니다.
다음은 중요한 파일들의 위치들의 기본 설정 값 입니다.

서블릿 프로퍼티 파일의 위치
ApJServProperties /etc/httpd/conf/jserv/jserv.properties
 
서블릿 로그 파일의 위치
ApJServLogFile /var/log/httpd/mod_jserv.log
 
서블릿 보안키 파일의 위치
ApJServSecretKey /etc/httpd/conf/jserv/jserv.secret.key
 
서블릿 마운트 파일
ApJServMount /servlets /root
ApJServMount /servlet /root

이부분이 실험도 잘안되고 이해도 잘 안가지만 서블릿 존을 가상 디렉토리에 마운트 시키는 설정 부분이라고 합니다. /root에 서블릿 파일들이 있으면 /servlets 디렉토리로 가상 마운트 되어 /root 이하에 있는 서블릿들이 호출 된다고 합니다. 그런데 잘 안되네요.
 
제가 부족한 실력으로 설명을 하는 것 보단 설정 파일내에 자세한 예제와 설명주석들이 있으니 그 주석등을 보시면 이해가 쉬울 것입니다.
 
다음으로  /etc/httpd/conf/jserv/jserv.properties 구성 파일을 봅시다.
 
몇가지 중요한 설정 부분만 보면 만약에 자바 가상 머신 (java) 파일 위치가 다른 곳에 있다면 다음을 수정해야
될 것입니다.
  wrapper.bin=/usr/local/java/bin/java

JDK 이하 bin디렉토리에 자바 가상머신 실행(java)파일이 있습니다. 다 알다 시피 자바 바이너리(클래스 파일들)는 직접 실행이 안되고 자바 가상머신을 통해 실행이 된다는 것은 알고 계시지요. 자바 바이너리를 실행하기 위해서 가장 중요한 파일입니다.
   
다음 세줄은 자바 JDK의 클래스 파일 위치와 JSDK의 클래스 파일 위치 들입니다.
  wrapper.classpath=/usr/local/java/lib/classes.zip           
  wrapper.classpath=/etc/httpd/modules/ApacheJServ.jar        
  wrapper.classpath=/home/httpd/classes/servlet-2.0.jar           

그런데 위에 보면 자바 아파치 모듈 설치시 같이 딸려 오는 서블릿 클래스 파일을 쓰고 있네요. 상관 없습니다. 자바에서는 의존하고 있는 클래스 파일이 컴파일시 import되었을때 실행시 같이 있어야 실행이 됩니다. 당연히 서블릿 바이너리들은 서블릿 클래스파일 들을 필요로 합니다.

새로 설치한 JSDK의 클래스 파일들 쓰고 싶다면 다음과 같이 수정합니다.
 wrapper.classpath=/usr/local/JSDK/lib/jsdk.jar로 변경한다.

솔직히 자바 서블릿 바이너리를 실행 만 한다면 JSDK은 필요가 없습니다. 그러나 우리는 서블릿을 직접 만들고 컴파일도 해야 되기 때문에 JDK, JSDK가 필요한것 입니다.

다음은 서블릿 존 등록에 관련된 설정 값 입니다. 여기서 이름이 ApJServMount에서 사용했던 존이름과 동일하다는 것을 알수 있습니다.

 root.properties=/etc/httpd/conf/jserv/zone.properties

마지막으로 /etc/httpd/conf/jserv/zone.properties 파일은 그냥 손댈 필요가 없는 것 같군요.

이것으로 아파치 서블릿 모듈의 기본 환경 파일 내용에 대해서 써봤습니다. 자세하지는 못했지만 그래도 이정도면 충분 합니다. 국내 자료가 부족한 실정이라서 다음 이글이 버전업 될 때는 더욱더 자세한 내용을 추가하겠습니다.