Q0. 개요
2023.11.24 - [오답 노트/Server] - [Tomcat] Tomcat 정의, 폴더 구조 정리
[Tomcat] Tomcat 정의, 폴더 구조 정리
본 설명에 앞서 서버에 대해 먼저 말해야 할 것 같다. 서버란, 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 시스템으로 프로그램 혹은 장치를 의미한다. 우리가 접하는 모
jinu213.tistory.com
바로 직전에 작성했던 Tomcat정의와 디렉토리 구조에 대해서 작성을 하였다면,
이번에는 주로 사용하는 중요한 설정파일에 대해 정리를 하려고 한다.
Tomcat/conf/server.xml
Tomcat/conf/context.xml
Tomcat/conf/web.xml
Q1. Server.xml에 대하여 (Tomcat 환경설정)
- server elements
- 최상위 컴포넌트 (태그). 각각의 톰캣 인스턴스로 여러 개를 등록할 수 있다.
- 해당 컴포넌트에는 기본적으로 <server port="8005" shutdown="shutdown">으로 톰캣을 종료시킬 포트가 지정되어 있다. 다만, 여러 개를 등록할 경우 중복되지 않게 별도로 사용해야 한다.
(참고로, 여기서 말하는 인스턴스란 각각의 포트 개별로 실행되는 톰캣 서버를 의미한다)
- service elements
- 해당 컴포넌트는 <engine>과 <connector>를 그룹화한 태그이고, 각 서비스에서 발행된 로그를 알아보기 쉽게 서비스의 이름으로 발행되어 생성되는 역할을 하고 있다.
- 기본적으로 <service name="catalina">로 name이라는 이름으로 서비스가 정의되어, 에러로그 및 관리툴에서 식별된다. 단, <service> 컴포넌트도 여러 개를 등록할 수 있는데, 이런 경우에 name의 값을 중복되지 않게 별도로 사용해야 한다. (참고로, <service> : <engine> : <connector>의 관계는 1 : 1 : N으로 선언이 된다)
- engine elements
- HTTP 헤더를 체크하여 특정 요청이 어느 가상 호스트나 컨텍스트에 연결되야할지 판단한다고 한다.
(유독 이해가 잘 되지 않는 컴포넌트...)
- connect elements
- <connector> 컴포넌트의 옵션에 따라 지정된 프로토콜의 접속 포트를 엔진에 전달한다.
- 여러 개의 <connector> 컴포넌트가 있더라도 1개의 <engine> 컴포넌트에서 이를 확인하고 응답한다.
(참고로 톰캣은 기본적으로 HTTP(8080), HTTPS(8443), AJP(8009)이고, protocol이 AJP/1.3이면 Apache Jserv Protocol이다)
- realm elements
- 하나의 <realm>은 해당 톰캣 컨테이너 안의 애플리케이션들은 인증을 위한 고유 인증 정보를 관리한다.
- 보안을 위해, 권한/이름/비밀번호 등의 매핑을 외부 DB로 부터 가져오는 장치라고 한다.
(유독 이해가 잘 되지 않는 컴포넌트...)
- logger elements
- 로그파일의 작성방법을 설정한다.
- value elements
- 상위 구성요소로써의 필터처리를 담당한다.
- <engine>, <host>, <context>와 관련짓는 것이 가능하다.
(유독 이해가 잘 되지 않는 컴포넌트...)
- host elements
- <engin>에 관련된 가상호스트를 정의한다.
- 가상 호스트명의 기본값 name = "localhost" 이고, 시스템의 contextPath를 사용할 수 있다.- appBase는 어플리케이션이 탑재되어있는 디렉토리경로를 절대/상대경로로 설정한다.
- unpackWARs는 true/false를 통해 appBase에 존재하는 war파일을 실행할지 여부를 결정한다.- autoDeploy는 true/false를 통해 톰캣이 기동 중에 웹어플리케이션을 배치한 경우에 자동으로 읽을지를 결정한다.
그 외에도 아래의 몇 가지 컴포넌트들이 있다.Listener elements : <service>의 하위 컴포넌트로, 특정 이벤트들을 지정 및 관리한다.GlobalnamingResource : <server>의 하위 컴포넌트로, <Resource>를 통해 전역 리소스를 설정한다 (JNDI 설정을 한다)(참고로, JNDI란 주로 DB 연결에 사용되는데 연결하고 싶은 DB의 DB Pool을 미리 Naming시켜주는 방법 중 하나이다)
Q2. web.xml에 대하여 (서블릿 환경설정)
- 파일이 존재하는 경로는 catalina(tomcat 인스턴스를 설치한 폴더)/conf/web.xml
- <servlet> 컴포넌트를 이용해서 invoker라는 서블릿을 생성하고, 모든 서블릿을 호출할 수 있는 공통 서블릿을 지정 가능.
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class> org.apache.catalina.servlet.InvokerServlet </servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
- 사용할 수 있도록 환경설정이 된 후에, URL상에서 접근할 수 있도록 경로명을 지정
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern> /servlet/*</url-pattern>
</servlet-mapping>
Q3. Context.xml에 대하여
- Context는 톰캣에서 구동되는 하나의 웹 어플리케이션 자체의 설정이라고 한다.
우선순위-1. server.xml 의 <Host> 의 자식 엘레멘트. (전역)
- path="주로 contextPath" docBase="주로 application디렉토리. 작업공간의 실제위치" 옵션이 있다.
- 톰캣이 요청받으면 Context를 먼저 찾고, Context는 자신이 설정된 web.xml를기반으로 전달받은 요청을 서블릿에 전달한다. 주요 서버 실행 순서는 "request -> catalina (tomcat) -> context -> servlet -> response"이다.
- 파일은 여러가지 경로에서 존재하며 우선적용되는 범위들이 다르다.
우선순위-2. $CATALINA_HOME/conf/context.xml (전역)
우선순위-3. $CATALINA_HOME/conf/[enginename]/[hostname]/ROOT.xml
우선순위-4. $CATALINA_HOME/conf/[enginename]/[hostname]/context.xml.default
우선순위-5. $CATALINA_HOME/conf/[enginename]/[hostname]/[contextpath].xml
우선순위-6. 어플리케이션의 /META_INF/context.xml
파일들은 중복이 존재하는 경우 우선순위가 높은 파일 위주로 적용이 된다.
전역으로는 1, 2번을 주로 사용하고 특정파일 위주로는 5, 6번을 주로 사용한다고 한다.
내용을 정리하면서 애매한 차이점들에 대해 마지막 정리를 하고자 한다.
Q4. appBase와 docBase의 차이점
appBase는 어플리케이션 기반 베이스로, 톰캣이 설치되어있는 디렉토리안의 여러 웹 어플리케이션이 함께 보관되는 webapps이 일반적인 디렉토리이다.
docBase는 문서 기반 베이스로, appBase안의 특정 웹 어플리케이션 디렉토리 또는 WAR파일의 경로이다. 상대경로로 사용한다면 appBase부터의 상대경로이고, 절대경로로 사용한다면 서버의 절대경로를 사용한다)
하지만, appBase와 docBase가 동일하지 않은 드라이브에 위치하는걸 고려했을 때 이해할 수 있도록 정리하자면 다시 정리할 수 있다. (단, 동일하지 않은 드라이브인 경우 appBase는 배치 용도일 뿐, webapp폴더는 이용X )
appBase는 각각의 웹 어플리케이션을 실행(배치)할 수 있는 실제 설치 경로.
docBase는 웹 어플리케이션에서 표시할 실제 소스의 경로.
<Host>컴포넌트의 appBase이 지정되면, 기본적인 웹 루트는 appBase/ROOT이다.
http://localhost/index.html을호출하면 appBase/ROOT/index.html을 호출하게 된다.
하지만, ROOT폴더를 없애거나 다른 폴더로 사용하고 싶은 경우에는
<Context>컴포넌트의 path경로를 ""또는 /로 지정하거나 별도의 폴더명을 지정하면 된다.
path="" docBase="/ROOT2"으로 지정하는 경우 http://localhost/index.html는 /ROOT2/index.html를 호출하게 된다.
Q5. 절대경로와 상대경로의 차이점
절대 경로란 해당 파일의 전체 URL을 의미한다. (ex. C:eclipse/workspace/testProject/src/main/webapp/index.html)
상대 경로란 내부 구조를 기준으로 해당 파일의 경로를 말한다. (ex. /testProject/src/main/webapp/index.html)
/ 기호는 root. 가장 토대가 되는 내부 기준 경로이다.
./ 기호는 현재 경로를 의미한다. 대부분 현재 위치 ./는 생략한다.
../ 기호는 상위 경로를 의미한다. 현재위치의 상위 폴더에 포커스를 맞춘다.
주로 사용되는 용도를 알아보자면,
절대 경로의 경우에는 이미지 또는 미디어를 사용할 때 사용한다.
상대 경로는 디렉토리 내부에서 모듈이나 다른 파일을 import하는 경우에 사용한다. (보안을 위해)
'WEB 심화 > Server' 카테고리의 다른 글
[Tomcat] Tomcat 정의, 폴더 구조 정리 (0) | 2023.11.24 |
---|