[java] Tomcat에서의 정적 파일과 동적 파일 처리 방법

웹 개발을 하다보면 정적 파일과 동적 파일을 처리해야 하는 경우가 많이 발생합니다. Tomcat은 웹 서버와 서블릿 컨테이너의 역할을 동시에 수행하는데, 정적 파일과 동적 파일을 처리하는 방법이 조금씩 다릅니다. 이번 글에서는 Tomcat에서 정적 파일과 동적 파일을 어떻게 처리하는지 알아보도록 하겠습니다.

1. 정적 파일 처리

정적 파일은 웹 애플리케이션에서 변경되지 않는 파일을 의미합니다. 예를 들어 HTML, CSS, JavaScript, 이미지 파일 등이 여기에 해당됩니다. Tomcat에서 정적 파일을 처리하는 방법은 매우 간단합니다.

Tomcat의 webapps 디렉토리 아래에 웹 애플리케이션의 이름으로 된 디렉토리를 생성하고, 그 안에 정적 파일을 저장합니다. 예를 들어, 웹 애플리케이션 이름이 myapp인 경우, 다음과 같은 디렉토리 구조를 갖습니다.

webapps/
└── myapp/
    ├── index.html
    ├── style.css
    ├── script.js
    └── images/
        ├── logo.png
        └── banner.jpg

위와 같이 디렉토리 구조를 생성한 후, 웹 브라우저에서 http://localhost:8080/myapp/index.html과 같이 접근하면 해당 파일이 정상적으로 로딩됩니다. 즉, Tomcat은 webapps 디렉토리 아래의 웹 애플리케이션 디렉토리를 기준으로 정적 파일들을 서비스합니다.

2. 동적 파일 처리

동적 파일은 서버에서 실행되어 동적으로 생성되는 파일을 의미합니다. 이는 주로 서블릿, JSP 등으로 생성되는 파일들을 말합니다. Tomcat에서 동적 파일을 처리하기 위해서는 서블릿 컨테이너에 등록해야 합니다.

Tomcat은 webapps 디렉토리 아래의 WEB-INF 디렉토리를 특별하게 취급합니다. WEB-INF 디렉토리 아래에는 웹 애플리케이션의 설정과 구성 파일이 위치하며, 동적 파일들은 주로 WEB-INF 디렉토리 아래에 classeslib 디렉토리에 저장됩니다. 서블릿이나 JSP 파일은 WEB-INF 디렉토리 이하에 위치시킴으로써 외부에서 직접 접근할 수 없도록 보호됩니다.

또한, 서블릿은 web.xml 파일에 매핑 정보를 등록해야 합니다. web.xml 파일은 WEB-INF 디렉토리 아래에 위치하며, 서블릿 이름과 URL 패턴을 매핑하는 역할을 합니다. 예를 들어, HelloServlet이라는 서블릿 클래스를 hello 패턴으로 매핑하려면 web.xml 파일에 다음과 같은 내용을 추가합니다.

<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello/*</url-pattern>
</servlet-mapping>

위와 같이 서블릿을 등록한 후, 웹 브라우저에서 http://localhost:8080/myapp/hello/과 같이 접근하면 해당 서블릿이 실행되어 동적으로 생성된 페이지를 볼 수 있습니다.

참고 자료