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

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

Tomcat은 기본적으로 정적 리소스(HTML, CSS, JavaScript, 이미지 등)를 처리할 수 있도록 설계되어 있으며, 추가적인 설정 없이도 클라이언트에게 정적 페이지를 제공할 수 있습니다.

1. 웹 애플리케이션 디렉토리 구조

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

/webapps/myapp/
├── index.html
├── about.html
└── resources/
    ├── styles.css
    └── scripts.js
  • webapps : Tomcat 서버의 기본 배포 디렉토리
  • myapp : 배포된 웹 애플리케이션의 컨텍스트 루트(context root)
  • 정적 리소스는 브라우저에서 다음과 같이 접근할 수 있음:
    • http://localhost:8080/myapp/index.html
    • http://localhost:8080/myapp/resources/styles.css

2. 정적 리소스 서빙 원리

Tomcat은 DefaultServlet을 통해 정적 리소스를 처리합니다.

  • DefaultServlet은 HTML, CSS, JavaScript, 이미지 등의 요청을 처리하는 역할을 합니다.
  • 별도의 서블릿을 설정하지 않더라도 기본적으로 정적 파일을 서빙함.

예제 요청 처리 과정


| 요청 URL | Tomcat의 처리 방식 |
|---------|----------------|
| http://localhost:8080/myapp/index.html | /webapps/myapp/index.html 파일을 찾아 반환 |
| http://localhost:8080/myapp/resources/styles.css | /webapps/myapp/resources/styles.css 파일을 찾아 반환 |

3. DefaultServlet 설정

Tomcat의 conf/web.xml에는 기본적으로 DefaultServlet이 설정되어 있습니다. 이 서블릿이 정적 리소스를 처리하며, 특별한 경우가 아니라면 추가적인 설정이 필요하지 않습니다.

기본 설정 예시 (conf/web.xml의 일부)

<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이 모든 요청(/)을 처리하도록 매핑됨
  • listings 값을 false로 설정하여 디렉토리 목록 표시를 비활성화

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>
  • cacheMaxSize: 캐시의 최대 크기(단위: KB)
  • cacheTTL: 캐시 유지 시간(단위: ms)

5. 정적 리소스 디렉토리 변경

기본적으로 정적 파일은 webapps/myapp/ 내에 위치해야 하지만, 이를 별도의 디렉토리로 변경할 수도 있습니다.

설정 방법 (conf/context.xml 또는 META-INF/context.xml)

<Context docBase="/path/to/static/resources" path="/myapp" />
  • /path/to/static/resources : 정적 리소스가 위치한 디렉토리
  • http://localhost:8080/myapp/에서 해당 정적 파일 접근 가능

6. Summary

  • Tomcat은 기본적으로 정적 리소스를 처리할 수 있음
    • webapps/myapp/ 디렉토리에 정적 파일을 배치하면 자동으로 서빙됨
  • 정적 파일 요청은 DefaultServlet이 처리
    • 특별한 설정 없이 HTML, CSS, JavaScript, 이미지 등을 제공할 수 있음
  • 캐싱을 활용하여 성능 최적화 가능
    • cacheMaxSizecacheTTL 설정 가능
  • 정적 리소스의 디렉토리를 변경할 수도 있음
    • Context 설정을 통해 변경 가능

 

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

Tomcat Context Root  (0) 2024.04.26
Thread Pool  (0) 2023.09.21
Service  (0) 2023.06.06
Host  (0) 2023.06.06
Context  (0) 2023.06.04