이 글은 2006년 7월경 쓴 글을 옮겨온 것이다.

아파치(Apache 2.2)와 톰캣(Tomcat 5.5)의 설정

이 문서는 windows XP 환경에서 아파치(Apache)의 모든 버젼과 톰캣(Tomcat)을 연동하여
JSP 개발자의 개발환경을 구축하는데 그 목적을 둔다. 
또한, 아파치와 톰캣의 용도를 모른다면 이 문서를 볼 필요는 없다.

문서의 수정
작성 2006년 7월 25일
1차  2007년 3월 20일
지난 번에는 아파치 2.2(Apache 2.2)와 톰캣 5.5(Tomcat 5.5)의 연동에 대해 다루었다.
이번에는 톰캣에서 루트 디렉토리(Root Directory)의 재지정과 호스팅에 대한 방법을 다루도록 하겠다.

일반적으로 호스팅의 경우에는 별도의 DNS(Domain Name Service)가 있으므로 hosts 파일을 다룰 필요는 없으나
이 방법을 사용하는 경우 간단하게 특정 웹사이트에 접속하지 못하게도 할 수 있으므로 유용하게 사용될 수 있다.
(게임이 잦은 아이들을 통제하기 위한 수단도 된다.)

네트워크가 구성된 초기에는 지금과 같이 컴퓨터가 많이 네트워크에 접속하리라고 예상하지 못했다.
그래서 파일(현재는 hosts라는 파일)에 IP주소와 컴퓨터의 이름을 1:1로 대응시켜 사용했다.
이 방법은 DNS보다 우선적으로 읽혀져서 호스트를 찾아가고 UNIX(Linux)의 경우에는 /etc에,
MS-Windows에서 NT계열(2000,XP 등)은 C:\WINDOWS\system32\drivers\etc에,
MS-Windows 9x 계열은 C:\windows\system에 hosts 파일(확장자가 없다.)을
두면(저장하면) 된다.
(MS-Windows 9x 계열에서는 처음에 hosts.sam이라는 파일로 존재하는데 이름을 바꾸어주면 된다.)

Windows 2000 또는 XP의 경우 C:\WINDOWS\system32\drivers\etc에 있는
hosts 파일을 열어 보면 다음과 같다.
=========================================================================
# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host

127.0.0.1 localhost
=========================================================================
위의 내용에서 #으로 시작된 행은 주석이므로 필요가 없고 마지막 한 행을 보면
IP주소와 호스트명이 적혀있는데 이 IP주소는 컴퓨터에서 자기 자신을 지칭하는
주소로 loopback이라고도 불리우고 호스트명 또한 localhost라고 부른다.

이 파일을 사용하기 위해서는 위에 적혀 있는 것과 같이 호스트 또는 도메인을 추가해 주기만 하면 된다.
예를 들어서 game.co.kr이라는 도메인이 있고 이에 대한 접근을 금지하고자 한다면
127.0.0.1 localhost 다음에 다음과 같이 추가한다.

127.0.0.1 game.co.kr

그러면 바로 그 효과가 있어서 그곳에는 접속할 수 없다.

우리가 필요로 하는 부분은 그것이 아니라 호스팅을 위한 방법을 이해하기 위하여
다른 호스트명을 넣어주고 각각의 호스트명으로 접속할 때 서로 다른 디렉토리를
읽을 수 있도록 해야 하므로 우선 다음과 같이 하나만 추가 한다.

127.0.0.1 localjsp

저장을 하고 아파치를 기동한 다음 다음과 같이 접속해 보자.

http://localhost/index.jsp
http://localjsp/index.jsp

위에서 접속한 두 곳이 모두 같은 문서(Apache Tomcat이라는 글자가 나오는 문서)를 보이면
정상적으로 hosts 파일이 동작하는 것이다.
(아마도 이미지는 출력되지 않을 것이다.)

이제 먼저 아파치의 환경설정 파일(아파치가 설치된 경로의 conf를 보면 httpd.conf가 있다.)을
수정하는데 환경설정 파일을 열어서 DocumentRoot를 찾는데
그곳이 서버의 기본 디렉토리이고 그 아랫부분을 보면 <Directory ....>과 같이 쓰여 있다.
다음은 그 예로 이 부분은 디렉토리를 정의해 주는 부분이다.


#기본 계정 웹경로.홈 디렉터리
DocumentRoot "C:/RWAPM/www"
<Directory "C:/RWAPM/www">
#SetOutputFilter DEFLATE
Options FollowSymLinks MultiViews Includes ExecCGI Indexes
AddHandler cgi-script .cgi .pl
AllowOverride None
Order allow,deny
Allow from all
</Directory>


위 부분을 복사하여 다음과 같이 추가하고 수정해 준다.

DocumentRoot "C:/RWAPM/wjsp"
<Directory "C:/RWAPM/wjsp">
#SetOutputFilter DEFLATE
Options FollowSymLinks MultiViews Includes ExecCGI Indexes
AddHandler cgi-script .cgi .pl
AllowOverride None
Order allow,deny
Allow from all
</Directory>


RWAPM으로 설치하지 않았다면 이름은 다를 것이고 위치도 우리가 원하는 곳으로 바꾸어 줄 수 있다.
위와 같이 디렉토리를 설정해 주었다면 wjsp라는 디렉토리를 만들고 가상호스트를 설정해 주어야 한다.
최신의 아파치에서는 virtualHost.conf라는 파일이 아파치의 conf 디렉토리에 존재하고
이 파일을 불러서 사용하고 있는데 다음과 같이 환경설정 파일을 삽입시키고 있는지 확인해 본다.
Include conf/virtualHost.conf
만약 #으로 주석처리 되었다면 주석을 풀어 놓는다.
(구버전의 환경설정 파일을 사용한다면 환경설정파일의 아랫부분에
<VirtualHos ...>하는 부분이 있고 그 부분을 virtualHost.conf 대신 수정 한다.)

이제 virtualHost.conf 파일을 열어서(없다면 만들어 준다.) 다음과 같이 수정한다.

NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin root@localhost
DocumentRoot /RWAPM/www
ServerName localhost
</VirtualHost>

<VirtualHost *:80>
ServerAdmin root@localhost
DocumentRoot /RWAPM/wjsp
ServerName localjsp
</VirtualHost>


모든 파일을 저장한 다음 아파치를 다시 시작하고 다음을 열었을 때 서로 다른 디렉토리가 나와야만 한다.
그렇지 않다면 www와 wjsp의 위치와 환경설정 파일을 다시 확인해 본다.
http://localhost
http://localjsp


위의 내용까지 정상적으로 된다면 이제 톰캣 설정파일을 수정해 주도록 한다.
톰캣은 http://localhost:8080/manager/html 을 열어서 사용하기도 하지만
이 문서에서는 8080포트를 사용하지 않을 것으므로 직접 문서를 수정해야 한다.

톰캣이 설치된 디렉토리의 conf에서 server.xml을 열도록 한다.
톰캣 5.5의 server.xml 문서가 수정되지 않았다면 77행 부근에서 다음과 같이 8080 포트에 대한 택을 볼 수 있다.
(이제는 8080 포트를 사용하지 않을 것이다.)
<Connector port="8080"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

위의 Connector 택을 다음과 같이 주석처리 한다.
<!--
<Connector port="8080"
maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
-->

그리고 190행 부분을 찾아보면 localhost에 대해 정의된 곳이 있다.

<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">

위를 아래와 같이 수정해 주도록 한다.(appBase가 중요한 부분으로 jsp가 실행될 디렉토리)

<Host name="localhost" appBase="C:\RWAPM\www" 
unpackWARs="true" autoDeploy="true" 
xmlValidation="false" xmlNamespaceAware="false"> 
<Context path="" docBase="" debug="1" /> 

또 localjsp 부분을 추가하는데 위의 localhost에 대한 Host는 340행 부분(또는 360행 부근)에 끝이 있기 때문에
그 다음 부분에 아래와 같이 추가 해야만 한다.

<Host name="localjsp" appBase="C:\RWAPM\wjsp" 
unpackWARs="true" autoDeploy="true" 
xmlValidation="false" xmlNamespaceAware="false"> 
<Context path="" docBase="" debug="1" /> 
</Host>
 
</Engine>
</Service>
</Server>

위의 과정까지 끝냈으면 이제 톰캣을 다시 시작한다.

만약 위의 과정을 마치고 톰캣을 다시 실행하려고 할 때 실행되지 않으면
위의  환경설정 파일인 server.xml이 잘못 수정된 것이므로 xml의 규약에 맞게
수정되었는지 확인하여 수정하면 정상적으로 동작할 것이다.

다음과 같은 문서를 만들어서 C:\RWAPM\wjsp와 C:\RWAPM\www에
test.jsp로 저장하고 확인해 본다.

<html>
<body>
<h1><%= application.getServerInfo() %></h1>
</body>
</html>

또한 다음과 같이 URL을 입력한 다음 결과를 확인해 본다.
http://localhost
http://localjsp
http://localhost:8080
http://localjsp:8080
http://localhost/index.jsp
http://localjsp/index.jsp
http://localhost/test.jsp

정상적으로 열리는 것과 그렇지 않은 것의 차이를 이해할 수 있는가?
생각 한 번 해 보자

+ Recent posts