>> Edit article
이름
제목
패스워드
<PRE>리눅스에서 자바를 쓰시는 분들이 많은 것 같습니다. 자바의다양한 기능을 리눅스에서도 맛볼 수 있다는 게 초기엔 무척신기하고 재밌는 일이었답니다. 저에겐 말이죠. ^^이제는 썬에서도 리눅스를 상당히 고려하고 있는 눈치고, 얼마전엔 jdk1.2도 리눅스용으로 포팅되었다고 합니다. 또, 아이비엠의 VisualAge for Java 2.0도 리눅스용(래드햇5.2)으로포팅되었구요. 바야흐로 자바기술과 리눅스의 만남이 본격화되고 있습니다.서론이 길었죠? ^^위와 같이 좋은 시대가 되고 있는데, 리눅스에서 아직 서블릿기술을 맛볼 수 없다면, 이게 도로 아미타불입니다. 물론, 자바웹서버 스팍용을 다운받아서 쓰실 수도 있지만요. 아파치웹서버에서 서블릿을 돌릴 수 있는 방법이 있어서 소개합니다.1. 글의 목표리눅스의 아파치웹서버에서 서블릿을 맘대로 써보자!2. 글의 목적많은 분들이 php3와 마찬가지로 서블릿을 쓰기 위해서 아파치를 재컴파일했는데, 배포본에 들어있는 아파치웹서버를 다시 컴파일하지 않고 서블릿을 쓰는 방법을 기술한다.3. 테스트환경배포본은 Accel Linux 6.0 plus입니다. 액셀이 되면, 파워,알짜도 당연히 되겠죠. (추측...)일단은 아파치웹서버가 설치되어 있는 것으로 가정합니다.4. 시나리오- 리눅스용 jdk(java development kit) 1.1.7을 설치한다.- 썬스팍용 jsdk(java servlet development kit) 2.0을 설치 한다.- JServ(서블릿 지원 아파치 모듈) 1.0을 설치한다.- JServ와 관련한 설정파일을 수정한다.- 테스트5. 준비물 다운로드- jdk:액셀plus엔 jdk1.1.7이 패키징되어 있습니다.- jsdk2.0:http://java.sun.com/products/servlet/index.html에 가시면,간단한 정보와 함께 다운로드할 수 있게 해놓았습니다.- JSverv1.0:http://java.apache.org에 가시면, 다양한 정보와 함께 다운로드할 수 있습니다.6. jdk 설치액셀plus엔 jdk1.1.7이 패키징되어 있습니다. 따라서 다음과 같이 설치하시면 됩니다.[root@free RPMS] rpm -Uvh jdk-1.1.7-v2al.i386.rpm만약 jdk가 없으면 http://www.blackdown.org에 가셔서 다운로드하시기 바랍니다. jdk의 설치방법은 README나 그곳의FAQ를 참고하십시오.(무척 쉽습니다.)참고1: 액셀에서는 /usr/lib/jdk에 설치됩니다.참고2: 다운로드받은 사용자[root@free lib] pwd/usr/lib[root@free lib] tar xvzf jdk-1.1.7v3.tar.gz[root@free lib] mv jdk-1.1.7v3 jdk클래스패스 설정은 다음절을 참조하세요.7. jsdk2.0 설치단순히 압축을 풀고 적당한 디렉토리로 옮기는 것으로 설치는 완료됩니다. 반드시 CLASSPATH에 등록을 해둬야 합니다.[root@free lib] pwd/usr/lib[root@free lib] zcat jsdk20-solaris2-sparc.tar.Z|tar xvf -[root@free lib] mv JSDK2.0 jsdk액셀엔 /etc/profile.d/jdk.sh과 /etc/profile.d/jdk.csh이 있어서 자바와 관련한 필요한 환경변수를 설정하게끔 되어 있습니다. 꽤 괜찮은 방법 같네요. 만약 없다면, 만들어놓는 게 좋을 것 같습니다./etc/profile.d/jdk.sh은 담과 같습니다.#!/bin/bash export JAVA_HOME=/usr/lib/jdktmpdir="$JAVA_HOME/bin"if [ -z "$PATH" ] ; then export PATH=$tmpdirelif [ -z `echo ":$PATH:" | grep $tmpdir` ] ; then export PATH="$tmpdir:$PATH"fi# 서블릿을 위한 클래스패스 추가tmpdir=.:$JAVA_HOME/lib:$JAVA_HOME/lib/classes.zip:/usr/lib/jsdk/lib/jsdk.jarif [ -z "$CLASSPATH" ]; then export CLASSPATH=$tmpdirelif [ -z `echo ":$CLASSPATH:" | grep ":$tmpdir:"` ]; then export CLASSPATH=$tmpdir:$CLASSPATHfi/etc/profile.d/jdk.csh은 담과 같습니다.#!/bin/cshsetenv JAVA_HOME /usr/lib/jdk#Add directories to the PATH environment variable if they aren't in it alreadyset tmpdir=$JAVA_HOME/binset test=`echo ":${PATH}:" | grep ":${tmpdir}:"`if ( ! ${#test} ) setenv PATH ${PATH}:${tmpdir}# 서블릿을 위한 클래스패스 추가set tmpdir=.:$JAVA_HOME/lib:$JAVA_HOME/lib/classes.zip:/usr/lib/jsdk/lib/jsdk.jar# Set CLASSPATHif ( ! ${?CLASSPATH} ) then setenv CLASSPATH $tmpdirelse set test=`echo ":${CLASSPATH}:" | grep ":${tmpdir}:"` if ( ! ${#test} ) then setenv CLASSPATH ${tmpdir}:${CLASSPATH} endifendif8. JServ1.0 설치다운로드받은 파일을 아무곳에서나 일단 풀고 컴파일합니다.컴파일 후 /usr/local/jserv에 설치하면 됩니다.[root@free root] pwd/root[root@free root] tar xvzf Apache_JServ_1.0.tar.gz[root@free root] cd ApacheJServ-1.0[root@free ApacheJServ-1.0] ./configure --prefix=/usr/local/jserv --with-apache-install=/usr --with-apache-conf --with-jdk=/usr/lib/jdk --with-jsdk=/usr/lib/jsdk --disable-debugging편의상 여러줄에 나누어서 썼지만 한 줄에 써야 합니다../configure --prefix=/usr/local/jserv --with-apache ~ 뭐이런식으로 말입니다.위와 같이하면 Makefile을 만들어줍니다. 잠깐 의미를 살펴보겠습니다.--prefix=/usr/local/jserv : /usr/local/jserv에 JServ1.0을 설치하겠다.--with-apache-install=/usr : apache가 /usr에 설치되어 있다.--with-apache-conf : apache의 설정을 그래로 사용한다.--with-jdk=/usr/lib/jdk : jdk가 /usr/lib/jdk에 설치되어 있다.--with-jsdk=/usr/lib/jsdk : jsdk가 /usr/lib/jsdk에 설치되어 있다.--disable-debugging : debugging을 할 수 없게 한다.[root@free ApacheJServ-1.0 ] make[root@free ApacheJServ-1.0 ] make install9. 확인/usr/lib/apache에 mod_jserv.so가 생겼으면 설치는 성공한겁니다. 거기엔 다른 모듈들도 아주 많이 있답니다.[root@free apache] ls -l mod_jserv.so-rwxr-xr-x 1 root root 202614 Jun 26 16:45 mod_jserv.so*10. 설정파일 수정하기(1차)아파치설정파일에 JServ와 관련한 사항들을 적어주어야 합니다.간편한 방법은 JServ 설정파일을 httpd.conf 뒤에 붙이는 겁니다.JServ의 설정파일은 컴파일을 한 위치에 있답니다.[root@free root] pwd/root[root@free root] cd ApacheJServ-1.0[root@free ApacheJServ-1.0] cd example[root@free example] lsHello.class Makefile.am jserv.conf jserv.properties.inHello.java Makefile.in jserv.conf.inHello.java.in example.properties jserv.logMakefile example.properties.in jserv.properties설정파일들이 굉장히 여러개 있는데요. 일단은 중요한게jserv.conf입니다.jserv.conf파일 주에서 한 줄을 수정합니다.[root@free example] vi jserv.conf################################################### Apache JServ Configuration File#################################################### Note: this file should be appended to httpd.conf# Tell Apache on win32 to load the Apache JServ communication moduleLoadModule jserv_module modules/mod_jserv.so모듈의 위치 지정 위치만 일단 바꿔주면 됩니다.다음은 jserv.conf를 httpd.conf에 붙이는 일입니다.[root@free example] cat jserv.conf >> /etc/httpd/conf/httpd.conf11. 테스트(1차)아파치웹서버를 다시 구동시키고 jserv를 테스트합니다.[root@free init.d] pwd/etc/rc.d/init.d[root@free init.d] ./httpd stop[root@free init.d] ./httpd start넷스케잎을 열고서 다음 싸이트에 접속합니다.http://localhost/jserv/반드시 맨 뒤에도 짝대기를 붙이세요.JAVA APACHE PROJECT의 페이지가 나오면 일단 성공하신겁니다.12. 설정파일 바꾸기이제부터는 완전히 노가다와 다름없는 documents읽는 것과 설정파일 수정입니다. 사실 젤 중요한 것이라고도 할수 있습니다. 설정은 누구나 자기 스타일에 맞추어서 하는 것이니, 정형화될 수는 없을 겁니다.저의 설정결과만 일단 적겠습니다.[root@free httpd] pwd/home/httpd[root@free httpd] mkdir servlets[root@free httpd] cd servlets[root@free servlets] mkdir development[root@free servlets] mkdir production[root@free servlets] pwd/home/httpd/servlets[root@free servlets] lsdevelopment/ production/[root@free servlets] cd production[root@free production] lsproduction.properties[root@free production] cd ../development[root@free development] lsdevelopment.propertiesdevelopment와 production은 서블릿들이 들어갈 디렉토리들입니다. 거기엔 development.properties와production.properties란 파일이 각각 있습니다.먼저 /home/httpd/servlets/production/production.properties파일입니다.repositories=/home/httpd/servlets/productionautoreload.classes=trueautoreload.file=trueinit.timeout=10000destroy.timeout=10000session.timeout=1800000session.checkFrequency=30000singleThreadModelServlet.initialCapacity=5singleThreadModelServlet.incrementCapacity=5singleThreadModelServlet.maximumCapacity=10담은 /home/httpd/servlets/development/development.properties파일입니다.repositories=/home/httpd/servlets/developmentautoreload.classes=trueautoreload.file=trueinit.timeout=10000destroy.timeout=10000session.timeout=1800000session.checkFrequency=30000singleThreadModelServlet.initialCapacity=5singleThreadModelServlet.incrementCapacity=5singleThreadModelServlet.maximumCapacity=10이제 httpd.conf파일을 손봐야 하는데요. 1차 수정 때에추가되었던 부분을 몽땅 지웁니다. 그리고, 다음과 같은줄을 추가합니다. Include conf/httpd.conf.jserv[root@free conf] pwd/etc/httpd/conf[root@free conf] tail httpd.conf# 아파치에서 SSL모듈을 사용하고자 한다면 주석을 삭제한후 httpd.conf.ssl를# 설정하면 된다.## Include conf/httpd.conf.ssl## 아파치에서 Jserv모듈을 사용하고자 한다면 주석을 삭제한 후 httpd.conf.jserv를# 설정하면 된다.#Include conf/httpd.conf.jservhttpd.conf.jserv를 /etc/httpd/conf에 만듭니다. 내용은 다음과같습니다.LoadModule jserv_module modules/mod_jserv.soApJServManual offApJServProperties /etc/httpd/conf/jserv.propertiesApJServLogFile /var/log/httpd/jserv.logApJServDefaultProtocol ajpv11ApJServDefaultHost hancom.left.com <-- 자신의 호스트이름을 넣으세요.ApJServDefaultPort 8007ApJServSecretKey DISABLEDApJServMount /development /developmentApJServMount /production /productionApJServMountCopy on<Location /jserv/> SetHandler jserv-stat;us order deny,allow deny from all allow from localhost 127.0.0.1 hancom.left.com 200.0.0.2 <-- 잔신의 아이피,호스트</Location>같은 디렉토리 /etc/httpd/conf에 jserv.properties파일을 담과같이 만듭니다.wrapper.bin=/usr/lib/jdk/bin/javawrapper.class=org.apache.jserv.JServwrapper.classpath=/usr/lib/apache/ApacheJServ.jarwrapper.classpath=/usr/lib/jsdk/lib/jsdk.jarport=8007zones=production,developmentproduction.properties=/home/httpd/servlets/production/production.propertiesdevelopment.properties=/home/httpd/servlets/development/development.propertiessecurity.maxConnections=50security.allowedAddresses=127.0.0.1,200.0.0.2 <-- 자신의 아이피를 적으세요.security.authentication=falsesecurity.challengeSize=5log=falselog.file=jserv.loglog.timestamp=truelog.dateFormat=[dd/MM/yyyy HH:mm:ss:SSS zz]log.channel.servletLog=truelog.channel.init=truelog.channel.terminate=truelog.channel.serviceRequest=truelog.channel.authentication=truelog.channel.requestData=truelog.channel.responseHeaders=truelog.channel.signal=truelog.channel.exceptionTracing=truelog.channel.servletManager=true휴우~~~~! 설정 다 끝났네요. 굉장히 어려운 것처럼보이죠. 사실 그렇게 어렵지는 않았습니다. 왜냐하면,/root/ApacheJServ-1.0/example 밑에 있는 설정파일들을 조금만 수정해서 쓰면 되거든요. ^^13. 테스트(2차)전통의 예제 프로그램인 Hello를 돌릴 차례입니다. 작성해도 되구요. 게으르신 분들은 /root/ApacheJServ-1.0/example밑에 있으니 카피하면 되겠죠![root@free development] pwd/home/httpd/servlets/development[root@free development] lsHello.class Hello.java development.properties먼저 아파치데몬을 다시 시작하십시오.[root@free init.d] pwd/etc/rc.d/init.d[root@free init.d] ./httpd stop[root@free init.d] ./httpd start넷스케잎을 열고 http://hancom.left.com/development/Hello에 접속해보세요. 물론 hancom.left.com은 자신의 호스트이름으로 바뀌어야겠죠.Congratulations, Apache JServ is working!야~~~ 좋타~~~~!!!http://hancom.left.com/production/Hello에 접속해보세요.역시 hancom.left.com은 자신의 호스트이름이어야 합니다.Not Found그럼 이번엔 위의 Hello.class를 /home/httpd/servlets/production에 카피하고나서 재차 http://hancom.left.com/production/Hello에접속해보세요. 짜잔~~~Congratulations, Apache JServ is working!야~~~ 좋타~~~~!!!감이 좀 잡히시나요.기타 자세한 설정은 Documents를 더 읽어봐야 할 것 같습니다. 어제 듬성듬성 읽으면서 설정한거라 미숙한 부분이많습니다.14. 결론아파치에서도 서블릿을 자유자재로 돌릴 수 있으니 넘 좋네요. 앞으론 JServ모듈도 php3모듈처럼 배포판에 추가되었으면 하는 바램입니다.</PRE>15. 참고문헌- JServ1.0 문서들- 자바랜드의 이현찬님의 강좌글들 (http://www.idcsoft.co.kr/~java)항상 행복하세요!!!
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved