[Tomcat] 웹 애플리케이션(WAR) 배포

참고 문서

테스트 환경

  • JDK 1.7.0_51
  • tomcat 7.0.52
  • eclipse kepler

export WAR

먼저 배포할 프로젝트를 WAR로 추출한다. 참고로 WAR는 web application archive의 약자로 웹 애플리케이션을 배포하기 위한 파일들의 압축이다. 이게 아니다.

추출에 사용된 툴과 옵션에 따라 내용은 다를 수 있다. 가령 이클립스에서 생성한 Dynamic Web Project를 Export 할 때 서버 런타임을 톰캣으로 선택한다면 해당 프로젝트-WebContent 하위의 모든 폴더와 파일을 내보내게 된다. 프로젝트에 자바 소스가 존재하면 컴파일된 클래스 파일을 WAR에 포함시키며 WEB-INF/classes 아래 경로에 위치하게 된다.

팁: JDK의 jar.exe로도 WAR를 만들 수 있다.

▲ 이클립스의 export WAR ▲ 이클립스의 export WAR

configuration & deploy

WAR를 톰캣으로 배포하는 방법은 두 가지다:

  • 톰캣에서 제공하는 GUI 툴인 /manager/html 페이지에서 설정
  • 톰캣경로\conf\server.xml 파일을 통한 webapp 설정

톰캣 매니저를 통한 배포

톰캣 매니저 접속 권한을 설정한다. tomcat-users.xml을 열어 아래처럼 변경한다.

<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">

    <role rolename="manager-script"/>
    <role rolename="manager-gui"/>
    <role rolename="manager-jmx"/>
    <role rolename="manager-status"/>
    <user username="admin" password="1234" roles="manager-gui,manager-script,manager-status,manager-jmx"/>

</tomcat-users>

톰캣경로/bin/startup.bat 을 실행해 서버를 시작한다.

server.xml을 수정하지 않았다면 서버 리스너의 기본 포트는 8080이다. 브라우저에서 localhost:8080/manager/html 을 입력해 직접 매니저 페이지로 이동하거나 localhost:8080 만 입력해 나오는 인덱스 페이지에서 Manager App 버튼을 클릭한다.

톰캣 매니저 페이지 하단의 Deploy - WAR file to deploy 에서 WAR파일을 선택해 'Deploy'한다.

페이지 상단의 배포중인 애플리케이션을 관리하는 Applications에서 배포한 애플리케이션을 활성화 한다.

배포가 완료되었으며 localhost:8080/WAR파일명으로 접근할 수 있다.

server.xml 설정을 통한 배포

WAR 파일을 톰캣경로\webapps 아래에 둔다. 이때 압축은 풀어도 되고 풀지 않아도 된다.

톰캣경로\conf\server.xml 을 다음처럼 수정한다:

<Host name="localhost" appBase="webapps"
            unpackWARs="true" autoDeploy="false">
    <!-- 생략 -->
    <Context docBase="logictest" path="/" reloadable="true"/>
</Host>

사실 이 단계를 거치지 않아도 1번 이후 바로 접근할 수 있긴 하다. 다만 이를 통해 ContextPath를 설정할 수 있다는 것을 알아두자. (ContextPath: 서버이름(hostname) 바로 다음에 오는 경로. 여기선 path를 /로 설정했으므로 ContextPath는 없다고 보면 된다.)

서버를 시작하면 배포가 완료된다. 2번에서 server.xml을 수정했으므로 localhost:8080으로 접근할 수 있다.

참고로 Context 설정은 server.xml을 통해 직접 설정하는 것보다 docBase/META-INF/context.xml을 추가해 별도로 관리하는것이 권장된다. (docBase: appBase 아래에 위치한 폴더나 WAR를 의미)