1. 개요 웹 애플리케이션에서 일부 보고서 생성은 데이터베이스 계산에 오랜 시간이 걸릴 수 있으며, 일부 웹 사이트는 온도 정보를 얻기 위해 SOAP 호출을 만들기 위해 원격 서버에 액세스해야 하는 날씨 정보를 제공합니다. 이 모든 것은 복잡한 정보의 예입니다. 웹 페이지에 복잡한 정보를 너무 많이 추가하면 웹 서버와 데이터베이스 서버에 과부하가 걸릴 수 있습니다. JSP 코드 블록 버퍼링을 통해 개발자는 모든 종류의 복잡한 정보를 마음대로 추가할 수 있습니다.
JSP는 태그 라이브러리에서 복잡한 Java 코드를 캡슐화하고 실행할 수 있으므로 JSP 페이지 파일을 더 쉽게 유지 관리하고 비전문 개발자가 JSP 페이지 파일을 더 편리하게 사용할 수 있습니다. 상용 제품이거나 오픈 소스 제품인 태그 라이브러리가 이미 많이 있습니다. 그러나 대부분의 제품은 간단한 Java Scriptlet으로 구현할 수 있는 기능을 구현하기 위해 태그 라이브러리만 사용합니다. JSP 사용자 정의 태그 라이브러리가 등장하기 전에는 거의 동일한 기능을 제공하는 창의적인 방식으로 사용자 정의 태그를 사용하는 제품은 거의 없습니다.
OpenSymphony가 디자인한 OSCache 태그 라이브러리는 기존 JSP 페이지 내에서 빠른 메모리 캐싱을 제공하는 획기적인 JSP 사용자 정의 태그 애플리케이션입니다. 캐싱 제품을 다양한 형태로 제공하는 공급업체가 몇 군데 있지만 모두 공급업체별 제품입니다. OSCache는 모든 JSP 1.1 호환 서버에서 실행될 수 있으며 모든 사용자뿐만 아니라 사용자별로 기존 JSP 코드 블록을 캐시할 수도 있습니다. OSCache에는 디스크 버퍼링, 프로그래밍 가능한 버퍼 플러시, 예외 제어 등과 같은 확장성을 향상시키는 몇 가지 고급 기능도 포함되어 있습니다. 또한 다른 OpenSymphony 제품과 마찬가지로 OSCache의 코드는 오픈 소스 라이선스에 따라 무료로 배포됩니다.
이 기사에서는 가상의 경매 웹사이트 디자인 프로세스를 예로 들어 OSCache의 작업 프로세스를 소개합니다. 이 가상 웹 사이트에는 다음이 포함됩니다.
1: 최근 경매 활동을 보고하는 관리 페이지;
2: 완벽한 기능과 다양한 홍보정보를 제공하는 홈페이지
3: 아직 완료되지 않은 사용자의 모든 경매 정보를 포함하는 특수 탐색 모음입니다.
2. 관리 페이지
경매 웹사이트에는 관리 보고서가 포함되어 있으며 데이터베이스 서버가 이러한 보고서를 생성하는 데 몇 초가 걸립니다. 시스템 작동을 모니터링하는 관리자가 여러 명일 수 있고 관리자가 방문할 때마다 보고서가 재생성되는 것을 피하고 싶기 때문에 보고서를 생성하는 데 오랜 시간이 걸리는 것이 중요합니다. 이를 달성하기 위해 전체 페이지를 매시간 새로 고쳐지는 애플리케이션 수준 버퍼 태그로 캡슐화합니다. 다른 공급업체의 일부 제품에는 비슷한 기능이 있지만 OSCache가 그 제품보다 더 나은 기능을 제공한다는 점만 다를 뿐입니다.
단순화를 위해 서식 문제에 너무 집중하지 않겠습니다. 관리 페이지를 작성할 때 먼저 페이지에 태그 라이브러리 선언을 추가합니다.
<%@ taglib uri="cachetags" prefix="cache" %>
다음으로 전체 페이지를 캐시 태그로 둘러싸야 합니다. 캐시 태그의 기본 캐시 시간은 1시간입니다.
<cache:cache> .... 복잡한 관리 보고서.... </cache:cache>
이제 관리 페이지가 캐시됩니다. 페이지가 생성된 후 1시간 이내에 관리자가 동일한 페이지에 다시 액세스하면 이전에 캐시된 페이지가 표시되므로 데이터베이스 서버에서 이 보고서를 다시 생성할 필요가 없습니다.
3. 홈페이지 경매 웹사이트의 홈페이지는 웹사이트 활동을 표시하고 곧 종료되는 경매를 홍보합니다. 진행 중인 경매 수, 현재 로그인한 사용자 수, 가까운 시일 내에 종료될 경매 목록 및 현재 시간을 표시하려고 합니다. 이러한 메시지에는 시간 정확도 요구 사항이 다릅니다. 웹사이트의 경매는 일반적으로 며칠 동안 지속되므로 유효한 경매 수를 버퍼링하는 시간을 6시간으로 설정할 수 있습니다. 사용자 수는 분명히 더 자주 변경되지만 여기서는 한 번에 15분 동안 이 값을 버퍼링합니다. 마지막으로, 페이지에 표시되는 현재 시간이 항상 페이지에 액세스한 정확한 시간이 되기를 원합니다.
홈 페이지에서 태그 라이브러리를 선언한 후 먼저 버퍼링 없이 현재 날짜를 직접 출력합니다.
이제 다음과 같습니다. <%=new java.util.Date()%>
다음으로 경매에 참여할 항목의 목록을 표시하려고 합니다.
<cache:cache> <ul> <% // 최근 경매를 포함하는 반복자를 구성합니다.
Iterator Auctions = .... while (auctions.hasMore()) { Auction Auction = (Auction) Auctions.next (); %><li><%=auction%></li%< } %> </ul> </cache:cache>
마지막으로 진행 중인 경매 수를 표시하려고 합니다. 이 숫자는 다음과 같아야 합니다. 6시간 동안 버퍼링되었습니다. 캐시 표시에는 데이터를 버퍼링하는 데 몇 초가 필요하므로 6시간을 21600초로 변환합니다.
<cache:cache time="21600"> <% //총 경매 활동 수를 가져오기 위해 데이터베이스를 쿼리합니다. int AuctionCount = .. .. %> 이 웹사이트에는 <%=auctionCount%> 진행 중인 경매가 있습니다. </cache>
보시다시피, 우리는 복잡한 버퍼링 시스템을 갖춘 홈페이지를 구축하기 위해 소량의 코드만을 사용합니다. 이 버퍼링 시스템은 페이지의 각 부분을 개별적으로 버퍼링하며, 각 부분의 버퍼링 시간은 해당 정보의 변경 빈도와 완전히 일치합니다. 버퍼링 덕분에 이제 홈페이지에 더 많은 콘텐츠를 넣을 수 있습니다. 이전에는 홈페이지에 콘텐츠를 너무 많이 넣으면 페이지 액세스 속도가 느려지고 데이터베이스 서버에 문제가 발생할 수도 있습니다.
4. 탐색 표시줄 웹 사이트를 계획할 때 왼쪽 탐색 표시줄 아래에 장바구니 콘텐츠를 표시하기로 결정했다고 가정해 보겠습니다. 우리는 사용자가 경매에 참여한 각 항목의 입찰 횟수와 현재 가격을 표시할 뿐만 아니라 현재 사용자가 가장 높은 입찰을 한 모든 항목의 목록도 표시합니다.
우리는 탐색 모음에서 위의 기능을 구성하기 위해 세션 수준 버퍼링 기능을 사용합니다. 웹사이트의 다른 페이지가 이 탐색 모음을 참조할 수 있도록 다음 코드를 템플릿이나 포함 파일에 추가합니다.
<cache:cache key="navbar"scope="session" time="300"> <% //추출 및 표시 현재 입찰 정보%> </cache:cache>
여기서는 키와 범위라는 두 가지 중요한 속성을 소개합니다. 이 기사 앞부분의 코드에서는 캐시 태그가 자동으로 코드 블록에 대한 고유 키를 생성할 수 있으므로 이 키 속성을 수동으로 설정할 필요가 없습니다. 하지만 여기서는 사이트의 나머지 부분에서 이 캐시된 코드 블록을 참조하려고 하므로 캐시 태그의 키 속성을 명시적으로 정의합니다. 둘째, 범위 속성은 현재 코드 블록이 모든 사용자에 대해 한 번 버퍼링하는 대신 사용자별로 버퍼링되어야 함을 표시하도록 캐시에 지시하는 데 사용됩니다.
세션 수준 버퍼링을 사용할 때는 매우 주의해야 하며 이는 분명해야 합니다. 복잡한 탐색 모음을 사용하여 서버 로드를 5배 또는 10배 줄일 수는 있지만 세션당 필요한 메모리 공간은 크게 늘어납니다. CPU 성능 측면에서 동시 사용자 수를 늘리는 것은 의심할 여지 없이 이상적이지만, 메모리 지원 성능 측면에서 동시 사용자 수가 CPU의 한계까지 줄어들면 이 솔루션은 더 이상 이상적이지 않습니다.
이 문서의 앞부분에서 언급했듯이 우리는 사이트의 나머지 부분에서 이 버퍼링된 코드 블록을 참조하려고 합니다. 이는 사용자가 경매 항목을 추가하거나 다른 사용자가 경매 항목에 입찰할 때 다음에 읽을 때 탐색 모음에 최신 콘텐츠가 포함되도록 버퍼를 새로 고치기를 원하기 때문입니다. 이 데이터는 다른 사용자의 활동으로 인해 변경될 수 있지만 사이트에서 작업을 수행한 후에도 자신의 목록이 변경되지 않은 상태로 유지되는 것을 사용자가 보는 것은 매우 혼란스러울 수 있습니다.
OSCache 라이브러리에서 제공하는 플러시 태그는 버퍼 내용을 새로 고칠 수 있습니다. 이 영역에 영향을 줄 수 있는 사용자 작업을 처리하는 페이지에 다음 코드를 추가할 수 있습니다.
<cache:flush key="navbar"scope="session" />
사용자가 다음에 액세스하면 navbar 버퍼 블록이 새로 고쳐집니다. .
현재 샘플 웹사이트 구축이 완료되어 운영을 시작할 수 있습니다. OSCache의 예외 처리 기능을 살펴보겠습니다. 버퍼 블록 내에서 Java 예외가 발생하는 등 버퍼링된 콘텐츠가 무효화되더라도 OSCache 태그 라이브러리를 사용하면 콘텐츠를 프로그래밍 방식으로 표시할 수 있습니다. 이 예외 제어 기능을 사용하면 데이터베이스 서버와 웹 서버 간의 연결을 끊을 수 있으며 웹 사이트는 계속해서 실행될 수 있습니다. JSP 1.2 사양에는 태그 자체가 Java 예외를 감지하고 처리할 수 있도록 하는 TryCatchFinally 인터페이스가 도입되었습니다. 따라서 마크업을 이 예외 처리 코드와 결합하여 JSP 페이지를 더 간단하고 체계적으로 만들 수 있습니다.
OpenSymphony는 추가 버퍼링 메커니즘은 물론 버퍼링에 사용되는 RAM 및 디스크 공간을 관리할 수 있는 보다 관리하기 쉬운 메인 시스템을 구현할 계획입니다. 이러한 기능이 구현되면 웹사이트의 응답성과 안정성을 더욱 향상시킬 수 있을 것입니다.
사용 예:
oscache.properties 파일 구성 마법사 캐시
.메모리
값은 true 또는 false입니다. 기본값은 메모리에 캐시하는 것입니다.
false로 설정하면 데이터베이스나 하드디스크에만 캐시를 캐시할 수 있는데, 캐시가 무슨 의미가 있나요:)
캐시.용량
캐시 요소 수
cash.persistence.class
영구 캐시 클래스, 이 클래스가 활성화된 경우
클러스터 설정 정보와 관련된 캐시.경로 정보인 캐시.cluster를 설정해야 합니다.
좋다
캐시.cluster.multicast.ip는 브로드캐스트 IP 주소입니다.
캐시.cluster.properties는 클러스터 속성입니다.
3. OSCache 캐시1.jsp의 기본 사용법은
다음과 같습니다.
<%@ page import="java.util.*" %>
<%@ taglib uri="oscache" prefix="cache" %>
<html>
<body>
캐시된 날짜 없음: <%= new Date() %><p>
<!--자동 새로 고침-->
<캐시:캐시 시간="30">
30초마다 캐시된 날짜를 새로 고칩니다. <%= new Date() %>
</캐시:캐시>
<!--수동 새로 고침-->
<캐시:캐시 키="테스트캐시">
캐시된 날짜를 수동으로 새로 고침: <%= new Date() %> <p>
</캐시:캐시>
<a href="/cache2.jsp">수동 새로 고침</a>
</body>
</html>
캐시2.jsp는 다음과 같이 페이지를 수동으로 새로 고칩니다.
<%@ taglib uri="oscache" prefix="cache" %>
<html>
<body>
캐시가 플러시되었습니다...<p>
<cache:flush key="testcache"scope="application"/>
<a href="/cache1.jsp">반환</a>
</body>
</html>
다음 문을 통해 Cache의 유효 범위를 정의할 수도 있습니다. 범위를 정의하지 않으면 범위가 기본적으로 Applcation으로 설정됩니다.
<cache:cache time="30" 범위="세션">
...
</cache:cache>
4. 캐시 필터 CacheFilter
web.xml에 캐시 필터를 정의하여 특정 리소스의 캐시를 정의할 수 있습니다.
1 <필터>
2 < 필터 - 이름 > CacheFilter </ 필터 - 이름 >
3 < 필터 - 클래스 > com.opensymphony.oscache.web.filter.CacheFilter </ 필터 - 클래스 >
4 <초기화 매개변수>
5 <param-name>시간</param-name>
6 < 매개변수 - 값 > 60 </ 매개변수 - 값 >
7 </init-param>
8 <초기화 매개변수>
9 <param-name>범위</param-name>
10 <param-value>세션</param-value>
11 </init-param>
12 </ 필터 >
13
14
15 <필터 매핑>
16 < 필터 - 이름 > CacheFilter </ 필터 - 이름 >
17 < URL - 패턴 >* .jsp </ URL - 패턴 >
18 </ 필터 - 매핑 >
위 정의는 모든 .jsp 페이지를 캐시하며 캐시 새로 고침 시간은 60초이고 캐시 범위는 Session입니다.
CacheFilter는 Http 헤더가 200인 페이지 요청만 캡처합니다. 즉, 오류 없이 요청만 캐시합니다.
다른 요청(예: 500, 404, 400)을 캐싱하는 대신
[결론] OSCache를 사용하면 더욱 다채롭고 성능이 뛰어난 웹 사이트를 구축할 수 있습니다. OSCache 태그 라이브러리의 도움으로 이제 이를 사용하여 최대 트래픽 기간, 과부하된 데이터베이스 서버 등과 같이 웹 사이트의 응답성에 영향을 미치는 몇 가지 문제를 해결할 수 있습니다.
개인적인 팁: Struts나 다른 MVC 아키텍처를 사용하는 경우 oscache 태그로 인한 성능 향상을 누리기가 어렵습니다. 왜냐하면 각 요청은 여전히 처리를 위해 dao 또는 기타 작업에 제출되어야 하기 때문입니다. , Spring 인터셉터의 메서드 수준 캐싱과 같은 다른 방법이 필요합니다... 모든 비즈니스 처리 코드가 jsp 페이지에 작성된 경우 캐시 태그를 사용하여 이전에 생성된 페이지 데이터를 캐시하여 동일한 비즈니스 작업을 수행하지 않을 수 있습니다.