SERVER

[Tomcat] server.xml 구조

보겸삼촌 2021. 1. 28. 11:33
톰캣의 server.xml  메인 설정 파일이며, Tomcat startup 초기 설정을 명세하는 책임이 있음

 

 

1. server.xml 태그 예시

<Server>
	<Listener />
	<GlobalNamingResources>
		<Resource>
	</GlobalNamingResources>
	<Service>
	<Connector/>
		<Engine>
			<Realm>
				<Realm />
			</Realm>
			<Logger>
			<Host>
				<Value>
				<Context>
			</Host>
		</Engine>
	</Service>
</Server>

 

 

2. 태그 상세

태그 설명
Server root element, shutdown port 지정, 전체 설정파일의 최상위 element
Listener 리스너
GlobalNaming
Resources
Server의 하위 컴포넌트, Resource 태그 등을 통해 전역 resource를 설정. JNDI의 전역 자원을 나타냄
Resource  웹 애플리케이션 배치 디스크립터의 <resource-ref>와 <resource-env-ref> element의 JNDI 탐색(lookup)에 대해 반환될 자원의 특성도 선언 가능. 그리고, 어떤 자원에 대해 객체팩토리를 사용하도록 설정하는데 사용할 property를 설정하기 위해서는 반드시 그 자원과 같은 이름으로 Resource Parameters를 추가로 정의해야 함.

· auth : 해당 자원관리자에 인증할 때 웹 애플리케이션 프로그램의 코드 상에서 직접 인증할 것인지, 
         애플리케이션의 작동에 따라 컨테이너가 직접 인증할지를 지정(Application / Container)
· description : 자원에 대한 사람이 읽기 쉬운 간단한 설명
· name : 생성할 자원의 이름, java.comp/env Context에 대한 상대적인 이름
· scope : 이 자원관리자를 통해 얻어진 연결의 공유를 허가할 것인지 지정(Shareable / Unshareable)
· type : 웹 애플리케이션이 이 자원에 대해 탐색을 실행할 때 받고자 하는 Java 타입을 나타내는 완전한
          Java
클래스명
Service  독립적인 Tomcat의 서비스, Connector Client와 요청을 주고 응답을 받는 Interface. 하나의 Engine과 결합된 Connector들의 모임
Connector  어떤 특정 Service에 요청을 보내는 그리고 응답을 받는 외부 Client들과의 연결점(interface)를 의미.
다시 말하면, 요청을 받아서 응답이 반환되는 종점(endpoint)를 나타냄. 각 Connector는 처리를 담당하는 관련된 Container로 요청을 전달함.
 기본 값으로 8080포트에 non-SSL HTTP/1.1 Connector가 설정되어 있고, 예시로는 HTTP, AJP 등
Engine 적절한 Host로 처리를 넘기는 역할
Realm  영역(realm)을 설정하여 사용자와 사용자의 역할을 저장할 데이터베이스를 이 Engine에 포함된 모든 Host와 Context에서 공유할 수 있도록 함.
 Database 연결, Single Sing On, Access Log 등 부가기능 이용
Valve  각 호스트 접속 시 영향을 주는 것들, RemoteAddrValve 같이 IP 필터 같은 필터 역할을 하는 것도 있음
Logger  이 Engine에 대한 모든 로그 메시지를 받아서 처리할 로거를 설정
Host  가상 호스트 정의, 특정 가상호스트에 대한 모든 요청을 다룸
· name : 호스트 이름
· appBase : 기본 경로
Context  가상 호스트에서 동작하는 하나의 웹 어플리케이션 각 웹 어플리케이션은 웹 어플리케이션 아카이브(WAR, Web Application Archive) 파일 또는 패킹하지 않은 채로 그에 상응하는 내용을 담고 있는 디렉토리를 기준으로 하며, 이러한 내용은 Servlet 스펙에 설명되어 있음.
 
 각 HTTP 요청을 처리하는데 사용할 웹 어플리케이션의 선택은 각각 정의된 Context의 경로에 대해 요청 URI의 가능한 전치어(prefix) 중 가장 길게 매칭 가능한 Context path를 가진 Context를 선택하면서 생성
 선택된 Context는 수신된 요청을 처리하기 위해 적절한 Servlet을 선택함. 이 선택 작업은 웹 어플리케이션 배치 디스크립터 파일(/WEB-INF/web.xml)에 정의된 Servlet 매핑 정보에 의해 이루어짐.

· docBase : 이 웹 어플리케이션에 대한 Document Base (Context Root) 디렉토리, 또는 WAR 파일의 
              경로명을 나타냄. 이 디렉토리나 WAR 파일에 대한 절대경로명 혹은 이 Context가 정의된 
              Host의 appBase 디렉토리에 대한 상대경로를 지정할 수 있음.
· path : 이 웹 어플리케이션의 Context path를 나타내며, 각 요청의 URI의 시작부분이 Context path와 같
         을 때 해당 웹 어플리케이션이 그 요청을 처리함. 하나의 특정 Host 내의 Context path는 모두 각각
         유일해야 함.
· className : 사용할 Java 구현체 클래스의 이름
                 이 클래스는 반드시 org.apache.catalina.Context Interface를 구현해야 함.

 

 

3. 소스 내 요약

<!--  server.xml 의 root element, server의 shutdown port를 지정 함 -->
<Server port="8005" shutdown="SHUTDOWN">  
      |     <!--  server는 1개 이상의  service를 가질 수 있지만, 보통은 server.xml을 분리해서 관리-->
      +---<Service name="Catalina">   <!-- service는 독립적인 톰캣의 서비스 이다. -->
                  |    <!-- Connector Client와 요청을 주고 응답을 받는 Interface이다. -->
                  +---<Connector port="8080" protocol="HTTP/1.1">
                  |    <!-- Connector 에는 HTTP와 AJP등이 있다. -->
                  +---<Connector port="8009" protocol="AJP/1.3">  <!-- Apache Jserv Protocol -->
                  |    <!-- Engine은 적절한 Host로 처리를 넘기는 역할을 한다. -->
                  +---<Engine name="Catalina" defaultHost="localhost">
                              | <!-- Realm, Value Component를 이용하면 Database연결, Single Sing On,
                              +---<Realm>              Access Log등 부가기능을 이용 할 수 있다. -->
                              |
                              +---<Valve>
                              | 
                              +---<Logger>
                              |   <!-- 가상 호스트를 정의한다. -->
                              +---<Host appBase="webapps">
                                          | <!-- 가상호스트에서 동작하는 하나의 웹 어플리케이션 이다. -->
                                          +---<Context path="" docBase="C:\workspace\project\wiki ">
                                          |
                                          +---<Valve>
                                          |
                                          +---<Realm>
                                          |
                                          +---<Logger>​