Translate

[Tomcat] Web Application 배포 방법

 

[ 알아야 하는 개념 ]

[ CATALINA_HOME ] 
 - Tomcat 설치 디렉토리 경로

[ CATALINA_BASE ] 
 - 인스턴스의 구성 디렉토리 경로 (따로 지정하지 않으면 CATALINA_HOME 과 동일)

[ 배포 ]
 - WAR 또는 사용자정의 Web_Application 을 Tomcat 서버에 설치하는 과정

[ appBase ]
 - Application Base 디렉토리 (Application Context 디렉토리들이 들어있다)

[ Context ]
 - Tomcat 에서 하나의 Web_Application 을 구성하는 단위
 - 하나의 Tomcat 에는 여러개의 Context (Application) 구성 및 배포가 가능하다.
 - 각각의 Context 는 URI 의 접두사를 기준으로 구분한다. (ex: /(root), /exam1, /exam2)

[ Context Descriptor ]
 - Context 를 구성하기 위한 설정
 - Context 에 대한 Tomcat 관련 구성을 포함하는 XML

[ 배포 방법 ]
 1. 정적 배포 : Web_Application 이 Tomcat 시작전에 셋팅
 2. 동적 배포 : 아래 2가지 방법
  1) 자동배포 기능을 이용한 방법
  2) Tomcat_Manager 웹_애플리케이션을 사용하여 원격 배포

[ Tomcat_Manager ]
 - Web_Application을 배포하고 관리하는 URL-based API 를 사용하는 웹 애플리케이션


* 대부분의 경우 Tomcat_Manager 를 사용하지 않고, 정적배포 또는 자동배포를 이용하여 구성하기 때문에 여기에서는 Tomcat_Manager 에 대한 설명은 언급하지 않는다.



* 일반적으로는 아래 Context 구성의 1, 3번 방법이나 Tomcat 시작 시 배포를 많이 사용을 한다.

* 아래에서 (압축되지 않은 Application) Exploded_ApplicationApplication_디렉토리표기한다.

[ Context 구성 ]

아래 위치에 Context Descriptor 를 구성한다. (아래 중에 1개 선택)

1. {_CATALINA_BASE_}/conf/{_EngineName_}/{_HostName_}/{_WebAppName_}.xml
2. {_CATALINA_BASE_}/webapps/{_WebAppName_}/META-INF/context.xml
3. {_CATALINA_BASE_}/conf/server.xml 파일 내 (동작하지만 현재는 권장하지 않음)


1번의 경우 아래와 같은 구조의 디렉토리 경로와 xml 파일을 생성한다.
 - 아래 구성의 ROOT 컨텍스트 접속 URL : http://localhost:8080/

[1004lucifer@rhel8 conf]$
[1004lucifer@rhel8 conf]$ # 현재 디렉토리 경로 (Tomcat_Home/conf)
[1004lucifer@rhel8 conf]$ pwd
/home/1004lucifer/apache-tomcat-11.0.2/conf
[1004lucifer@rhel8 conf]$
[1004lucifer@rhel8 conf]$ # conf 디렉토리 하위 경로 확인
[1004lucifer@rhel8 conf]$ tree
.
├── Catalina <= (디렉토리) Engine Name - 보통 Catalina 사용
│   └── localhost
<= (디렉토리) Host Name - 보통 localhost 사용
│   └── ROOT.xml
<= /(root) Context Descriptor
├── catalina.properties
├── context.xml
├── jaspic-providers.xml
├── jaspic-providers.xsd
├── logging.properties
├── server.xml
├── tomcat-users.xml
├── tomcat-users.xsd
└── web.xml

2 directories, 10 files
[1004lucifer@rhel8 conf]
$



[ Tomcat 시작 시 배포 ]

- server.xml 파일 내 hostdeployOnStartup 속성이 true 인경우 동작함 (기본값: true)

- server.xml 파일 내 hostappBase 속성에서 지정한 디렉토리 위치에 있는 Web_Application 이 배포 된다. (기본 appBase 경로는 {_CATALINA_BASE_}/webapps)

- Web_Application 은 Application_디렉토리 이거나 .WAR 파일 형식이다.

- 위와같은 조건이 갖춰진경우 아래와 같은 배포 순서에 따라 배포 된다.
 1) 모든 Context_Descriptor 가 우선적으로 배포된다.
 2) Context_Descriptor 에 의해 참조되지 않은 Application_디렉토리가 배포된다. 만일 appBase 에 Application_디렉토리와 연관된 .WAR 파일이 있고 Application 디렉토리 보다 최신인경우 Application_디렉토리는 삭제 후 .WAR 에서 다시 배포된다.
 3) .WAR 파일이 배포된다.


아래 구성의 Web_Application 접속 URL (host: localhost 가정)
 1) http://localhost:8080/   (ROOT)
 2) http://localhost:8080/docs
 3) http://localhost:8080/examples
 4) http://localhost:8080/host-manager
 5) http://localhost:8080/manager

[1004lucifer@rhel8 apache-tomcat-11.0.2]$
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ # 현재 경로 확인
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ pwd
/home/1004lucifer/apache-tomcat-11.0.2
[1004lucifer@rhel8 apache-tomcat-11.0.2]$
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ # Tomcat 설치 경로 (CATALINA_HOME, CATALINA_BASE) 경로
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ ll
total 140
drwxr-xr-x. 2 1004lucifer 1004lucifer 4096 Dec 5 15:19 bin
-rw-r--r--. 1 1004lucifer 1004lucifer 21643 Dec 5 15:19 BUILDING.txt
drwxr-xr-x. 3 1004lucifer 1004lucifer 231 Dec 19 11:38 conf
-rw-r--r--. 1 1004lucifer 1004lucifer 6330 Dec 5 15:19 CONTRIBUTING.md
drwxr-xr-x. 2 1004lucifer 1004lucifer 4096 Dec 5 15:19 lib
-rw-r--r--. 1 1004lucifer 1004lucifer 61666 Dec 5 15:19 LICENSE
drwxr-xr-x. 2 1004lucifer 1004lucifer 6 Dec 5 15:19 logs
-rw-r--r--. 1 1004lucifer 1004lucifer 2401 Dec 5 15:19 NOTICE
-rw-r--r--. 1 1004lucifer 1004lucifer 3370 Dec 5 15:19 README.md
-rw-r--r--. 1 1004lucifer 1004lucifer 6631 Dec 5 15:19 RELEASE-NOTES
-rw-r--r--. 1 1004lucifer 1004lucifer 16577 Dec 5 15:19 RUNNING.txt
drwxr-xr-x. 2 1004lucifer 1004lucifer 30 Dec 5 15:19 temp
drwxr-xr-x. 7 1004lucifer 1004lucifer 81 Dec 5 15:19 webapps
drwxr-xr-x. 2 1004lucifer 1004lucifer 6 Dec 5 15:19 work
[1004lucifer@rhel8 apache-tomcat-11.0.2]
$
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ # 기본 appBase 경로 (Default)
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ cd webapps/
[1004lucifer@rhel8 webapps]
$
[1004lucifer@rhel8 webapps]$ # 기본적인 Web_Application 리스트
[1004lucifer@rhel8 webapps]$ ll
total 4
drwxr-xr-x. 16 1004lucifer 1004lucifer 4096 Dec 5 15:19 docs
drwxr-xr-x. 7 1004lucifer 1004lucifer 99 Dec 5 15:19 examples
drwxr-xr-x. 6 1004lucifer 1004lucifer 79 Dec 5 15:19 host-manager
drwxr-xr-x. 6 1004lucifer 1004lucifer 114 Dec 5 15:19 manager
drwxr-xr-x. 3 1004lucifer 1004lucifer 223 Dec 5 15:19 ROOT
[1004lucifer@rhel8 webapps]
$



[ 실행중인 Tomcat 서버에 배포 ]

* 기동중인 Tomcat 서버에 동적으로 Web_Application 을 배포하는것이 가능하다.

- server.xml 파일 내 hostautoDeploy 속성이 true 이면 Tomcat 은 상황에 따라 Web_Application 을 동적으로 배포한다. 기본값:true (예: 새로운 .WAR 파일이 appBase 디렉토리에 위치하는경우..)

- autoDeploy 속성이 true 인경우 아래의 기능이 동작된다.
 1) appBase 에 복사된 .WAR 파일이 배포된다.
 2) appBase 에 복사된 Application_디렉토리가 된다.
 3) 새로운 .WAR 가 제공되면 이미 배포된 Web_Application 을 다시 배포한다. 이 경우 압축이 풀린 Application_디렉토리가 제거되고 .WAR 가 다시 압축이 해제된다.
 3-1) host 에 unpackWARs="false" 설정 시 압축이 해제되지 않고 WAR 자체가 바로 배포된다. (기동속도가 느려서 권장하지 않음)
 4) /WEB-INF/web.xml 파일이 업데이트되면 Web_Application 을 다시 로드한다.
 5) Web_Application 에서 사용하는 Context_Descriptor 또는 Global_Context_Descriptor 가 업데이트되면 다시 배포한다.
 6) Context_Descriptor 파일이 $CATALINA_BASE/conf/[enginename]/[hostname]/ 디렉토리에 추가되면 Web_Application 이 다시 배포한다. (기존의 Context path 와 동일한 파일명인경우)
 7) docBase 가 삭제되는 경우 Web_Application 의 배포가 취소된다. (Context_Descriptor 파일이 삭제되는경우)


아래 새로 생성한 test1 Application 접속 URL
 - http://localhost:8080/test1

[1004lucifer@rhel8 apache-tomcat-11.0.2]$
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ # 현재 경로 확인
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ pwd
/home/1004lucifer/apache-tomcat-11.0.2
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ # Tomcat 디렉토리 리스트 조회
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ ll
total 140
drwxr-xr-x. 2 1004lucifer 1004lucifer 4096 Dec 21 03:11 bin
-rw-r--r--. 1 1004lucifer 1004lucifer 21643 Dec 5 15:19 BUILDING.txt
drwxr-xr-x. 3 1004lucifer 1004lucifer 231 Dec 19 11:38 conf
-rw-r--r--. 1 1004lucifer 1004lucifer 6330 Dec 5 15:19 CONTRIBUTING.md
drwxr-xr-x. 2 1004lucifer 1004lucifer 4096 Dec 5 15:19 lib
-rw-r--r--. 1 1004lucifer 1004lucifer 61666 Dec 5 15:19 LICENSE
drwxr-xr-x. 2 1004lucifer 1004lucifer 132 Dec 21 03:12 logs
-rw-r--r--. 1 1004lucifer 1004lucifer 2401 Dec 5 15:19 NOTICE
-rw-r--r--. 1 1004lucifer 1004lucifer 3370 Dec 5 15:19 README.md
-rw-r--r--. 1 1004lucifer 1004lucifer 6631 Dec 5 15:19 RELEASE-NOTES
-rw-r--r--. 1 1004lucifer 1004lucifer 16577 Dec 5 15:19 RUNNING.txt
drwxr-xr-x. 2 1004lucifer 1004lucifer 30 Dec 5 15:19 temp
drwxr-xr-x. 7 1004lucifer 1004lucifer 81 Dec 5 15:19 webapps
drwxr-xr-x. 3 1004lucifer 1004lucifer 22 Dec 21 03:12 work
[1004lucifer@rhel8 apache-tomcat-11.0.2]
$
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ # appBase 경로 들어감 (Default : webapps)
[1004lucifer@rhel8 apache-tomcat-11.0.2]$ cd webapps/
[1004lucifer@rhel8 webapps]
$
[1004lucifer@rhel8 webapps]$ # appBase 안에있는 Appliation 리스트 조회
[1004lucifer@rhel8 webapps]$ ll
total 4
drwxr-xr-x. 16 1004lucifer 1004lucifer 4096 Dec 5 15:19 docs
drwxr-xr-x. 7 1004lucifer 1004lucifer 99 Dec 5 15:19 examples
drwxr-xr-x. 6 1004lucifer 1004lucifer 79 Dec 5 15:19 host-manager
drwxr-xr-x. 6 1004lucifer 1004lucifer 114 Dec 5 15:19 manager
drwxr-xr-x. 3 1004lucifer 1004lucifer 223 Dec 5 15:19 ROOT
[1004lucifer@rhel8 webapps]
$
[1004lucifer@rhel8 webapps]$ # test1 이라는 디렉토리 생성으로 test1 Application Context 생성 (자동 배포)
[1004lucifer@rhel8 webapps]$ mkdir test1
[1004lucifer@rhel8 webapps]
$
[1004lucifer@rhel8 webapps]$ # 로그에서 test1 Application 동적배포 됐는지 확인 (시간 확인, 기동시간과 다르다)
[1004lucifer@rhel8 webapps]$ tail -f ../logs/catalina.out
21-Dec-2024 03:12:51.707 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/manager]
21-Dec-2024 03:12:51.754 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/manager] has finished in [47] ms
21-Dec-2024 03:12:51.754 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/examples]
21-Dec-2024 03:12:52.116 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/examples] has finished in [362] ms
21-Dec-2024 03:12:52.116 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/host-manager]
21-Dec-2024 03:12:52.143 INFO [main] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/host-manager] has finished in [27] ms
21-Dec-2024 03:12:52.159 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
21-Dec-2024 03:12:52.235 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [1091] milliseconds
21-Dec-2024 03:18:02.196 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/test1]
21-Dec-2024 03:18:02.227 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/home/1004lucifer/apache-tomcat-11.0.2/webapps/test1] has finished in [31] ms
^C
[1004lucifer@rhel8 webapps]$


댓글