Context

2023. 6. 4. 20:00Spring 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(웹 애플리케이션) 간에 요청을 전달할 수 있게 해주는 설정입니다. crossContexttrue로 설정된 경우, 애플리케이션 간의 상호 호출이 가능해집니다. 이를 통해 한 애플리케이션에서 다른 애플리케이션으로 요청을 포워딩할 수 있습니다.

<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의 동작 과정

  1. 클라이언트 요청 수신: 클라이언트가 특정 경로로 요청을 보내면, 해당 경로에 매핑된 Context가 해당 요청을 처리하게 됩니다.
  2. 서블릿 또는 JSP 실행: Context는 요청이 들어오면 해당 경로에 있는 서블릿이나 JSP 파일을 찾아 실행합니다.
  3. 응답 반환: 서블릿 또는 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