1. 개요

Apache Tomcat은 Java 커뮤니티에서 가장 인기 있는 웹 서버 중 하나입니다. WAR 확장이 있는 웹 아카이브를 제공할 수 있는 서블릿 컨테이너 로 제공됩니다 .

컨테이너를 다시 시작하지 않고도 새 웹 애플리케이션을 배포하거나 기존 애플리케이션을 배포 취소할 수 있는 관리 대시보드를 제공합니다 . 이는 프로덕션 환경에서 특히 유용합니다.

이 예제에서는 Tomcat에 대한 간략한 개요를 수행한 다음 WAR 파일 배포에 대한 다양한 접근 방식을 다룰 것입니다.

2. 톰캣 구조

시작하기 전에 몇 가지 용어와 환경 변수에 익숙해져야 합니다.

2.1. 환경 변수

이전에 Tomcat으로 작업한 적이 있다면 익숙할 것입니다.

이 변수는 서버가 설치된 디렉토리를 가리킵니다.

$CATALINA_HOME

이 변수는 특정 Tomcat 인스턴스의 디렉토리를 가리킵니다(여러 인스턴스가 설치되어 있을 수 있음).

$CATALINA_BASE

이 변수가 명시적으로 설정되지 않으면 $CATALINA_HOME 과 동일한 값이 할당됩니다 .

웹 응용 프로그램은 $CATALINA_HOME\webapps 디렉터리 아래에 배포됩니다 .

2.2. 술어

문서 루트 - JSP 파일, HTML 페이지, Java 클래스 및 이미지와 같은 모든 응용 프로그램 리소스가 있는 웹 응용 프로그램의 최상위 디렉터리를 나타냅니다.

컨텍스트 경로 – 서버 주소에 상대적인 위치를 나타내며 웹 애플리케이션의 이름을 나타냅니다.

예를 들어 웹 애플리케이션이 $CATALINA_HOME\webapps\myapp 디렉토리 아래에 있는 경우 URL http://localhost/myapp 로 액세스할 수 있으며 해당 컨텍스트 경로는 /myapp 입니다 .

WAR – 웹 아카이브의 약자. 웹 애플리케이션 디렉토리 계층 구조를 ZIP 형식으로 패키징하는 파일의 확장자입니다. Java 웹 응용 프로그램은 일반적으로 배포용 WAR 파일로 패키지됩니다. 이러한 파일은 Eclipse와 같은 IDE를 사용하거나 명령줄에서 만들 수 있습니다.

WAR 파일을 배포한 후 Tomcat은 압축을 풀고 webapps 디렉터리 의 모든 프로젝트 파일을 프로젝트 이름을 딴 새 디렉터리에 저장합니다.

3. 톰캣 설정

Tomcat Apache 웹 서버는 웹 사이트에서 다운로드 할 수 있는 무료 소프트웨어입니다 . 사용자 시스템에 사용 가능한 JDK가 있고 JAVA_HOME 환경 변수가 올바르게 설정되어 있어야 합니다.

3.1. 톰캣 시작

$CATALINA_HOME\bin\startup 에 있는 시작 스크립트를 실행하여 Tomcat 서버를 시작할 수 있습니다 . 모든 설치에는 .bat.sh 가 있습니다 .

Windows 또는 Unix 기반 운영 체제를 사용하는지 여부에 따라 적절한 옵션을 선택합니다.

3.2. 역할 구성

배포 단계 동안 몇 가지 옵션이 있으며 그 중 하나는 Tomcat의 관리 대시보드를 사용하는 것입니다. 이 대시보드에 액세스하려면 적절한 역할로 구성된 관리 사용자가 있어야 합니다.

대시보드에 액세스하려면 admin 사용자에게 manager-gui 역할이 필요합니다. 나중에 Maven을 사용하여 WAR 파일을 배포해야 하며 이를 위해 관리자 스크립트 역할도 필요합니다.

$CATALINA_HOME\conf\tomcat-users 에서 다음과 같이 변경해 보겠습니다 .

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

다른 Tomcat 역할에 대한 자세한 내용은 이 공식 링크를 따라 찾을 수 있습니다 .

3.3. 디렉토리 권한 설정

마지막으로 Tomcat 설치 디렉터리에 대한 읽기/쓰기 권한이 있는지 확인합니다.

3.4. 테스트 설치

Tomcat이 제대로 설정되었는지 테스트하기 위해 시작 스크립트( startup.bat / startup.sh )를 실행합니다. 콘솔에 오류가 표시되지 않으면 http://localhost:8080 을 방문하여 다시 확인할 수 있습니다 .

Tomcat 랜딩 페이지가 보이면 서버를 올바르게 설치한 것입니다.

3.5. 포트 충돌 해결

기본적으로 Tomcat은 포트 8080 에서 연결을 수신 대기하도록 설정되어 있습니다 . 이 포트에 이미 바인딩된 다른 애플리케이션이 있는 경우 시작 콘솔에서 알려줍니다.

포트를 변경하려면 $CATALINA_HOME\conf\server.xml 에 있는 서버 구성 파일인 server.xml을 편집하면 됩니다 . 기본적으로 커넥터 구성은 다음과 같습니다.

<Connector port="8080" protocol="HTTP/1.1" 
  connectionTimeout="20000" redirectPort="8443" />

예를 들어 포트를 8081 로 변경하려면 커넥터의 포트 속성을 변경해야 합니다.

<Connector port="8081" protocol="HTTP/1.1" 
  connectionTimeout="20000" redirectPort="8443" />

때로는 선택한 포트가 기본적으로 열려 있지 않습니다. 이 경우 Unix 커널에서 적절한 명령으로 포트를 열거나 Windows에서 적절한 방화벽 규칙을 생성해야 합니다. 이 문서의 범위를 벗어나므로 여기서는 더 자세히 설명하지 않습니다.

4. Maven에서 배포

웹 아카이브를 배포하기 위해 Maven을 사용하려면 Maven의 settings.xml 파일에서 Tomcat을 서버로 구성해야 합니다.

settings.xml 파일을 찾을 수 있는 위치는 두 곳입니다 .

  • Maven 설치: ${maven.home}/conf/settings.xml
  • 사용자 설치: ${user.home}/.m2/settings.xml

찾으면 Tomcat을 추가합니다.

<server>
    <id>TomcatServer</id>
    <username>admin</username>
    <password>password</password>
</server>

이제 배포를 테스트하기 위해 Maven에서 기본 웹 애플리케이션을 만들어야 합니다. 애플리케이션을 생성할 위치로 이동해 보겠습니다.

콘솔에서 이 명령을 실행하여 새 Java 웹 애플리케이션을 생성합니다.

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=tomcat-war-deployment 
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

이렇게 하면 tomcat-war-deployment 디렉토리에 완전한 웹 애플리케이션이 생성되고 hello  world! 지금 배포하고 브라우저를 통해 액세스한다면.

하지만 그 전에 Maven 배포를 활성화하기 위해 한 가지 변경을 수행해야 합니다. pom.xml 로 이동하여 이 플러그인을 추가해 보겠습니다.

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://localhost:8080/manager/text</url>
        <server>TomcatServer</server>
        <path>/myapp</path>
    </configuration>
</plugin>

특별한 변경 없이 버전 7과 8 모두에서 작동하기 때문에 Tomcat 7 플러그인을 사용하고 있습니다.

구성 URL은 배포를 보내는 URL이며 Tomcat은 이를 사용하여 수행할 작업을 알 수 있습니다. server 요소 Maven이 인식하는 서버 인스턴스의 이름입니다. 마지막으로 경로 요소는 배포의 컨텍스트 경로를 정의합니다 .

즉, 배포가 성공하면 http://localhost:8080/myapp 를 눌러 웹 애플리케이션에 액세스합니다 .

이제 Maven에서 다음 명령을 실행할 수 있습니다.

웹 앱을 배포하려면:

mvn tomcat7:deploy

그런 다음 배포를 취소하려면 다음을 수행하십시오.

mvn tomcat7:undeploy

마지막으로 변경 후 재배포하려면 다음을 수행하십시오.

mvn tomcat7:redeploy

5. Cargo 플러그인으로 배포

Cargo 는 다양한 유형의 애플리케이션 컨테이너를 표준 방식으로 조작할 수 있는 다목적 라이브러리입니다.

5.1. 화물 배치 설정

이 섹션에서는 WAR을 Tomcat에 배포하기 위해 Cargo의 Maven 플러그인을 사용하는 방법을 배웁니다. 이 경우 버전 7 인스턴스에 배포합니다.

전체 프로세스를 확실하게 이해하기 위해 명령줄에서 새 Java 웹 애플리케이션을 생성하여 처음부터 시작하겠습니다.

mvn archetype:generate -DgroupId=com.baeldung -DartifactId=cargo-deploy 
  -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

그러면 cargo-deploy 디렉토리 에 완전한 자바 웹 애플리케이션이 생성됩니다 . 이 애플리케이션을 그대로 빌드, 배포 및 로드하면 Hello World! 브라우저에서.

Tomcat7 Maven 플러그인과 달리 Cargo Maven 플러그인은 이 파일이 있어야 합니다.

웹 애플리케이션에는 서블릿이 포함되어 있지 않으므로 web.xml 파일은 매우 기본적입니다. 새로 생성된 프로젝트의 WEB-INF 폴더 로 이동 하고 다음 내용으로 web.xml 파일을 생성합니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
      http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
        id="WebApp_ID" version="3.0">

    <display-name>cargo-deploy</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

Maven이 정규화된 이름을 입력하지 않고 Cargo의 명령을 인식할 수 있도록 하려면 Maven의 settings.xml에 있는 플러그인 그룹에 Cargo Maven 플러그인을 추가해야 합니다 .

루트 <settings></settings> 요소의 직계 자식으로 다음을 추가합니다.

<pluginGroups>
    <pluginGroup>org.codehaus.cargo</pluginGroup>
</pluginGroups>

5.2. 로컬 배포

이 하위 섹션에서는 새 배포 요구 사항에 맞게 pom.xml을 편집합니다 .

다음 플러그인을 추가합니다.

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.5.0</version>
            <configuration>
                <container>
                    <containerId>tomcat7x</containerId>
                    <type>installed</type>
                    <home>Insert absolute path to tomcat 7 installation</home>
                </container>
                <configuration>
                    <type>existing</type>
                    <home>Insert absolute path to tomcat 7 installation</home>
                </configuration>
            </configuration>
       </plugin>
    </plugins>
</build>

작성 시점의 최신 버전은 1.5.0 입니다 . 그러나 최신 버전은 항상 여기에서 찾을 수 있습니다 .

패키징을 WAR로 명시적으로 정의합니다. 이것이 없으면 빌드가 실패합니다. 플러그인 섹션에서 cargo maven2 플러그인을 추가할 것입니다. 또한 Maven에 Tomcat 컨테이너와 기존 설치를 사용하고 있음을 알리는 구성 섹션을 추가합니다.

컨테이너 유형을 installed 로 설정하여 머신에 인스턴스가 설치되어 있음을 Maven에 알리고 이 설치에 대한 절대 URL을 제공합니다.

구성 유형을 existing 으로 설정하면 사용 중인 기존 설정이 있고 추가 구성이 필요하지 않음을 Tomcat에 알립니다.

대안은 카고에게 URL을 제공하여 지정된 버전을 다운로드하고 설정하도록 지시하는 것입니다. 그러나 우리의 초점은 WAR 배치에 있습니다.

Maven 2.x를 사용하든 Maven 3.x를 사용하든 간에 cargo maven2 플러그인은 둘 다에 대해 작동한다는 점은 주목할 가치가 있습니다.

이제 다음을 실행하여 애플리케이션을 설치할 수 있습니다.

mvn install

그런 다음 배포합니다.

mvn cargo:deploy

모든 것이 순조롭게 진행된다면 http://localhost:8080/cargo-deploy를 로드하여 웹 애플리케이션을 실행할 수 있어야 합니다 .

5.3. 원격 배포

원격 배포를 수행하려면 pom.xml 의 구성 섹션만 변경하면 됩니다 . 원격 배포는 Tomcat의 로컬 설치가 없지만 원격 서버의 관리자 대시보드에 액세스할 수 있음을 의미합니다.

구성 섹션이 다음과 같이 보이도록 pom.xml을 변경해 보겠습니다 .

<configuration>
    <container>
        <containerId>tomcat8x</containerId>
        <type>remote</type>
    </container>
    <configuration>
        <type>runtime</type>
        <properties>
            <cargo.remote.username>admin</cargo.remote.username>
            <cargo.remote.password>admin</cargo.remote.password>
            <cargo.tomcat.manager.url>http://localhost:8080/manager/text
              </cargo.tomcat.manager.url>
        </properties>
    </configuration>
</configuration>

이번에는 컨테이너 유형을 설치됨 에서 원격 으로 변경 하고 구성 유형을 기존 에서 런타임 으로 변경합니다 . 마지막으로 구성에 인증 및 원격 URL 속성을 추가합니다.

이전과 마찬가지로 역할과 사용자가 이미 $CATALINA_HOME/conf/tomcat-users.xml 에 있는지 확인합니다.

원격 배포를 위해 동일한 프로젝트를 편집하는 경우 먼저 기존 WAR의 배포를 취소합니다.

mvn cargo:undeploy

그런 다음 프로젝트를 정리합니다.

mvn clean

다음으로 설치합니다.

mvn install

마지막으로 다음과 같이 배포합니다.

mvn cargo:deploy

그게 다야.

6. Eclipse에서 배포

Eclipse를 사용하면 IDE에서 벗어나 탐색하지 않고도 일반 워크플로에서 웹 프로젝트 배포를 추가하기 위해 서버를 내장할 수 있습니다.

6.1. Eclipse에 Tomcat 포함

Eclipse에 설치를 포함하려면 작업 표시줄에서 메뉴 항목을 선택한 다음 드롭다운에서 환경 설정을 선택합니다.

그러면 나타나는 창의 왼쪽 패널에 기본 설정 항목의 트리 그리드가 표시됩니다. 다음으로 eclipse -> 서버 로 이동하거나 검색 표시줄에 서버를 입력합니다 .

그런 다음 아직 열려 있지 않은 경우 설치 디렉토리를 선택하고 다운로드한 Tomcat 버전을 선택할 수 있습니다.

패널 오른쪽에 구성 페이지가 나타납니다. 여기에서 사용 옵션을 선택하여 이 서버 버전을 활성화하고 설치 폴더를 찾습니다.

캡처1

변경 사항을 적용한 다음 다음에 Eclipse 창 -> 보기 하위 메뉴 표시에서 서버 보기를 열면 새로 구성된 서버가 나타나며 애플리케이션을 시작, 중지 및 배포할 수 있습니다.

6.2. Embedded Tomcat에 웹 애플리케이션 배포

Tomcat에 웹 애플리케이션을 배포하려면 작업 공간에 웹 애플리케이션이 있어야 합니다.

창 -> 보기 표시 에서 서버 보기를 열고  서버를 찾아봅시다. 열리면 구성한 서버를 마우스 오른쪽 버튼으로 클릭하고 나타나는 상황에 맞는 메뉴에서 배포 추가를 선택할 수 있습니다.

 

캡처-1-1-2

표시되는 새 배포 대화 상자 에서 프로젝트 드롭다운을 열고 웹 프로젝트를 선택합니다.

프로젝트 콤보 상자 아래에 배포 유형 섹션이 있습니다 . Exploded Archive(development mode) 를 선택 하면 응용 프로그램의 변경 사항이 다시 배포하지 않고도 실시간으로 동기화됩니다. 이것은 매우 효율적이기 때문에 개발 중에 가장 좋은 옵션입니다.

캡처-2-1-2

 

Packaged Archive(프로덕션 모드)를 선택하면 변경 사항을 적용하고 브라우저에서 확인할 때마다 다시 배포해야 합니다. 이것은 프로덕션에만 가장 적합하지만 여전히 Eclipse를 사용하면 똑같이 쉽게 만들 수 있습니다.

6.3. 외부 위치에 웹 애플리케이션 배포

우리는 일반적으로 디버깅을 더 쉽게 하기 위해 Eclipse를 통해 WAR을 배포하도록 선택합니다. 그러나 Eclipse의 임베디드 서버에서 사용하는 위치가 아닌 다른 위치에 배포해야 할 때가 올 수 있습니다. 가장 일반적인 인스턴스는 프로덕션 서버가 온라인 상태이고 웹 애플리케이션을 업데이트하려는 경우입니다.

프로덕션 모드에서 배포하고 새 배포 대화 상자 에서 배포 위치를 확인한 다음 거기에서 WAR을 선택하여 이 절차를 건너뛸 수 있습니다 .

배포하는 동안 내장형 서버를 선택하는 대신 내장형 서버 List 옆에 있는 서버 보기에서 <외부 실행> 옵션을 선택할 수 있습니다. 그런 다음 외부 Tomcat 설치의 webapps 디렉토리 로 이동합니다 .

7. IntelliJ IDEA에서 배포

웹 응용 프로그램을 Tomcat에 배포하려면 웹 응용 프로그램이 존재해야 하며 이미 다운로드 및 설치되어 있어야 합니다.

7.1. 로컬 구성

실행 메뉴를 열고 구성 편집 옵션을 클릭합니다 .

 

포착

왼쪽 패널에서 Tomcat 서버를 검색합니다. 없는 경우 메뉴에서 + 기호를 클릭하고 Tomcat을 검색한 다음 Local 을 선택합니다 . 이름 필드에 Tomcat 7/8을 입력합니다 (버전에 따라 다름).

캡처-1-2

 

그런 다음 구성... 버튼을 클릭 하고 Tomcat 홈 필드에서 설치의 홈 위치로 이동하여 선택합니다.

 

캡처-2

선택적으로 시작 페이지를 http://localhost:8080/HTTP 포트: 8080 으로 설정할 수 있습니다 . 포트를 적절하게 변경합니다.

마지막으로 배포 탭 으로 이동하여 + 기호를 클릭하고 서버에 추가할 아티팩트를 선택한 다음 확인을 클릭합니다.

 

캡처-3-1

 

7.2. 원격 구성

로컬 Tomcat 구성과 동일한 지침을 따르지만 서버 탭에서 원격 설치 위치를 입력해야 합니다.

8. 아카이브를 복사하여 배포

Eclipse에서 WAR을 내보내는 방법을 배웠습니다. 우리가 할 수 있는 또 다른 일은 Tomcat 인스턴스의 $CATALINA_HOME\webapps 디렉토리 에 간단히 드롭하여 배포하는 것입니다 . 인스턴스가 실행 중인 경우 Tomcat이 아카이브의 압축을 풀고 해당 컨텍스트 경로를 구성하는 즉시 배포가 시작됩니다.

인스턴스가 실행 중이 아니면 서버는 다음에 시작할 때 프로젝트를 배포합니다.

9. Tomcat 관리자에서 배포

WAR 파일이 이미 있고 관리 대시보드를 사용하여 배포하려는 경우 http://localhost:8080/manager를 방문하여 관리자 대시보드에 액세스할 수 있습니다 .

대시보드에는 Manager , Applications , Deploy , DiagnosticsServer Information의 다섯 가지 섹션이 있습니다.

배포 섹션 으로 이동하면 두 개의 하위 섹션이 있습니다.

9.1. 서버에 있는 디렉터리 또는 WAR 파일 배포

WAR 파일이 Tomcat 인스턴스가 실행 중인 서버에 있는 경우 슬래시 "/" 앞에 오는 필수 컨텍스트 경로 필드를 채울 수 있습니다.

예를 들어 URL이 http://localhost:8080/myapp 인 브라우저에서 웹 애플리케이션에 액세스하려는 경우 컨텍스트 경로 필드에는 /myapp이 있습니다.

XML 구성 파일 URL 필드를 건너뛰고 WAR 또는 디렉터리 URL 필드 로 이동할 수도 있습니다 . 여기서는 서버에 표시되는 웹 아카이브 파일의 절대 URL을 입력합니다. 예를 들어 파일 위치가 C:/apps/myapp.war 인 경우 이 위치를 입력합니다. WAR 확장을 잊지 않는 것이 중요합니다.

그런 다음 배포 버튼을 클릭할 수 있습니다. 페이지가 다시 로드되고 페이지 상단에 다음 메시지가 표시됩니다.

OK - Deployed application at context path /myapp

애플리케이션은 페이지의 애플리케이션 섹션 에도 나타나야 합니다 .

9.2. 배포할 WAR 파일

여기에서는 파일 선택 버튼을 클릭 하고 WAR 파일의 위치로 이동하여 선택한 다음 배포 버튼을 클릭합니다.

두 경우 모두 모든 것이 순조롭게 진행되면 Tomcat 콘솔은 다음 메시지와 함께 배포가 성공했음을 알려줍니다.

INFO: Deployment of web application archive \path\to\deployed_war has finished in 4,833 ms

10. 결론

이 기사에서는 WAR을 Tomcat 서버에 배포하는 방법에 중점을 두었습니다.

res – REST with Spring (eBook) (everywhere)