[ 소개 ]
- Engine 요소는 특정 Catalina Service 와 관련된 모든 요청 처리와 관련된 모듈이다.
- 하나 이상의 Connector 로부터 모든 Request 를 수신 및 처리하고, 완성된 Response 를 Connector 에 반환하여 최종적으로 클라이언트에 전송한다.
- 하나의 Service 요소에는 반드시 하나의 Engine 이 포함되어야 하며, Connector 요소 뒤에 위치해야 한다.
[ 속성 ]
1. 공통 속성
- 모든 Engine 구현체는 다음 속성을 지원한다.
속성 | 설명 |
---|---|
backgroundProcessorDelay | Engine 및 자식컨테이너(Host, Context 등) 에서 backgroundProcess 메소드를 호출 지연시간 (기본값: 10 - 10초) 이 값이 0 또는 양수값인경우 해당 Engine 컨테이너에서 Thread 가 생성되며, 자식컨테이너(Host, Context 등) 에서 backgroundProcessorDelay 속성을 별도로 설정하더라도 해당레벨에서는 backgroundProcess 메소드가 호출되지 않는다. [추가정보] Host, Context 에서의 backgroundProcessorDelay 옵션의 기본값은 -1 로 되어있으며 기본적으로는 Engine 의 백그라운드 프로세스만 동작하도록 되어있다. 중복처리를 방지하기위한 설계이며, 관리의 일관성과 성능 최적화를 위해 아래와 같이 적용된다. 1. Engine 사용O -> Host, Context 무시됨 2. Engine 사용X -> Host 사용O -> Context 무시됨 3. Enginx 사용X -> Host 사용X -> Context 적용됨 |
className | 사용할 org.apache.catalina.Engine 인터페이스를 구현한 Java 클래스 이름 (기본값: org.apache.catalina.core.StandardEngine) |
defaultHost | 서버에서 처리할 기본 Host 이름 (server.xml)설정파일에 설정되지 않은 Request 에 대해서 처리할 Host 를 지정하며 Engine 내부에 있는 Host 의 name 속성과 일치해야 한다. |
jvmRoute | 세션 스티키(Session Affinity) 를 위한 고유 식별자 (로드밸런싱)클러스터 환경에 사용되며, 세션 ID 에 이 값을 추가하여 앞단의 Proxy 서버(WebServer)에서 항상 같은 Tomcat 인스턴스로 요청을 전달한다. |
name | 로그 및 오류 메시지에 사용되는 Engine 의 논리 이름이며, 하나의 Server 에 여러개의 Service 요소가 있는경우 고유한 이름을 할당해야 한다. |
startStopThreads | 자식 Host 요소를 병렬로 시작하는데 사용하는 Thread 개수 (기본값: 1) 기본값 1 사용시 ExecutorService 를 사용하는 대신 현재 Thread 가 사용된다. 0 셋팅 시 Runtime.getRuntime().availableProcessors() 의 값이 사용된다. (-)음수값 셋팅 시 Runtime.getRuntime().availableProcessors() + 음수값 이 사용된다. |
1004lucifer
2. 표준 구현 속성
- Engine 의 표준 구현체는 org.apache.catalina.core.StandardEngine 이다.
- 추가 속성은 없음.
[ 중첩 구성 요소 ]
1. Host 요소
- Engine 요소 내에 여러개의 Host 요소를 중첩할 수 있다.
- Host 요소는 server 와 연결된 가상호스트(Virtual Host) 를 나타낸다.
- 최소 하나이상의 Host 요소가 필요하며, defaultHost 속성에 설정된 이름과 일치하는 Host 가 반드시 있어야 한다.
2. Realm 요소
- Engine 요소 내에 하나의 Realm 요소를 중첩할 수 있다.
- 이 Realm 은 사용자 데이터베이스 및 역할(Role) 정보를 관리하며 Engine 내 모든 Host 및 Context 에서 공유된다.
- 다만 하위 수준에서 별도의 Realm 설정이 있는경우 이를 재정의(Override) 할 수 있다.
[ 특수 기능 ]
1. 로그 (Logging)
- Engine 은 org.apache.catalina.core.ContainerBase.[enginename] 로그 카테고리와 연결되며, 대괄호([]) 는 실제 이름의 일부이므로 생략하면 안된다.
- 아래는 conf/logging.properties 파일 내용의 일부
2. 액세스 로그 (Access Logs)
- 웹 서버를 실행하면 일반적으로 각 요청에 대한 정보를 기록하는 Access Log 가 생성된다. (Apache, NginX 의 AccessLog 와 같은 개념)
- 이 로그는 표준 포멧으로 기록되며, 요청 처리 정보가 한줄씩 출력된다.
- Catalina 에는 웹서버가 생성하는것과 동일한 (Standard Format)표준포멧 또는 커스텀포멧 형식으로 AccessLog 를 생성할 수 있는 여러 옵션가능한 Valve 구현체가 포함되어 있다.
- Catalina 에게 다음과 같이 Engine / Host / Context 내부에 Valve 요소를 중첩하여 모든 요청에 대해 Access Log 를 만들 수 있다.
<Engine name="Standalone" ...>
...
<Valve className="org.apache.catalina.valves.AccessLogValve"
prefix="catalina_access_log" suffix=".txt"
pattern="common"/>
...
</Engine>
- 지원되는 구성 속성에 대한 내용은 Access Logging Valves 문서 참고
3. 생명주기 리스너 (Lifecycle Listeners)
- Engine 이 시작(Start) 또는 중지(Stop) 될 때 특정 동작을 수행해야 한다면 Lifecycle Listener 를 등록할 수 있다.
- 지정하는 클래스 이름은 org.apache.catalina.LifecycleListener 인터페이스를 구현해야하고 해당 수명주기 이벤트 발생에 대한 알람을 받게 되며, 이러한 리스너의 구성은 다음과 같다.
<Engine name="Standalone" ...>
...
<Listener className="com.mycompany.mypackage.MyListener" ... >
...
</Engine>
- 해당 클래스에서 추가 속성을 설정할 경우 JavaBean 표준 메서드 명명규칙을 따른다.
4. 요청 필터 (Request Filters)
- Tomcat 은 IP주소 또는 호스트이름(도메인) 기반으로 요청을 필터링 할 수 있으며, 이 필터는 Engine / Host / Context 요소에 적용할 수 있다.
<Engine name="Standalone" ...>
...
<Valve className="org.apache.catalina.valves.RemoteHostValve"
allow=".*\.mycompany\.com|www\.yourcompany\.com"/>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
deny="192\.168\.1\.\d+"/>
...
</Engine>
- allow : 허용할 IP 주소 또는 도메인 패턴 (정규식 사용가능)
- deny : 차단할 IP 주소 또는 도메인 패턴 (정규식 사용가능)
- java.util.regex 정규표현식을 사용하여 유연하게 패턴을 정의할 수 있으며, deny 에서 오는 Request 는 HTTP "Forbidden" 오류로 거부된다.
- 자세한 내용은 Remote Address Filter 와 Remote Host Filter 문서 참고
참고
- https://tomcat.apache.org/tomcat-11.0-doc/config/engine.html
댓글
댓글 쓰기