Tomcat 서버에서 정적 페이지를 처리하는 방법

2023. 6. 13. 19:14Spring Framework/Apache Tomcat Server

Tomcat 서버에서 정적 페이지를 처리하는 방법은 기본적으로 간단하며, Tomcat은 정적 리소스(HTML, CSS, JavaScript, 이미지 등)를 기본적으로 처리할 수 있도록 설계되어 있습니다. Tomcat 서버는 Servlet 기반의 동적 웹 애플리케이션뿐만 아니라, 정적 리소스를 서빙하는 기능도 제공하므로 별도의 설정 없이도 정적 페이지를 제공할 수 있습니다.

정적 페이지 처리 과정

  1. 웹 애플리케이션 디렉토리 구조:
    Tomcat 서버는 웹 애플리케이션을 WAR(Web Application Archive) 형식으로 배포하거나, 특정 폴더 구조로 배포된 애플리케이션을 서빙합니다. 정적 페이지는 다음과 같은 디렉토리 구조에서 위치할 수 있습니다:

    /webapps/myapp/
       ├── index.html
       ├── about.html
       └── resources/
            ├── styles.css
            └── scripts.js

    여기서 webapps는 Tomcat 서버의 기본 배포 디렉토리이며, myapp은 배포된 웹 애플리케이션의 컨텍스트 루트(context root)가 됩니다. 예를 들어, index.html 파일은 http://localhost:8080/myapp/index.html로 접근할 수 있습니다.

  2. 정적 리소스 서빙:
    Tomcat은 기본적으로 HTML, CSS, JavaScript, 이미지 파일을 정적 파일로 간주하고 자동으로 클라이언트에게 서빙합니다. Tomcat이 이러한 정적 리소스를 처리하는 원리는 DefaultServlet이라는 서블릿을 통해 이뤄집니다. DefaultServlet은 정적 리소스에 대한 HTTP 요청을 처리하는 역할을 합니다.

    예를 들어:

    • http://localhost:8080/myapp/index.html 요청 시, Tomcat은 /webapps/myapp/index.html 파일을 찾아 클라이언트에게 반환합니다.
    • http://localhost:8080/myapp/resources/styles.css 요청 시, resources 디렉토리 아래에 있는 styles.css 파일이 반환됩니다.
  3. 서버 설정:
    기본적으로 Tomcat의 conf/web.xmlDefaultServlet이 설정되어 있습니다. 이 서블릿이 정적 리소스를 처리하며, 특별한 경우가 아니라면 추가적인 설정이 필요하지 않습니다. 다음은 기본 설정의 예시입니다:

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    이 설정에서 DefaultServlet이 모든 경로(/)에 대해 정적 리소스를 처리할 수 있도록 매핑되어 있습니다.

  4. 정적 파일 캐싱:
    Tomcat에서는 정적 리소스를 캐싱하여 성능을 최적화할 수 있습니다. 이를 위해 DefaultServlet에 캐싱 관련 파라미터를 설정할 수 있습니다:

    <init-param>
        <param-name>cacheMaxSize</param-name>
        <param-value>10240</param-value> <!-- 캐시 최대 크기 (KB) -->
    </init-param>
    <init-param>
        <param-name>cacheTTL</param-name>
        <param-value>5000</param-value> <!-- 캐시 유지 시간 (ms) -->
    </init-param>

    이러한 설정을 통해 정적 파일을 브라우저에 캐싱하여 서버의 부하를 줄이고, 리소스 로딩 속도를 향상시킬 수 있습니다.

정적 리소스 디렉토리 지정

정적 리소스를 특정 디렉토리에 배치하고 싶다면, Tomcat의 context.xml이나 server.xml에 디렉토리를 별도로 지정할 수 있습니다. 예를 들어, myapp 애플리케이션의 정적 리소스를 별도의 디렉토리에서 서빙하고 싶다면:

<Context docBase="/path/to/static/resources" path="/myapp" />

이렇게 설정하면, /path/to/static/resources 디렉토리의 정적 파일들이 http://localhost:8080/myapp/에서 접근할 수 있게 됩니다.

결론

Tomcat에서 정적 페이지를 처리하는 방법은 매우 간단하며, 기본적으로 webapps 디렉토리 아래에 정적 파일을 배치하면 자동으로 클라이언트에게 서빙됩니다. 필요에 따라 캐싱 설정이나 파일 경로를 지정할 수 있으며, 이러한 기본 설정을 통해 효율적으로 정적 리소스를 관리할 수 있습니다.

'Spring Framework > Apache Tomcat Server' 카테고리의 다른 글

Thread Pool  (0) 2023.09.21
Apache Tomcat Server Arch  (0) 2023.06.23
Service  (0) 2023.06.06
Host  (0) 2023.06.06
Context  (0) 2023.06.04