server.xml은 아래의 톰캣 아키텍처 구조를 그대로 반영한 설정파일이므로, 다음과 같은 구조를 파악하는 것이 설정파일 이해에 많은 도움이 된다.
1. <Server>
- 최상위 컴포넌트로서, 톰캣의 인스턴스와 동일하다.
- 1개 이상의 <Service>를 포함한다.
- 기본으로 8005 포트가 설정되어 있다. 여러개의 톰캣 인스턴스를 사용할 경우, 포트번호 설정을 다르게 하여야 한다.
속성 |
설명 |
shutdown |
톰캣을 셧다운할 때, 사용할 텍스트를 설정한다. 기본으로 "SHUTDOWN"이 설정되어 있는데 TCP 소켓으로 SHUTDOWN 텍스트를 날리면 톰캣 서버가 종료된다. (링크참조) 따라서, 보안강화를 위해 shutdown의 텍스트를 임의로 변경하거나, 포트 설정을 port="-1"로 셋팅하고 자체적으로 kill 명령을 통해 종료처리를 할 수 있다. |
2. <Listener>
- <Server>의 하위 컴포넌트
- 특정 이벤트들을 리스닝하고 이벤트 발생시 응답한다.
3. <GlobalNamingResources>
- <Server>의 하위 컴포넌트
- <Resource> 등을 통해서 전역 리소스를 설정한다. (JNDI 등...)
4. <Service>
- <Server>의 하위 컴포넌트
- 1개 이상의 <Connector>와 <Engine>을 포함한다.
- 기본으로 설정된 이름은 Catalina이다. 여담으로 Catalina 이름의 유래는 톰캣 서블릿 컨테이너를 고안한 Craig McClanahan이 좋아한 섬(Catalina Island) 이름이였다고 한다. (링크참조)
5. <Connector>
- 톰캣은 기본적으로 HTTP(8080), HTTPS(8443), AJP(8009) 커텍터를 제공한다.
- HTTP Connector : https://tomcat.apache.org/tomcat-7.0-doc/config/http.html
- AJP Connector : https://tomcat.apache.org/tomcat-7.0-doc/config/ajp.html
속성 |
설명 |
port |
포트번호 |
protocol |
프로토콜명 (HTTP/1.1, AJP/1.3 등..) |
acceptCount | Request 큐의 길이를 설정한다. HTTP 요청시, IDLE 쓰레드가 없을 경우 해당값만큼 요청을 대기한다. 대기 큐에 들어간다는 것은 처리가능한 쓰레드가 없다는 의미이며, 기능장애 가능성이 높다. 따라서, 계속 대기 큐에 쌓이도록 하는 것보다 0~10 내외로 값을 낮게 주어 처리하도록 한다. |
redirectPort |
SSL 요청이 들어올 경우 리다이렉트될 포트번호 |
URIEncoding |
GET 요청을 처리할 때 사용할 인코딩 방식을 설정한다. 톰캣은 기본적으로 ISO-8859-1인데, 한글 사용을 위해 UTF-8로 변경을 해주도록 한다 |
useBodyEncodingForURI |
true/false로 설정한다. 이 값은 request.setCharacterEncoding()으로 설정한 값으로 인코딩을 처리한다. 스프링 프레임워크를 사용할 경우 web.xml에서 CharacterEncodingFilter로 선언해주는 값으로 인코딩을 하게 된다 |
maxParameterCount | GET 또는 POST로 전달할 수 있는 파라미터 갯수 기본값은 10000개 0으로 설정하게 되면 갯수에 제한을 두지 않는다. |
maxPostSize | POST로 전달할 수 있는 bytes 사이즈 기본값은 2Mbytes(2097152) 0이하의 숫자로 설정하게 되면 bytes 사이즈에 제한을 두지 않는다 |
connectionTimeout | 타임아웃 밀리세컨드 기본값은 60000(60초)이며 -1일 경우 타임아웃의 제한이 없다 |
connectionUploadTimeout | 데이터 업로드에 대한 타입아웃 밀리세컨드 이 설정은 disableUploadTimeout이 false일 경우에 효과가 있다 |
maxThreads | Connector에서 처리할 수 있는 동시 요청 쓰레드 갯수 기본값은 200개 아파치와 연동할 경우 MaxClients 값과 관계가 있다. 아파치 MaxClients가 톰캣의 maxThreads보다 많을 경우 hang이 걸릴수가 있다.
※ maxThreads X 로드밸런싱 갯수 = MaxClients * 1.1 (또는 1.2) 아파치 prefork 방식 기준이다.
※ http://knight76.tistory.com/entry/Apache-http-서버와-tomcat-서버간의-연결-유의사항 참고 |
minSpareThreads | 최소로 유지할 쓰레드 갯수 기본값은 10 |
maxSpareThreads
| idle 상태로 유지할 최대 쓰레드 갯수
톰캣6 이후로 없어진 속성값. 톰캣 5.5까지 지원한다. |
6. <Engine>
- 커넥터로 수신한 클라이언트의 요청을 처리하고 응답한다.
- 기본으로 설정된 이름은 Catalina이다.
7. <Host>
- VirtualHost를 의미하며, name 속성으로 설정된 호스트명으로 웹 애플리케이션을 제공한다.
- 기본으로 설정된 이름은 localhost이다.
- 하나의 톰캣 인스턴스에 여러개의 <Host>도 사용가능하나, 보통 톰캣 인스턴스당 1개의 <Host> 설정을 추천한다.
속성 | 설명 |
appBase | 웹 애플리케이션이 존재하는 경로. CATALINA_BASE의 webapps를 기본으로 한다. |
unpackWARs | 기동시 war 파일을 압축해제한다. |
autoDeploy | class 파일, JSP, XML 등이 갱신되었을 때 자동으로 배포한다. |
8. <Context>
- 웹 애플리케이션의 의미한다.
- <Context> 설정이 <Host>안에 없을 경우 기본적으로 webapps 하위의 ROOT 디렉토리(or ROOT.war)을 기본경로(http://localhost:8080/)로 설정한다.
- 컨텍스트 설정은 CATALINA_BASE 하위의 conf 디렉토리에서도 설정할 수 있다.
예제) %CATALINA_BASE%\conf\[엔진명]\[호스트명] 하위에 설정파일 추가.
- %CATALINA_BASE%\conf\Catalina\localhost\host-manager.xml
<Context antiResourceLocking="false" privileged="true" useHttpOnly="true" />
- %CATALINA_BASE%\conf\Catalina\localhost\manager.xml
<Context antiResourceLocking="false" privileged="true" useHttpOnly="true" />
9. <Valve>
- 요청을 처리하는 파이프라인 사이에 추가되어 특별한 처리를 수행하는 컴포넌트다.
- Valve는 Catalina 컨테이너(Context, Host 또는 Engine)에 추가되어, 요청과 응답 사이에 pre-processing을 가능하게 한다. <Context>에 추가되면 해당 웹 애플리케이션에 Valve가 적용, <Host>에 추가되면 모든 웹 애플리케이션에 Valve가 적용된다.
- Servlet Filter와 비슷한 기능이나, Servlet은 EE 스펙, Valve는 톰캣 스펙이다.
※참고자료
- 리눅스를 활용한 회사 인프라 구축의 모든 것
- http://i5on9i.blogspot.kr/2014/07/tomcat-valve-servlet-filter.html
- https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html
- http://bcho.tistory.com/788