2023. 6. 4. 20:00ㆍSpring Framework/Apache Tomcat Server
Apache Tomcat에서 Context는 단일 웹 애플리케이션에 대한 실행 환경을 나타내는 컴포넌트로, 하나의 웹 애플리케이션에 대한 모든 설정과 동작을 관리합니다. Context는 톰캣 내에서 웹 애플리케이션을 배포하고 관리하는 단위이며, 하나의 Host 안에서 여러 개의 Context가 존재할 수 있습니다. 즉, Context는 웹 애플리케이션을 특정 경로에 매핑하여, 클라이언트가 해당 경로로 요청을 보낼 때 해당 Context가 이를 처리하게 합니다.
1. Context의 주요 역할
Context는 하나의 웹 애플리케이션에 대한 실행 환경을 정의하며, 여러 가지 설정을 통해 애플리케이션의 동작 방식을 결정합니다. 다음과 같은 주요 역할을 합니다:
- 웹 애플리케이션 매핑: Context는 특정 URL 경로에 웹 애플리케이션을 매핑하여, 클라이언트가 해당 경로로 요청을 보낼 때 해당 애플리케이션이 요청을 처리하게 합니다.
- 애플리케이션 배포: WAR 파일 또는 디렉토리로 배포된 웹 애플리케이션을 관리하며, 이 애플리케이션에 대한 서블릿, JSP, 정적 파일 등의 리소스를 처리합니다.
- 설정 관리: 웹 애플리케이션의 초기화 매개변수, 보안 설정, 로깅 설정 등 다양한 설정을 관리합니다.
- 재배포 및 핫 디플로이: 톰캣의 Context는 새로운 애플리케이션이 배포되거나 업데이트될 때 애플리케이션을 자동으로 로드하고, 변경 사항을 즉시 반영할 수 있습니다.
2. Context의 구조와 구성 요소
Context는 톰캣의 웹 애플리케이션 실행 환경을 구성하며, 다양한 설정 요소와 옵션을 포함하고 있습니다. 기본적으로 server.xml
또는 context.xml
파일에서 설정됩니다. 또한 각 웹 애플리케이션의 META-INF/context.xml 파일에서도 설정할 수 있습니다.
2.1 Context Path
Context Path는 웹 애플리케이션이 매핑된 경로를 정의합니다. 예를 들어, Context Path가 /myapp
인 경우, 클라이언트가 http://localhost:8080/myapp
으로 요청을 보내면 해당 경로에 매핑된 웹 애플리케이션이 실행됩니다.
- 루트 애플리케이션의 경우 Context Path는 빈 문자열("")로 설정되며, 이는 기본 웹 애플리케이션을 나타냅니다.
- 웹 애플리케이션의 Context Path는 보통 디렉토리 이름 또는 WAR 파일 이름에서 유추되지만, 명시적으로 설정할 수도 있습니다.
2.2 DocBase
DocBase는 웹 애플리케이션의 실제 파일 시스템 경로 또는 WAR 파일 경로를 지정하는 속성입니다. 톰캣이 이 경로를 기준으로 서블릿, JSP, 정적 리소스 등을 로드합니다.
예를 들어, server.xml
파일에서 Context를 설정할 때 DocBase는 다음과 같이 지정됩니다:
<Context path="/myapp" docBase="myapp" reloadable="true"/>
- path: 웹 애플리케이션의 URL 경로를 지정합니다.
- docBase: 웹 애플리케이션 파일이 위치한 경로를 지정합니다. 이는 톰캣의
webapps
디렉토리 하위에 있을 수도 있고, 절대 경로를 사용할 수도 있습니다.
2.3 reloadable
reloadable 속성은 true
로 설정될 경우, 애플리케이션의 클래스 파일이 변경될 때 톰캣이 자동으로 애플리케이션을 다시 로드하도록 합니다. 개발 환경에서는 유용하지만, 프로덕션 환경에서는 성능 문제로 인해 권장되지 않습니다.
<Context path="/myapp" docBase="myapp" reloadable="true"/>
2.4 crossContext
crossContext는 다른 Context(웹 애플리케이션) 간에 요청을 전달할 수 있게 해주는 설정입니다. crossContext가 true
로 설정된 경우, 애플리케이션 간의 상호 호출이 가능해집니다. 이를 통해 한 애플리케이션에서 다른 애플리케이션으로 요청을 포워딩할 수 있습니다.
<Context path="/myapp" docBase="myapp" crossContext="true"/>
2.5 privileged
privileged 속성은 true
로 설정되면 해당 Context가 톰캣의 시스템 기능에 접근할 수 있도록 권한을 부여합니다. 주로 관리 콘솔이나 보안 애플리케이션에서 사용됩니다.
<Context path="/manager" docBase="manager" privileged="true"/>
3. Context 설정 방식
톰캣에서 Context는 다양한 방식으로 설정할 수 있습니다. 주로 server.xml
, context.xml
, 또는 개별 웹 애플리케이션 내의 META-INF/context.xml 파일에서 설정됩니다.
3.1 server.xml
에서 설정
톰캣의 server.xml
파일은 톰캣 서버 전체에 대한 설정을 관리하며, 여기에 Context를 정의할 수 있습니다. 하지만, 일반적으로 권장되지 않는 방법입니다. 각 애플리케이션에 독립적으로 관리되기 위해 context.xml
을 사용하는 것이 더 좋습니다.
<Host name="localhost" appBase="webapps">
<Context path="/myapp" docBase="myapp" reloadable="true"/>
</Host>
- Host 요소 내에 Context를 정의하여 특정 가상 호스트에 웹 애플리케이션을 배포할 수 있습니다.
3.2 conf/context.xml
에서 설정
톰캣의 전역 설정인 conf/context.xml
파일을 사용하여, 모든 웹 애플리케이션에 공통적으로 적용되는 Context 설정을 정의할 수 있습니다. 이 설정은 모든 Context에 대해 공통적으로 적용되므로, 개별 애플리케이션이 별도의 Context 설정을 갖지 않는 한 이 파일의 설정이 사용됩니다.
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
</Context>
3.3 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에 정의하고 있습니다.
4. Context의 동작 과정
- 클라이언트 요청 수신: 클라이언트가 특정 경로로 요청을 보내면, 해당 경로에 매핑된 Context가 해당 요청을 처리하게 됩니다.
- 서블릿 또는 JSP 실행: Context는 요청이 들어오면 해당 경로에 있는 서블릿이나 JSP 파일을 찾아 실행합니다.
- 응답 반환: 서블릿 또는 JSP가 처리한 결과를 Context가 클라이언트에게 응답으로 반환합니다.
예를 들어, http://localhost:8080/myapp/hello
요청이 들어올 경우, /myapp
경로에 매핑된 Context는 /hello
경로에 해당하는 서블릿이나 JSP 파일을 찾아 실행합니다.
5. Context의 추가 기능
5.1 WatchedResource
WatchedResource는 특정 파일이나 디렉토리의 변경 사항을 감지하여 Context를 다시 로드할 수 있게 합니다. 주로 WEB-INF/web.xml과 같은 구성 파일이 변경될 때 자동으로 Context가 다시 로드되도록 설정합니다.
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>
5.2 Resource 정의
Context는 데이터베이스 연결 풀, 파일 저장소 등의 리소스를 정의할 수 있습니다. 예를 들어, JNDI(Java Naming and Directory Interface)를
'Spring Framework > Apache Tomcat Server' 카테고리의 다른 글
Service (0) | 2023.06.06 |
---|---|
Host (0) | 2023.06.06 |
Thread Pool (0) | 2023.05.25 |
AJP (Apache JServ Protocol) Connector (0) | 2023.04.28 |
Realm (0) | 2023.04.25 |