https://sundaland.tistory.com/144
[ ▶ Host ]
아파치 톰캣의 Host는 톰캣 서버 내에서 가상 호스트 (Virtual Host)를 나타내는 구성 요소로, 하나의 Engine 내에서 여러 개의 Host를 정의할 수 있다. Host는 주로 하나의 도메인 또는 서브도메인에 대응하며, 해당 도메인에 대한 웹 애플리케이션을 관리하고, 클라이언트의 요청을 적절한 Context(웹 애플리케이션)로 라우팅하는 역할을 한다.
톰캣의 Host는 웹 서버에서의 가상 호스팅(Virtual Hosting) 기능과 유사하다. 여러 도메인을 한 대의 서버에서 운영할 때 각 도메인에 대해 별도의 애플리케이션을 제공할 수 있도록 도와준다.
[ ▷ Host의 주요 역할 ]
Host는 톰캣 서버의 Engine 내에서 특정 도메인 이름에 대해 웹 애플리케이션을 실행하고 관리하는 역할을 한다. 클라이언트가 특정 도메인(예: www.example.com)으로 요청을 보내면, Host는 해당 도메인에 매핑된 웹 애플리케이션을 실행한다.
- 도메인 처리: 각 Host는 하나의 도메인 또는 서브도메인에 대해 요청을 처리할 수 있다. 하나의 톰캣 서버는 여러 도메인에 대해 여러 Host를 가질 수 있다.
- Context 관리: Host는 하나 이상의 Context(웹 애플리케이션)를 포함할 수 있으며, 이를 통해 도메인 내에서 여러 애플리케이션을 실행할 수 있다. 각 Context는 특정 URL 경로에 매핑되며, 해당 경로로 들어오는 요청을 처리한다.
- 애플리케이션 배포: Host는 웹 애플리케이션을 배포할 위치를 지정하고, 배포된 애플리케이션의 생명 주기를 관리한다.
[ ▷ Host의 구조 ]
Host는 톰캣 서버 내에서 각 도메인에 대한 웹 애플리케이션을 관리하기 위한 여러 가지 속성과 설정을 포함한다. Host는 주로 톰캣의 server.xml 파일에서 설정되며, 여러 속성을 통해 각 도메인에 맞는 설정을 제공한다.
△ name
name 속성은 Host가 처리할 도메인 이름을 지정한다. 예를 들어, http://www.example.com과 같은 도메인 이름을 Host의 name 속성에 지정하면, 톰캣은 해당 도메인으로 들어오는 요청을 이 Host가 처리하도록 한다.
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true" autoDeploy="true">
</Host>
△ appBase
- appBase 속성: 이 Host에 배포된 웹 애플리케이션이 위치할 디렉토리를 지정한다. 기본적으로 톰캣은 webapps 디렉토리를 사용하지만, 각 Host마다 다른 경로를 지정할 수 있다.
- appBase 경로: 는 절대 경로나 상대 경로로 지정할 수 있으며, 상대 경로는 톰캣의 설치 디렉토리에서 상대적인 위치를 기준으로 설정된다.
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true" autoDeploy="true">
</Host>
△ unpackWARs
unpackWARs 속성은 WAR 파일이 배포될 때 이를 자동으로 압축 해제할지 여부를 지정한다. true로 설정하면 WAR 파일이 압축 해제되어 디렉토리 형태로 배포되고 실행된다.
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true">
</Host>
△ autoDeploy
autoDeploy 속성은 Host가 실행 중일 때 새로운 웹 애플리케이션이 배포되거나 업데이트될 경우, 이를 자동으로 감지하고 배포할지 여부를 지정한다. true로 설정하면, 톰캣이 실행 중일 때도 새로운 애플리케이션을 자동으로 배포할 수 있다.
<Host name="www.example.com" appBase="webapps/example" autoDeploy="true">
</Host>
△ deployOnStartup
deployOnStartup 속성은 톰캣이 시작될 때 이 Host에 있는 모든 애플리케이션을 자동으로 배포할지 여부를 결정한다. 이 속성을 true로 설정하면, 톰캣이 시작할 때 appBase 디렉토리에 있는 모든 애플리케이션을 자동으로 배포한다.
<Host name="www.example.com" appBase="webapps/example" deployOnStartup="true">
</Host>
△ Context
Context는 Host 내에서 각 웹 애플리케이션을 정의하는 요소로, 여러 Context가 하나의 Host 내에서 존재할 수 있다. 각 Context는 웹 애플리케이션의 특정 경로에 매핑되며, 이를 통해 도메인 내에서 여러 애플리케이션을 실행할 수 있다.
<Host name="www.example.com" appBase="webapps/example">
<Context path="/" docBase="ROOT" reloadable="true"/>
<Context path="/app1" docBase="app1" reloadable="true"/>
</Host>
- path: 각 Context의 경로를 지정한다. 루트 애플리케이션의 경우 경로는 /로 지정된다.
- docBase: 웹 애플리케이션의 실제 위치를 지정다.
- reloadable: true로 설정되면, 클래스 파일이 변경될 때 애플리케이션이 자동으로 다시 로드된다.
△ Alias
Alias는 하나의 Host에 여러 도메인 이름을 매핑할 수 있게 해주는 설정이다. 이를 통해 여러 도메인이나 서브도메인을 동일한 Host가 처리할 수 있다.
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true" autoDeploy="true">
<Alias>example.com</Alias>
<Alias>www.alias-example.com</Alias>
</Host>
www.example.com , example.com, www.alias-example.com 모두 같은 Host에서 처리된다.
[ ▷ Host의 동작 과정 ]
- 도메인으로 요청 수신: 클라이언트가 특정 도메인(예: www.example.com)으로 요청을 보낼 때, 톰캣은 해당 도메인 이름을 기반으로 적절한 Host를 선택한다.
- Context로 요청 전달: 톰캣이 Host를 선택한 후, URL 경로에 따라 적절한 Context(웹 애플리케이션)로 요청을 전달한다. 예를 들어, http://www.example.com/app1로 요청이 들어오면, Host 내에서 /app1 경로에 매핑된 Context로 요청이 전달된다.
- 서블릿 또는 JSP 실행: 선택된 Context 내에서 해당 요청을 처리할 서블릿이나 JSP 파일을 찾아 실행한다.
- 응답 반환: 처리된 결과는 클라이언트에게 응답으로 반환된다.
[ ▷ Host 설정의 예 ]
▼ 톰캣의 server.xml 파일에서 Host 설정의 예시
<Engine name="Catalina" defaultHost="localhost">
<Host name="www.example.com" appBase="webapps/example" unpackWARs="true" autoDeploy="true">
<Alias>example.com</Alias>
<Alias>alias.example.com</Alias>
<!-- ROOT 애플리케이션 -->
<Context path="/" docBase="ROOT" reloadable="true"/>
<!-- 추가 애플리케이션 -->
<Context path="/app1" docBase="app1" reloadable="true"/>
</Host>
</Engine>
- name: www.example.com이라는 도메인에 대응하는 Host를 정의한다.
- appBase: 이 Host에 배포된 애플리케이션이 위치할 디렉토리이다.
- unpackWARs와 autoDeploy: 새로운 WAR 파일이 자동으로 배포되고 압축 해제된다.
- Alias: 여러 도메인 또는 서브도메인에 대해 동일한 Host가 요청을 처리할 수 있도록 한다.
- Context: 루트 경로 /와 /app1 경로에 대해 각각의 애플리케이션이 배포되어 있다.
'Apache Tomcat' 카테고리의 다른 글
AJP (Apache JServ Protocol) Connector (0) | 2024.10.07 |
---|---|
Context (0) | 2024.10.07 |
Engine (0) | 2024.10.07 |
Service (0) | 2024.10.07 |
Valve (0) | 2024.10.07 |