본문 바로가기

웹프로그래밍/Tomcat

아파치 톰캣(Apache Tomcat)


톰캣은 아파치 소프트웨어 재단에서 개발된 서블릿 컨테이너(또는 웹 컨테이너)이다.  톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공한다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있다. 그리고 톰캣은 HTTP 서버도 자체 내장하고 있다.

톰캣은 웹 서버로 사용되기보다는 was로 사용된다. 물론, 톰캣에 내장된 웹 서버로만 웹 시스템을 구성할 수도 있지만, 대규모 사용자가 사용하는 시스템 구축시에는 웹 서버와 연동하는 안정적인 시스템을 구축해야 한다. html과 같은 정적 페이지를 로딩하는데 있어서 톰캣에 내장된 웹 서버만으로는 수행 속도가 너무 느리기 때문이다. 따라서 이를 해결하기 위해 톰캣은 아파치와 연동한다. (아파치는 html과 같은 정적인 페이지를 로드하는데 사용되는 웹 서버이다.) 아파치가 실행되면 아파치는 html 파일은 자신이 수행하고 jsp 파일은 톰캣으로 넘겨서 톰캣이 수행하게 만드는 것이다.


출처 : 위키백과





아파치 톰캣의 설치  

아파치 톰캣의 설치는 아파치 재단 사이트에서 받을 수 있습니다. (아파치 톰캣 다운로드 페이지 바로가기) 설치파일 보다 zip 파일을 받는 것이 권장됩니다. 설치환경이 변경될 경우에도 폴더만 옮겨주면 그대로 사용이 가능하기 때문입니다. (따라서 Binary Distributions - Core 의 가장 첫번째 항목인 zip 을 클릭해 다운로드 받도록 합니다.) zip 파일로 다운 받을 경우, 아파치 톰캣의 설치는 다운로드 받은 파일의 압축을 설치하고 하자는 폴더에 해제하는 것으로 완료됩니다.  

설치 후에 환경 변수의 시스템 변수에 변수이름은 'CATALINA_HOME', 변수 값은 '톰캣이 설치된 경로'인 변수를 추가하고 path 환경변수의 변수 값에 %CATALINA_HOME%;을 추가합니다. 하지만 이클립스만을 사용하여 개발시에는 이클립스에서 아파치 톰캣 실행 환경(jar파일)을 자동으로 가져오기 때문에 환경변수를 설정해줄 필요가 없습니다.




아파치 톰캣의 폴더  

아파치 톰캣이 설치된 폴더에는 아래와 같은 폴더들이 들어있습니다.. 각 폴더의 역할은 다음과 같습니다.

  • bin : 바이너리 파일(실행 파일)이 들어 있습니다.
  • conf : 환경설정 파일이 들어있습니다 .
  • lib : 톰캣 실행에 필요한 라이브러리(jar 파일)들이 들어 있습니다 .
  • logs : 오류에 관한 log 파일이 들어 있습니다 .
  • temp : 톰캣 실행 도중 임시 파일이 저장되는 곳이습니다 .
  • webapps : 웹애플리케이션 관련 파일(.html, .jsp)이 들어 있습니다 .
  • work : 톰캣 실행 도중 작업 파일이 저장되는 곳 입니다 .





아파치 톰캣 환경 설정  

아파치 톰캣의 환경 설정은 conf 폴더의 context.xml, server.xml, web.xml에 설정되어 있습니다.



(1) server.xml : 아파치 톰캣 서버에 대한 환경 설정
Connector 태그에서 아파치 톰캣의 포트번호와 인코딩등을 설정할 수 있습니다. 포트번호는 port 속성의 값을 변경하면되는데 기본값은 8080입니다. 인코딩은 URIEncoding 속성을 추가하여 설정할 수 있고 속성의 값으로 "euc-kr"이나 "utf-8"을 지정하면 한글이 깨지지 않습니다. 하지만 서버에서 한글처리를 지정해주기보단 서블릿에서 한글 처리를 해주는 것이 일반적입니다.

<Connector port="8080" protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443"
           URIEncoding="euc-kr" />

Host 태그의 appBase 속성에서는 웹애플리케이션의 저장 경로를 지정할 수 있습니다. 기본적으로 webapps로 설정되어 있습니다.
<Host name="localhost"  appBase="webapps"
      unpackWARs="true" autoDeploy="true"
      xmlValidation="false" xmlNamespaceAware="false">


(2) web.xml : 웹앱의 환경 설정  
서블릿의 사용을 위해서는 InvokeServlet 클래스를 사용해야 하는데 기본적으로는 사용이 안되도록 주석이 처리되어 있습니다. 따라서 아래 두곳의 주석을 제거함으로써 서블릿이 동작하게 해주어야 합니다. 

<servlet>
        <servlet-name>invoker</servlet-name>
        <servlet-class>
          org.apache.catalina.servlets.InvokerServlet
        </servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping>


(3) context.xml 
서블릿의 사용을 위한 InvokeServlet 클래스를 사용하기 위해 Context 태그의 priviledged 속성의 값을 true로 설정합니다. reloadabel 속성을 true로 설정할 경우 서버에 클래스 파일 추가시 서버 재부팅없이도 바로 적용되는데 이 편이 더 편리하므로 설정하는 것이 좋습니다.

<Context privileged="true" reloadable="true">



 
아파치 톰캣 실행  

아파치 톰캣 설치 폴더의 /bin/startup.bat 파일을 실행하여 아파치 톰캣 서버를 실행하는 경우에는 JDK 경로가 환경변수에 설정되어 있어야 합니다. 반면, 이클립스 상에서 서버를 실행하는 경우에는 JDK 실행환경을 자동으로 가져오므로 환경변수를 따로 설정하지 않아도 됩니다. 

만일 데스크탑 컴퓨터에 아파치 톰캣을 설치하고 웹 애플리케이션을 구동했을시 이 웹애플리케이션에 외부에서 접근하고자 하면 이클립스와 상관없이 자바 서블릿의 실행을 위해서 JDK 환경변수 설정이 필요합니다. 


 

아파치 톰캣 서버가 정상적으로 실행되고 있는 경우에는 웹브라우저의 주소창에 http://localhost 입력 후 이동하면 아래와 같은 아파치 톰캣 설치 폴더의 /webapps/root 폴더안에 있는 기본 index.html에 연결됩니다. (이클립스에서 서버를 실행한 경우에는 root 위치를 /webapps/root 가 아닌 이클립스의 workspace로 지정된 폴더로 잡으므로 아래의 화면이 나타나지는 않습니다.)
 




아파치 톰캣 서버의 종료는 startup.bat로 서버를 실행한 경우에는 톰캣 실행 창에서 Ctrl + C를 누르거나, 아파치 톰캣 설치 폴더안의 /bin/shutdown.bat를 실행하면 됩니다. 이클립스에서 아파치 톰캣 서버를 실행한 경우에는 이클립스의 server 창에서 정지버튼을 눌러주면 됩니다. 

한가지 주의할 점은 startup.bat로 아파치 톰캣 서버 실행한 후에 이클립스에서 아파치 톰캣 서버를 중복으로 실행할 수 없다는 점입니다. 이클립스에서 서버를 실행하시려면 먼저 startup.bat르 실행한 서버의 동작을 정지 시킨 후 실행하셔야 합니다.