[java] Tomcat의 리소스 캐싱과 캐시 헤더 설정

웹 애플리케이션을 개발할 때, 성능을 향상시키기 위해 리소스 캐싱과 캐시 헤더 설정은 중요한 역할을 합니다. Tomcat은 이러한 기능을 도와주는 여러 가지 옵션을 제공합니다. 이번 글에서는 Tomcat의 리소스 캐싱과 캐시 헤더 설정에 대해 알아보겠습니다.

리소스 캐싱

리소스 캐싱은 웹 애플리케이션에서 사용되는 정적 파일들을 클라이언트 측에서 캐싱하여 서버의 부하를 줄여주는 기능입니다. Tomcat은 기본적으로 정적 파일들을 캐싱합니다. 하지만, 개발 중인 웹 애플리케이션에서 캐싱을 조정하고 싶다면, web.xml 파일에 다음과 같은 설정을 추가할 수 있습니다.

<!-- web.xml -->
<web-app>
  ...
  <filter>
    <filter-name>ExpiresFilter</filter-name>
    <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
    <init-param>
      <param-name>ExpiresDefault</param-name>
      <param-value>access plus 1 week</param-value>
    </init-param>
    <init-param>
      <param-name>ExpiresByType image/png</param-name>
      <param-value>access plus 1 month</param-value>
    </init-param>
  </filter>
  ...
  <filter-mapping>
    <filter-name>ExpiresFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  ...
</web-app>

위의 설정은 모든 리소스들을 1주일 동안 캐싱하도록 하고, 이미지 파일은 1개월 동안 캐싱하도록 설정한 예시입니다. ExpiresFilter는 Tomcat에서 제공하는 필터로써, 클라이언트 캐시에 대한 헤더를 조정해줍니다.

캐시 헤더 설정

리소스 캐싱 외에도, 캐시 헤더 설정을 통해 클라이언트와 서버 간의 캐싱 정책을 조정할 수 있습니다. WebContent/META-INF/context.xml 파일에 다음과 같은 설정을 추가하여 캐시 헤더를 설정할 수 있습니다.

<!-- context.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<Context>
    ...
    <Resources>
        <PreResources className="org.apache.catalina.webresources.DirResourceSet"
                      base="${catalina.base}/webapps/ROOT/static"
                      webAppMount="/static"
                      cachingAllowed="true"
                      cacheMaxSize="10240"
                      cacheObjectMaxSize="1024"
                      cacheTtl="600"
                      cacheMaxExpire="1800"
                      cacheObjectMaxExpire="600"/>
    </Resources>
    ...
</Context>

위의 설정은 /static 디렉토리에 있는 리소스들을 캐시로 관리하도록 하며, 최대 10MB의 캐시를 사용하도록 설정한 예시입니다. cachingAllowed 속성을 true로 설정하면 캐시 헤더가 활성화되고, cacheTtlcacheMaxExpire 속성을 통해 캐시의 TTL과 최대 만료 시간을 설정할 수 있습니다.

이렇게 Tomcat을 이용하여 리소스 캐싱과 캐시 헤더 설정을 할 수 있으며, 이를 통해 홈페이지의 성능과 응답 속도를 향상시킬 수 있습니다.

참고 자료