잘되어 있는 사이트를 포스팅 해왔다.
Tomcat Web application 만들기
먼저, 웹 루트를 어디로 정할 것인가?
(아파치나 톰캣 자체가 static html을 바라보는 웹 웹루트)
톰켓이 기본적으로 보고 있는 루트 컨텍스트는 webapps/ROOT 이다.
server.xml 내용을 보면
- 96: <Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
와 같이 appBase는 ${catalina-home} 밑의 상대경로를 인자로 받으며,기본적으로 보안과 context의 통일적인 적용을 이유로 컨텍스트의 루트는 ROOT 디렉토리 밑이 됩니다.
따라서, 톰켓이 설치가 되면 웹루트는 ${catalina-home}/webapps/ROOT 가 된다.
(위의 과정대로 설치했다면 우리 시스템에서는 /usr/local/tomcat/webapps/ROOT 가 된다)
이를 3가지 형태로 변경해 사용할 수 있다.
1. webapp 자체를 웹루트 디렉토리로 만들고 싶을 때,
단지, <Host> 태그 내에 아래와 같은 컨텍스트를 추가하면 됩니다.
<Context path="" docBase="." reloadable="true"/>
사실 컨텍스트는 더 많은 옵션이 있으나 여기는 최소한의 사항만 적었습니다. 실서버에 적용할 때는 log 부분도 신경을 써주셔야 합니다. 더 자세한 사항은 웹을 검색해 보시기 바랍니다.
2. webapp/test/ROOT를 웹루트 디렉토리로 만들고 싶을 때,
- 96: <Host name="localhost" appBase="webapps/test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
3. /home/dev/appName 을 웹루트 디렉토리로 만들고 싶을 때
- 96: <Host name="localhost" appBase="/home/dev/appName" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
- <Context path="" docBase="." reloadable="true"/>
</Host>
또는,
- 96: <Host name="localhost" appBase="/home/dev"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="mywebappdir" reloadable="true"/>
</Host>
Context 를 빼먹으면 ROOT를 자동으로 웹루트로 쓴다.
3번의 설명은 Host의 appBase 경로를 다른 곳으로 돌린 경우에 해당한다.
이러한 경우 다음 항목인 " 별도의 디렉토리를 appBase로 잡을 경우 설정" 내용을 참고하여 진행해야 한다.
우리 시스템(2008년8월 개발서버)은 3번과 같이 별도의 경로를 web, app Base디렉토리로 잡고 진행한다.
p.s.> 톰켓 5.0부터 추가적인 context는 server.xml에 추가하지 않고,
각 웹어플리케이션 디렉토리 별로 META-INF 밑에 context.xml을 추가하게 됩니다.
웹루트를 appBase와 같이 하려면 이의 설정을 server.xml에서 설정해도 무방한 것 같습니다만,
webapps를 루트로 쓰는 것은 특별한 경우가 아니면 지양하는 게 좋으며,
꼭 필요하다면 apache의 redirect를 쓰는 방법 등으로 해결할 수도 있습니다.
별도의 디렉토리를 웹 컨텍스트 루트로 잡을 경우 설정과정
- <html>
<head><title>TEST-INDEX</title>
<body>
<h1>INDEX</h1>
</body>
</html>
톰캣 관리자 화면에서 새로운 어플리케이션이 보여지게 하려면 TOMCAT_HOME /work/Catalina/호스트명(localhost)/{컨텍스트명}test.xml 파일을 아래와 같이 만들어 넣으면
- <?xml version='1.0' encoding='utf-8'?>
<Context path="/test"
docBase="/media/disk/webapps/test"
debug="0"
reloadable="true"
crossContext="true"
/>
톰캣 관리자 화면에서 확인이 될 수 있다.
즉, 호스트 밑에 컨텍스트명과 동일한 컨텍스트 xml 파일을 넣으면 된다는 것이지만, 런타임에만 적용되므로 환경설정에 완전히 적용하기 위해선 컨텍스트 설정에 관한 자세한 설정은 Tomcat 6 컨텍스트 설정방법 을 참고한다.
TOMCAT_HOME : 톰캣 설치 디렉터리
1. 도메인으로 분류하는 방법
TOMCAT_HOME\conf\server.xml 을 열면 기본적으로 하나의 Service 엘리먼트가 있고
그 하위에 Engine 엘리먼트가, 또 그 하위에 아래와 같은 하나의 Host 엘리먼트가 있다.
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
아래와 같이 추가하려는 도메인으로 Host 엘리먼트를 하나 더 추가한다.
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="test.sisinfo.com" appBase="/media/disk/webapps/test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
appBase는 이 컨텍스트의 물리적 영역이 되겠다.
물론 실제의 물리적인 디렉터리도 아래와 같이 필요하다.
/media/disk/webapps/test/ROOT
/media/disk/webapps/test/ROOT/WEB-INF
WEB-INF의 web.xml등은 TOMCAT_HOME/webapps/ROOT/WEB-INF에서 복사한다.
/media/disk/webapps/test/ROOT 디렉터리는 이 컨텍스트의 루트 디렉터리로 작동한다.
여기서 test.sisinfo.com은 추가하려는 도메인이 되겠으며,
실제로 도메인을 보유하지 않고 개발 PC에서 작업하는 경우,
C:\Windows\system32\drivers\etc\hosts 파일을 열고
마지막 줄에 다음을 추가한다.
192.168.10.105 test.sisinfo.com
이제 웹브라우저를 열고 [test.sisinfo.com:포트번호]에 접속하면 된다.
만일 /media/disk/webapps/test/ROOT 가 아닌 /media/disk/webapps/test 를 룰트 디렉터리로 사용하고자 하는 경우에는
server.xml을 다음과 같이 작성한다.
<Hostname="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="test.sisinfo.com" appBase="/media/disk/webapps/test"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<context path="" docBase="/media/disk/webapps/test"></context>
</Host>
2. 포트 번호로 분류하는 방법
톰캣에서도 MS의 IIS와 같이 포트 번호에 따라 호스팅하는 것이 가능하다.
TOMCAT_HOME\conf\server.xml 을 열고 아래와 같이 Service 엘리먼트를 추가한다.
<Service name="testdomain">
<Connector port="8090" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="testdomain" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="C:\testdomain"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<context path="" docBase="C:\testdomain"></context>
</Host>
</Engine>
</Service>
Service 엘리먼트의 name 속성은 추가하려는 컨텍스트의 이름이 되겠다.
첫 Connector 엘리먼트의 port 속성은 사용하려는 포트 번호를 넣으면 된다.
Host 엘리먼트와 context 엘리먼트, appBase에 대한 물리적 경로 생성은 1항의 설명과 같다.
이제 웹브라우저를 열고 [localhost:포트번호]에 접속하면 된다.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
아파치와 연동없이 톰캣만으로도 하나의 IP로 다수의 웹사이트를 운영하는 것이 가능하다.
(아파치와 톰캣을 연동하는 방법에 대해서는 차후에 자세히 올리도록 하겠다)
특히 개발자의 경우 여러개의 프로젝트를 개발하거나 테스트하고자 할 때 웹사이트를 여러개 운영해야한다. 다수의 웹 사이트를 세팅하는 방법은 크게 2가지가 있다.
가상호스트를 이용하는 방법은 도메인을 이용하여 실제로 서비스를 운영하는 경우가 아니면 개발자에겐 별 의미가 없다. 여기서는 두번째 방법인 IP 어드레스의 포트를 이용하는 방법에 대해서 설명하겠다. (바로가기 : 톰캣에서 가상 호스트를 이용하는 방법)
우선 설치 환경은 다음과 같다.
- O/S : Windows XP (난 아직 리눅스를 잘 모른다. 비슷하겠지만 테스트해보지 않았다)
- Tomcat 6.0 (정확히는 6.0.10) : 다운로드
설명의 편의를 위해 톰캣의 설치 디렉토리는 'TOMCAT_HOME' 으로 표기할 것이다. 참고로 내 경우는 C:\Server\Tomcat6.0 이다.
설정하는 방법은 간단하다. /TOMCAT_HOME/conf/에 있는 server.xml 파일만 수정하면 끝이다. server.xml의 쓸데없는 주석부분을 다 없애고 핵심부분만 남겨놓으면 아래와 같다.
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
우선 빨간색으로 표시한 부분만 이해하고 넘어가도 상관없다.
Connector port="8080"은 HTTP로 넘어오는 포트를 지정하는 것이다. 톰캣의 기본 포트가 8080인 이유가 여기에 있다. 따라서 8080 대신 기본 80포트를 사용하고 싶다면? 바로 이 부분을 port="80"으로 바꾸어주면 된다.
다음, Host 지시어의 appBase="webapps" 는 웹어플리케이션(웹사이트)의 위치를 나타낸다. appBase="./webapps"와 같은 의미다. 실제 위치는 TOMCAT_HOME/webapps이다. 물론 "d:/weapps/myweb1" 과 같이 절대경로로 지정하는 것도 가능하다.
그럼 웹사이트를 하다 더 추가하고 싶다면? 위의 <Service>...</Service>를 하나 더 만들어 버리면 된다. 위의 코드를 복사한 다음 server.xml 에 추가한다. 그리고 빨간색으로 표시한 부분만 수정하자.
<Service name="Catalina2">
<Connector port="9090" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="d:/webapps/myweb2"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
다른 웹어플리케이션을 돌리기 위해 서비스를 하나 더 추가한 것이다.
port="9090" 은 새로 추가하고 싶은 포트이다.
appBase="d:/webapps/myweb2"는 9090 포트에서 돌아갈 웹사이트 위치이다.
이제 server.xml 설정은 끝난 것이다.
마지막으로 웹사이트의 ROOT 디렉토리를 지정해주자. 아래의 폴더를 생성한다.
d:/webapps/myweb2/ROOT/ (
d:/webapps/myweb2/ROOT/WEB-INF/
(WEB-INF 폴더를 만들고 web.xml 파일을 추가한다. 그냥 /TOMCAT_HOME/webapps/ROOT/WEB-INF/에 있는 web.xml 을 복사하면 된다.
무지 간단하다. 하지만 난 이 간단한 것을 위해서 하루종일 삽질해야만 했다. 검색해 보아도 문서는 많은데 실제 도움이 될만한 것이 별로 없었다.
테스트하기 위해 ROOT/index.html 또는 index.jsp를 만든다.
이제 톰캣을 재시작하고 웹브라우저로 접속해 보자.
http://localhost:8080
http://localhost:9090
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
톰캣에서 하나의 IP로 여러개의 웹사이트를 운영하는 방법은 2가지가 있다.
가상 호스트(Virtual Host)를 이용하는 방법
IP Address의 port를 여러개 사용하는 방법
여기서는 가상 호스트를 이용하여 톰캣에서 여러개의 웹사이트를 운영하는 방법에 대해서 설명하고자 한다.
설치 환경은 다음과 같다.
- O/S : Windows XP (Windows Server 동일)
- Tomcat 6.0.10
설명의 편의를 위해 톰캣의 설치 디렉토리는 'TOMCAT_HOME' 으로 표기할 것이다. 참고로 내 경우는 C:\Server\Tomcat6.0 이다.
설정하는 방법은 /TOMCAT_HOME/conf/에 있는 server.xml 파일만 수정하면 된다. server.xml의 쓸데없는 주석부분을 다 없애고 관련 부분만 남겨놓으면 아래와 같다.
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="150" connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
위의 내용에서 핵심 부분은 <Host></Host> 영역이다.
1. 우선 <Connector port="8080" protocol="HTTP/1.1" 부분의 port를 80으로 수정한다.
도메인명이 기본으로 80포트를 사용하기 때문이다.
2. <Host>... </Host> 에 해당하는 부분을 복사하여 2개를 만든다. 그리고 이렇게 수정하자.
<Host name="www.myweb1.com" appBase="d:/webapps/myweb1"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
<Host name="www.myweb2.com" appBase="d:/webapps/myweb2"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
appBase="webapps" 는 톰캣의 기본 웹루트인 TOMCAT_HOME/webapps 디렉토리를 가르킨다. 웹사이트를 원하는 디렉토리에 두고 싶다면 d:/webapps/myweb1 처럼 자기가 지정하고 싶은 곳으로 수정하면 된다.
3. 마지막으로 웹사이트들의 ROOT 디렉토리를 지정해주자. 아래의 폴더를 생성한다.
d:/webapps/myweb1/ROOT/
d:/webapps/myweb1/ROOT/WEB-INF/
d:/webapps/myweb2/ROOT/
d:/webapps/myweb2/ROOT/WEB-INF/
그리고 WEB-INF 폴더 밑에 각각 web.xml 파일을 추가한다. 그냥 /TOMCAT_HOME/webapps/ROOT/WEB-INF/에 있는 web.xml 을 복사하면 된다.
4. 테스트하기 위해 ROOT/index.html 또는 index.jsp를 만든다.
이제 톰캣을 재시작하고 웹브라우저로 접속해 보자.
http://www.myweb1.com
http://www.myweb2.com
정말 간단하지 않은가?
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
... 이전글: Comet 에 대하여 Jetty 는 버전 6.0에서부터 Continuation 이라는 것을 도입해서 Comet 스타일의 웹 프로그래밍을 효과적으로 구현할 수 있게 되었다. jet ... more
... 이전글 Comet 에 대하여 자바 서블릿 컨테이너의 Comet 지원 1 - Jetty Tomcat 에서는 버전 6.0의 Advanced IO 지원을 통해 Comet 모델을 효과적으로 구현할 수 있 ... more
... 이전글 Comet 에 대하여 자바 서블릿 컨테이너의 Comet 지원 1 - Jetty자바 서블릿 컨테이너의 Comet 지원 2 - Tomcat Resin 은 버전 3.1에서 Comet 모델을 지원 ... more