[java] JSP에서의 캐싱 처리 방법

웹 애플리케이션 개발 시 성능 향상을 위해 캐싱 처리는 중요합니다. JSP에서도 캐싱을 처리하는 방법을 알아보겠습니다.

1. 페이지 레벨 캐싱

JSP에서는 각 페이지마다 캐싱 옵션을 설정할 수 있습니다. 다음은 페이지 레벨 캐싱을 위해 사용할 수 있는 기술입니다.

1-1. <%@ page %> 지시자를 사용한 캐싱 설정

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" cache="true" %>

위의 예제에서 cache="true"로 설정되어 있으므로 해당 JSP 페이지는 캐싱이 됩니다. 이렇게 설정하면 같은 요청에 대해서는 JSP가 다시 컴파일되지 않고 캐시된 결과를 사용합니다. 하지만 페이지가 업데이트되면 캐시된 내용이 갱신되지 않아 문제가 발생할 수 있습니다.

1-2. <%@ include file="cached.jsp" %>를 사용한 템플릿화

일부 JSP 페이지만 캐싱하고 싶을 때는 템플릿화를 사용할 수 있습니다. 캐싱할 부분을 따로 파일로 분리하고 <%@ include %> 지시자를 사용해 삽입하는 방식입니다.

<!-- cached.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>캐싱된 JSP 페이지</title>
</head>
<body>
    <h1>캐싱 예제</h1>
    <p>이 부분은 캐싱됩니다.</p>
    <%-- 캐싱될 부분은 여기에 작성 --%>
</body>
</html>
<!-- main.jsp -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>메인 JSP 페이지</title>
</head>
<body>
    <h1>메인 페이지</h1>
    <p>이 부분은 매번 새로 로딩됩니다.</p>
    <%@ include file="cached.jsp" %>
</body>
</html>

위의 예제에서 <!-- 캐싱될 부분은 여기에 작성 --> 주석 부분은 캐싱된 결과를 보여줄 부분을 작성하는 곳입니다. 이렇게 템플릿을 사용하면 캐싱되어야 하는 부분과 그렇지 않은 부분을 명확하게 구분할 수 있습니다.

2. 브라우저 캐싱 활용

또 다른 방법으로는 브라우저 캐싱을 이용하는 것입니다. 정적 리소스(이미지, CSS, JavaScript 등)는 서버에서 한 번만 요청하여 받아오고, 이후에는 브라우저에서 캐시된 내용을 사용합니다. 이를 통해 서버의 부하를 감소시킬 수 있습니다.

<%
    response.setHeader("Cache-Control", "max-age=3600");
    response.setHeader("Pragma", "cache");
    response.setDateHeader("Expires", new Date().getTime() + 3600000);
%>

위의 예제는 response 객체를 사용하여 캐시 제어 헤더를 설정하는 방법입니다. max-age를 설정하면 캐시 유지 시간을 지정할 수 있습니다. Expires 헤더를 사용해 캐시 만료 시간을 설정할 수도 있습니다.

결론

JSP에서 캐싱 처리 방법을 사용하여 웹 애플리케이션의 성능을 향상시킬 수 있습니다. 페이지 레벨 캐싱과 브라우저 캐싱을 적절히 활용하여 사용자로부터 발생하는 요청을 최소화하고 서버의 부하를 감소시키는 것이 중요합니다.

참고 문헌: