• 검색 결과가 없습니다.

기본 내용

문서에서 JEUS Web Engine 안내서 (페이지 182-186)

6.2. JSP Caching

6.2.1. 기본 내용

JEUS WebCache에서는 사용자 정의(custom) 태그로 <jeus:cache>를 사용한다.

<jeus:cache> 내에 JSP 페이지 내에서 Caching을 원하는 콘텐츠가 있는 부분을 입력하면 첫 번째 요청 에서 태그 내의 바디 콘텐츠(body contents)가 생성되어 브라우저에 전송되고 이 콘텐츠는 Caching된다.

다음 요청부터는 메모리에 Caching된 콘텐츠가 브라우저로 보내진다.

<jeus:cache>태그를 사용하는 기본적인 형식은 다음과 같다.

<%@ taglib uri=”http://www.tmaxsoft.com/jeuscache” prefix=”jeus” %>

<jeus:cache name=”...” key=”...” scope=”...” timeout=”...”

size=”...” async=”...” df=”...”>

. . . Body content to be cached. . .

</jeus:cache>

위 설명에서 제외된 flush 속성은 닫힌 태그(/>)를 사용하는데 속성에 대한 설명은 “6.2.2. <cache> 태그”

를 참고한다.

JSP Caching에서 사용하는 알고리즘은 LRU이다. 그래서 JEUS WebCache 최대 허용 개수를 초과하면 LRU 알고리즘에 의해서 기존에 Caching된 엔트리가 제거된다.

그리고 TLD(Tag Libarary Descriptor) 파일은 jeus.jar 파일에 포함되어 배포된다. jeuscache.tld 파일에 대 한 URI 정보를 JSP 엔진에 전달하기 위해서 <jeus:cache> 태그 내의 'taglib uri'를 반드시 'http://www.tmaxsoft.com/jeuscache'으로 명시해야 한다.

다음은 'name'속성, 'name'속성 + 'key'속성을 사용하여 엔트리를 Caching할 때 사용하는 자료 구조이 다.

[그림 6.1] 엔트리 Caching에 사용되는 자료 구조

Key1 Key2 Key3

Entry

Entry Entry Name1

Name2 Name3

Entry

Entry

위 그림에서 Name1, Name3은 'key' 속성 없이 'name' 속성만으로 태그를 사용할 때 엔트리가 Caching되 는 방식이며 'key' 속성은 물론 'name'속성까지도 사용되지 않을 때도 이 방식이 사용된다. 그러나 'name' 속성과 'key' 속성 모두가 사용되는 태그에서는 Name2와 같은 방식으로 엔트리가 Caching된다.

6.2.2. <cache> 태그

<jeus:cache> 사용자 태그를 정의한 파일은 jeuscache.tld로 이 파일은 jeus.jar 내에 포함되며 위치는 다 음과 같다.

jeus/servlet/cache/resource/jeuscache.tld

다음은 jeuscache.tld 파일의 <cache> 태그의 설정 예제이다.

[예 6.1] <cache> 태그 설정 : <<jeuscache.tld>>

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">

<taglib>

<tlib-version>1.0</tlib-version>

<jsp-version>1.2</jsp-version>

<short-name>jeuscache</short-name>

<uri>http://www.tmaxsoft.com/jeuscache</uri>

<display-name>JEUSCache Tag Library</display-name>

<tag>

<name>cache</name>

<tag-class>jeus.servlet.cache.web.tag.CacheTag</tag-class>

<body-content>JSP</body-content>

<description>JEUS WebCache</description>

<attribute>

<name>flush</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>timeout</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>scope</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>name</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>size</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>key</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>async</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>df</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

</taglib>

다음은 각 태그를 설정할 때 각 속성에 대한 설명이다.

flush

– Cache 내 엔트리를 제거하기 위해서 사용한다. 특정 엔트리를 제거하기 위해서는 반드시 'name' 속

성이나 'name' 속성 + 'key' 속성을 지정해야 된다.

– 'name' 속성에 'key' 속성을 이용해서 다수의 엔트리를 Caching한 경우 'name' 속성만을 사용하여

'flush' 속성을 수행할 때 'key' 속성을 식별자로 하는 모든 엔트리가 제거된다는 점에 주의한다. 그리 고 이 속성은 다른 속성과는 다르게 바디 콘텐츠가 없는 닫힌 태그(/>)를 사용한다.

timeout

– 콘텐츠가 Caching될 기간을 설정하며 Simple Date Format 형식으로 명시된다. (기본값: 1시간) – 숫자와 시간을 나타내는 한 문자의 결합으로 표시한다. 기간을 명시하는 유효한 문자는 's'(seconds),

'm'(minutes), 'h'(hours), 'd'(days), 'w'(weeks)이다. 예를 들어 10s는 10초, 10d는 10일, 그리고 4w는 4주는 나타내고, 문자 없이 숫자만 설정하면 초(second) 단위로 인식한다. 0으로 설정하면 매번 바디 콘텐츠를 생성하여 refresh 효과를 낼 수 있다. -1이 설정된다면 강제로 flush되지 않는 이상 콘텐츠는 expire되지 않는다.

– -1이 설정된다면 강제로 flush되지 않는 이상 콘텐츠는 expire되지 않는다.

scope

– Cache되는 엔트리의 운용 범위를 나타낸다. 유효한 값으로는 'application'과 'session'이다.

(기본값: application)

name

– 여러 페이지에서 Caching된 데이터를 공유하기 위해 사용되며 해당 scope 내에서 유일해야 한다.

– name 속성을 지정하지 않았을 때는 HTTP URI 정보 등을 사용하여 내부적으로 생성하여 관리된다.

jeus:cache 내의 바디 콘텐츠가 공유될 필요가 없다면 이 속성을 설정하지 않는 것이 바람직하다.

size

– Caching할 수 있는 객체의 최대 개수를 설정한다. 설정된 값을 초과한 경우에는 LRU 알고리즘에 따

라서 Cache에 저장된 객체가 제거된다. 이 값은 웹 애플리케이션 상황에 맞게 적절하게 설정되어야 한다. (기본값: Integer.MAX_VALUE)

key

– Caching되는 엔트리를 식별하는 추가적인 값이다. 이 속성은 'name' 속성과 반드시 함께 사용되어야

한다. 그래서 엔트리를 식별할 때는 'name' + 'key' 값이 유일한 식별자로 사용된다.

– 'key' 속성은 다음과 같은 scope를 지정하는 나열 형식으로 설정 가능하다.

<jeus:cache name=”. . . ”

key=”[parameter|page|session|request|application].keyname” . . . >

위의 예에서 'keyname'의 값은 요청할 때 설정해야 한다. 'parameter', 'page', 'request'의 경우 cache 페이지와 같은 요청 페이지에서 'keyname'을 key 값으로 설정해야 하고, 'application', 'session'의 경 우 다른 페이지에서 설정이 가능하다.

http://sample.com:8088/Sample/index.jsp?keyname=test

async

– 하나의 Thread가 엔트리를 업데이트 중인 경우(미완료 상태)에 동일한 엔트리를 요구하는 다른 Thread 에 대해서 Blocking 여부를 설정한다.

설명 설정값

Thread는 Blocking되지 않고 이전 엔트리 즉, 업데이트되지 않은 엔트리를 가져간다.

true

(기본값)

엔트리가 업데이트될 때까지 기다린(Blocking)후 최신 엔트리를 가져간다.

false

df

– overflow가 발생했을 경우 공간확보를 위해서 엔트리를 제거한다. 이때 제거되는 victim 개수를 설정

된 'size' 속성에 대한 비율을 'df' 속성으로 설정할 수 있다.

– 유효한 값의 범위는 '0.0 <= factor <= 1.0' 사이의 실수값이다.

예를들어 factor 1.0는 메모리에 Cache되어 있는 모든 엔트리를 제거한다는 의미이며, factor 0.0은 overflow가 발생할 경우 추가 요청에 대해 더 이상 Cache하지 않는다는 의미이다. (기본값: 0.25)

6.2.3. <jeus:cache> 사용 예

본 절에서는 예제를 사용하여 <jeus:cache> 태그 속성의 사용 방법을 설명한다.

다음은 cache.jsp 페이지를 요청하는 경우 현재 날짜와 Caching된 날짜를 비교해보는 간단한 예제이다.

[예 6.2] <jeus:cache> 사용 예제 : <<cache.jsp>>

<%@ taglib uri=”http://www.tmaxsoft.com/jeuscache” prefix=”jeus” %>

<HTML>

<BODY>

Current time: <%= new Date() %><br>

<jeus:cache timeout="60s">

Cached time: <%= new Date() %>

</jeus:cache>

</BODY>

</HTML>

<jeus:cache> 태그의 첫 번째 요청에서는 현재 날짜를 구하여 화면에 출력하고 JEUS WebCache에 저장 된다. 다음 호출부터는 Caching된 날짜가 출력될 것이다. 60초가 지난 다음에는 갱신된 날짜가 출력된다.

다음은 <jsp:include>를 사용하여 다른 페이지를 포함할 때 <jeus:cache> 태그를 사용하는 예이다.

[예 6.3] jsp:inclue를 이용한 <jeus:cache> 사용 예제 : <<main.jsp>>

<HTML>

<BODY>

<jsp:include page="cache.jsp"/>

</BODY>

</HTML>

main.jsp에 include된 cache.jsp 내의 <jeus:cache> 태그의내용은 cache.jsp만사용하는첫번째예제와 동일한수행결과를출력한다.

문서에서 JEUS Web Engine 안내서 (페이지 182-186)