https://sundaland.tistory.com/272
[ ▶ Engine ]
Apache Tomcat에서 Engine은 톰캣의 내부에서 중요한 역할을 하는 컴포넌트로, 톰캣의 Service와 연관된 여러 가상 호스트(Host)에 대한 요청을 처리하는 서블릿 컨테이너이다.
클라이언트의 요청이 Connector를 통해 수신되면, 그 요청은 Engine으로 전달되어 적절한 웹 애플리케이션으로 라우팅되고, 실제로 서블릿과 JSP 페이지가 처리되는 과정이 시작된다.
[ ▷ Engine의 주요 역할 ]
Engine은 Service의 핵심 컴포넌트로서, 여러 Connector에서 전달된 요청을 처리한다. 엔진은 요청을 적절한 가상 호스트로 라우팅하고, 각 가상 호스트는 해당하는 웹 애플리케이션을 통해 클라이언트에게 응답을 생성한다.
- 요청 라우팅: 엔진의 가장 기본적인 역할은 클라이언트로부터 전달받은 요청을 올바른 Host(가상 호스트)로 전달하는 것이다. 하나의 Engine에는 여러 Host가 있을 수 있으며, 각 Host는 서로 다른 도메인 또는 서브도메인에 대응한다.
- 서블릿 처리: 톰캣 Engine은 요청을 적절한 Host와 그 안의 Context(웹 애플리케이션)에 라우팅하여, 해당 서블릿을 실행한다. 서블릿의 실행 결과로 생성된 응답은 클라이언트에게 반환된다.
- 구성 요소 통합: Engine은 톰캣의 다양한 구성 요소들을 결합하여 전체 서블릿 실행 환경을 구성한다. 이는 요청을 수신하고, 올바른 웹 애플리케이션으로 전달한 후, 서블릿을 통해 응답을 생성하는 전체 과정의 중심에 있다.
[ ▷ 엔진의 구조 ]
Engine은 여러 하위 컴포넌트들과 함께 작동하여 요청을 처리한다.
△ Host
- Host는 Engine 내에서 특정 가상 호스트를 나타내며, 각 도메인 또는 서브도메인에 대응한다. Engine은 여러 Host를 가질 수 있으며, 각 Host는 하나 이상의 웹 애플리케이션을 관리한다.
- 요청이 엔진에 전달되면, Host는 요청의 도메인 이름에 따라 적절한 가상 호스트를 선택하여 요청을 처리한다.
- Host는 server.xml 파일에서 <Host> 요소로 설정된다. 예를 들어, 다음과 같은 설정을 통해 특정 도메인에 대해 가상 호스트를 정의할 수 있다.
<Host name="www.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="exampleApp" reloadable="true"/>
</Host>
여기서 name 속성은 도메인 이름을 지정하며, appBase는 웹 애플리케이션이 배치된 디렉토리를 가리킨다.
△ Context
- Context는 Host 내에서 개별 웹 애플리케이션을 나타낸다. Host가 도메인별로 가상 호스트를 관리하는 반면, Context는 특정 경로(예: /app1, /app2)에 대응하는 개별 애플리케이션을 관리한다.
- 각 Context는 웹 애플리케이션의 루트 디렉토리나 WAR 파일을 가리키며, 서블릿 및 JSP 파일을 포함한 애플리케이션의 전반적인 실행 환경을 제공한다.
- Context는 Host 내에서 여러 개가 존재할 수 있으며, 이를 통해 하나의 호스트에 여러 웹 애플리케이션을 배포할 수 있다.
△ Realm
- Realm은 보안과 인증을 담당하는 컴포넌트로, 사용자의 자격 증명(예: 사용자 이름과 비밀번호)을 확인하고, 웹 애플리케이션 내의 리소스에 대한 접근 권한을 부여하는 역할을 한다.
- Engine 수준에서 설정된 Realm은 엔진 내부의 모든 Host와 Context에 대해 적용된다. 즉, 엔진 레벨에서 정의된 Realm은 엔진 내의 모든 웹 애플리케이션에 동일하게 적용된다.
- Realm은 여러 종류가 있으며, 데이터베이스나 LDAP, 파일 기반 사용자 인증을 지원한다.
△ Valve
- Valve는 요청 처리의 특정 단계에서 작동하는 필터와 비슷한 역할을 한다. 엔진, 호스트, 또는 컨텍스트 수준에서 설정할 수 있으며, 요청이 해당 단위로 들어올 때마다 작동한다.
- Valve는 보안 로깅, 인증 및 권한 부여와 같은 작업을 수행하는 데 자주 사용된다.
- Engine 수준에서 설정된 Valve는 엔진 내의 모든 Host와 Context에 적용되며, 엔진을 거치는 모든 요청에 대해 작동한다.
예를 들어, 아래와 같은 AccessLogValve는 요청에 대한 접근 로그를 기록하는 데 사용될 수 있다.
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b"/>
[ ▷ Engine의 동작 과정 ]
Engine은 톰캣에서 HTTP 요청을 처리하는 중요한 단계에 위치한다.
- Connector로부터 요청 수신: 클라이언트로부터 HTTP 요청이 Connector로 들어오면, Connector는 이 요청을 Engine으로 전달한다.
- Host 선택: 엔진은 요청의 호스트 헤더 (도메인 이름)을 분석하여 적절한 가상 호스트 (Host)를 선택한다.
- Context 선택: Host는 요청의 URI를 분석하여 적절한 Context (웹 애플리케이션)를 선택한다. URI 루트 경로와 일치하는 Context가 선택된다.
- 서블릿 실행: 선택된 Context 내에서 서블릿 컨테이너는 요청을 처리할 서블릿을 찾아 실행한다. 서블릿은 클라이언트의 요청을 처리하고 응답을 생성한다.
- 응답 반환: 서블릿이 응답을 생성한 후, 응답은 Connector를 통해 클라이언트로 반환된다.
[ ▷ Engine의 설정 ]
톰캣의 server.xml 파일에서 Engine 컴포넌트를 설정할 수 있다.
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"/>
</Engine>
</Service>
- name: 엔진의 이름일 지정하며, 주로 카탈리나가 기본값으로 사용된다.
- defaultHost: 엔진이 요청을 처리할 때 사용할 기본 호스트로 지정한다. 호스트 헤더가 비어 있거나 일치하지 않을 때, 기본 호스트가 사용된다.
- Realm: 인증과 권한 부여를 처리하는 Realm을 설정할 수 있다.
- Host: 여러 호스트를 정의하여 도메인 별로 웹 애플리케이션을 배포할 수 있다.
[ ▷ Engine의 특징 요약 ]
- Engine은 톰캣의 핵심 서블릿 컨테이너로서, HTTP 요청을 처리하고 서블릿 및 JSP를 실행하는 과정의 중추적 역할을 한다.
- 여러 가상 호스트 (Host)와 웹 애플리케이션 (Context)을 처리하며, 요청을 올바른 웹 애플리케이션으로 라우팅하는 역할을 한다.
- Valve와 Realm과 같은 기능을 통해 추가적인 보안 및 로깅 기능을 제공한다.
'Apache Tomcat' 카테고리의 다른 글
Context (0) | 2024.10.07 |
---|---|
Host (0) | 2024.10.07 |
Service (0) | 2024.10.07 |
Valve (0) | 2024.10.07 |
Apache Tomcat Server Arch (0) | 2024.10.07 |