https://sundaland.tistory.com/120
[ ▶ Context ]
Apache Tomcat에서 Context는 단일 웹 애플리케이션에 대한 실행 환경을 나타내는 컴포넌트로, 하나의 웹 애플리케이션에 대한 모든 설정과 동작을 관리한다. Context는 톰캣 내에서 웹 애플리케이션을 배포하고 관리하는 단위이며, 하나의 Host 안에서 여러 개의 Context가 존재할 수 있다. 즉, Context는 웹 애플리케이션을 특정 경로에 매핑하여, 클라이언트가 해당 경로로 요청을 보낼 때 해당 Context가 이를 처리하게 한다.
[ ▷ Context의 주요 역할 ]
Context는 하나의 웹 애플리케이션에 대한 실행 환경을 정의하며, 여러 가지 설정을 통해 애플리케이션의 동작 방식을 결정한다.
- 웹 애플리케이션 매핑: Context는 특정 URL 경로에 웹 애플리케이션을 매핑하여, 클라이언트가 해당 경로로 요청을 보낼 때 해당 애플리케이션이 요청을 처리하게 한다.
- 애플리케이션 배포: WAR 파일 또는 디렉토리로 배포된 웹 애플리케이션을 관리하며, 이 애플리케이션에 대한 서블릿, JSP, 정적 파일 등의 리소스를 처리한다.
- 설정 관리: 웹 애플리케이션의 초기화 매개변수, 보안 설정, 로깅 설정 등 다양한 설정을 관리한다.
- 재배포 및 핫 디플로이: 톰캣의 Context는 새로운 애플리케이션이 배포되거나 업데이트될 때 애플리케이션을 자동으로 로드하고, 변경 사항을 즉시 반영할 수 있다.
[ ▷ Context의 구조와 구성 요소 ]
Context는 톰캣의 웹 애플리케이션 실행 환경을 구성하며, 다양한 설정 요소와 옵션을 포함하고 있다. 기본적으로 server.xml 또는 context.xml 파일에서 설정된다. 또한 각 웹 애플리케이션의 META-INF/context.xml 파일에서도 설정할 수 있다.
△ Context Path
Context Path는 웹 애플리케이션이 매핑된 경로를 정의한다. 예를 들어, Context Path가 /myapp인 경우, 클라이언트가 http://localhost:8080/myapp으로 요청을 보내면 해당 경로에 매핑된 웹 애플리케이션이 실행된다.
- 루트 애플리케이션의 경우 Context Path는 빈 문자열("")로 설정되며, 이는 기본 웹 애플리케이션을 나타낸다.
- 웹 애플리케이션의 Context Path는 보통 디렉토리 이름 또는 WAR 파일 이름에서 유추되지만, 명시적으로 설정할 수도 있다.
△ DocBase
DocBase는 웹 애플리케이션의 실제 파일 시스템 경로 또는 WAR 파일 경로를 지정하는 속성이다. 톰캣이 이 경로를 기준으로 서블릿, JSP, 정적 리소스 등을 로드한다.
▼ server.xml 파일에서 Context를 설정할 때 DocBase는 아래와 같이 지정됩니다.
<Context path="/myapp" docBase="myapp" reloadable="true"/>
- path: 웹 애플리케이션의 URL 경로를 지정한다.
- docBase: 웹 애플리케이션 파일이 위치한 경로를 지정한다. 이는 톰캣의 webapps 디렉토리 하위에 있을 수도 있고, 절대 경로를 사용할 수도 있다.
△ crossContext
crossContext는 다른 Context(웹 애플리케이션) 간에 요청을 전달할 수 있게 해주는 설정이다. crossContext가 true로 설정된 경우, 애플리케이션 간의 상호 호출이 가능해진다. 이를 통해 한 애플리케이션에서 다른 애플리케이션으로 요청을 포워딩할 수 있다.
<Context path="/myapp" docBase="myapp" crossContext="true"/>
△ privileged
privileged 속성은 true로 설정되면 해당 Context가 톰캣의 시스템 기능에 접근할 수 있도록 권한을 부여한다. 주로 관리 콘솔이나 보안 애플리케이션에서 사용된다.
<Context path="/manager" docBase="manager" privileged="true"/>
[ ▷ Context 설정 방식 ]
톰캣에서 Context는 다양한 방식으로 설정할 수 있다. 주로 server.xml, context.xml, 또는 개별 웹 애플리케이션 내의 META-INF/context.xml 파일에서 설정된다.
△ server.xml에서 설정
톰캣의 server.xml 파일은 톰캣 서버 전체에 대한 설정을 관리하며, 여기에 Context를 정의할 수 있다. 하지만, 일반적으로 권장되지 않는 방법이다. 각 애플리케이션에 독립적으로 관리되기 위해 context.xml을 사용하는 것이 더 좋다.
<Host name="localhost" appBase="webapps">
<Context path="/myapp" docBase="myapp" reloadable="true"/>
</Host>
Host 요소 내에 Context를 정의하여 특정 가상 호스트에 웹 애플리케이션을 배포할 수 있다.
△ conf/context.xml에서 설정
톰캣의 전역 설정인 conf/context.xml 파일을 사용하여, 모든 웹 애플리케이션에 공통적으로 적용되는 Context 설정을 정의할 수 있다. 이 설정은 모든 Context에 대해 공통적으로 적용되므로, 개별 애플리케이션이 별도의 Context 설정을 갖지 않는 한 이 파일의 설정이 사용된다.
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
</Context>
△ META-INF/context.xml에서 설정
가장 일반적인 방법은 각 웹 애플리케이션의 META-INF 디렉토리 내에 context.xml 파일을 배치하는 것이다. 이를 통해 애플리케이션마다 고유한 Context 설정을 정의할 수 있다.
myapp/
├── META-INF/
│ └── context.xml
├── WEB-INF/
│ └── web.xml
├── index.jsp
▼ context.xml 파일 예시
<Context reloadable="true">
<Resource name="jdbc/mydb"
auth="Container"
type="javax.sql.DataSource"
maxTotal="100"
maxIdle="30"
maxWaitMillis="10000"
username="dbuser"
password="dbpassword"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"/>
</Context>
이 예시에서는 데이터베이스 연결 풀(Resource) 설정을 Context에 정의하고 있다.
[ ▷ Context의 동작 과정 ]
- 클라이언트 요청 수신: 클라이언트가 특정 경로로 요청을 보내면, 해당 경로에 매핑된 Context가 해당 요청을 처리하게 된다.
- 서블릿 또는 JSP 실행: Context는 요청이 들어오면 해당 경로에 있는 서블릿이나 JSP 파일을 찾아 실행한다.
- 응답 반환: 서블릿 또는 JSP가 처리한 결과를 Context가 클라이언트에게 응답으로 반환다.
예를 들어, http://localhost:8080/myapp/hello 요청이 들어올 경우, /myapp 경로에 매핑된 Context는 /hello 경로에 해당하는 서블릿이나 JSP 파일을 찾아 실행한다.
[ ▷ Context의 추가 기능 ]
△ WatchedResource
WatchedResource는 특정 파일이나 디렉토리의 변경 사항을 감지하여 Context를 다시 로드할 수 있게 한다. 주로 WEB-INF/web.xml과 같은 구성 파일이 변경될 때 자동으로 Context가 다시 로드되도록 설정한다.
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
△ Resource 정의
Context는 데이터베이스 연결 풀, 파일 저장소 등의 리소스를 정의할 수 있다. 예를 들어, JNDI(Java Naming and Directory Interface)를
'Apache Tomcat' 카테고리의 다른 글
AJP (Apache JServ Protocol) Connector (0) | 2024.10.07 |
---|---|
Host (0) | 2024.10.07 |
Engine (0) | 2024.10.07 |
Service (0) | 2024.10.07 |
Valve (0) | 2024.10.07 |