ASP.NET의 DB 데이터 캐싱 (Data Caching) - ADO.NET, 오라클
ASP.NET의 DB 데이터 캐싱 (Data Caching)
데이터 캐싱 이란 응용 프로그램이 처음 시작 할 때는 데이터 베이스에 질의해서 가지고 오지만 그 이후 응용 프로그램이 종료 할 때까지는 캐시에 저장된 아이템을 검색하여 사용하는 방법 이다.
ASP.NET은 HTTP 요구를 통해 임의의 객체를 저장하고 검색하기 위해 페이지에서 사용 가능한 캐시 엔진을 제공 하는 것이다. ASP.NET의 캐싱은 각 응용 프로그램에서만 사용되고 메모리에 객체를 저장 한다. 캐싱의 생명 주기는 응용 프로그램의 생명 주기와 동일 하다. 즉 응용 프로그램이 재시동 되면 캐시는 재 생성 된다.
캐시에 아이템을 재배치 하는 것은 아래와 같은 방법을 사용 한다.
Cache[“myCache”] = myDataView
데이터를 검색하는 것은 아래와 같은 방법으로 한다.
myDataView = Cache[“myCache”];
if (myDataView != null) {
DisplayData(myDataView);
}
아래의 예제는 페이지가 처음 실행되면 데이터베이스에서 질의 하여 데이터를 가지고 온 후 쿼리된 뷰를 캐시에 저장 하였다가 그 다음부터 응용 프로그램은 생명 주기 동안에는 캐시에 저장된 뷰를 캐싱하여 데이터베이스에 대한 연결 없이도 캐시 아이템을 검색 하여 컨트롤에 데이터를 표시 할 수 있게 된다.
-----------------
실습하기
-----------------
1. VS.NET 새 프로젝트를 생성 한다. DataCaching 이라고 이름을 주자.
2. DataCaching.aspx 파일을 만들어 아래의 코드를 붙여 넣자.
<%@ Import Namespace="System.Data.OleDb" %>
<%@ Import Namespace="System.Data" %>
<html>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E) {
DataView Source;
// 캐시에서 아이템MyDataSet을 체크하여
// 만일 없으면,MyDataSet을 만들어 캐시에 추가한다.
Source = (DataView)Cache["MyDataSet"]; //캐시에서 아이템 체크하기
if (Source == null) {
OleDbConnection myConnection = new OleDbConnection(
"Provider=MSDAORA;data source=onj;user id=scott;password=tiger");
OleDbDataAdapter adapter = new OleDbDataAdapter(
"select empno, ename, sal, deptno from emp where deptno = 20", myConnection);
DataSet ds = new DataSet(); //데이터셋 생성
adapter.Fill(ds); //데이터셋 채우기
Source = new DataView(ds.Tables[0]); //데이터뷰 생성
//Cache["MyDataSet"] = Source; //뷰를 캐시에 저장한다.
// 매개변수는 다음과 같습니다.
// key : 항목을 참조하는 데 사용되는 캐시 키입니다.
// value : 캐시에 추가되는 항목입니다.
// dependencies : 항목에 대한 파일 또는 캐시 키 종속성입니다.
// 종속성이 변경되면 해당 개체는 사용할 수 없게 되어 캐시에서 제거됩니다.
//종속성이 없는 경우 이 매개 변수에는 null 참조(Visual Basic의 Nothing)가 포함됩니다.
// absoluteExpiration : 추가된 개체가 만료되고 캐시에서 제거되는 시간입니다.
// slidingExpiration : 추가된 개체에 마지막으로 액세스한 시간과 해당 개체가 만료되는 시간 사이의 간격입니다.
//이 값이 20분인 경우 해당 개체에 마지막으로 액세스한 후 20분이 경과되면 개체가 만료되고 캐시에서 제거됩니다.
// priority : CacheItemPriority 열거형으로 표현되는, 개체에 대한 상대 비용입니다.
//캐시에서는 개체를 제거할 때 이 값을 사용합니다. 비용이 저렴한 개체가 비용이 많이 드는 개체보다 캐시에서 먼저 제거됩니다.
// onRemoveCallback : 대리자가 제공된 경우에는 캐시에서 개체가 제거될 때 이 대리자가 호출됩니다.
//캐시에서 개체가 삭제될 때 이 대리자를 사용하여 응용 프로그램에 알릴 수 있습니다.
//아래의 경우 60초가 지나면 캐시는 지워 진다.
Cache.Add("MyDataSet", Source, null, DateTime.Now.AddSeconds(60), TimeSpan.Zero, CacheItemPriority.High, null);
CacheMsg.Text = "데이터셋이 오라클서버 데이터로 생성되었음";
}
else
{
CacheMsg.Text = "데이터셋이 캐시에서 검색되었음";
}
MyDataGrid.DataSource = Source;
MyDataGrid.DataBind();
}
</script>
<body>
<form method="get" runat="server" id="Form1">
<h3>
<font face="Verdana">데이터 캐싱</font>
</h3>
<i>
<asp:Label ID="CacheMsg" runat="server" />
</i>
<br>
<ASP:DataGrid id="MyDataGrid" runat="server" Width="700px" BackColor="#CCCCFF"
BorderColor="Black" CellPadding="3" Font-Size="8pt" HeaderStyle-BackColor="#aaaadd" Height="153px"
Font-Names="Verdana" PageSize="5">
<HeaderStyle BackColor="#AAAADD"></HeaderStyle>
</ASP:DataGrid>
</form>
</body>
</html>
[실행 결과]
처음에 실행 시에는 “데이터셋이 오라클서버 데이터로 생성되었음”이 출력되는 반면에 그 다음 부터는 “데이터셋이 캐시에서 검색되었음”으로 출력된다. 즉 캐시에서 가지고 온다는 것이다.