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.SqlClient" %>
<%@ 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) {
SqlConnection myConnection = new SqlConnection(
"data source=localhost; initial catalog=dentalDB;" +
"persist security info=True;user id=sa;password=osstem");
SqlDataAdapter myCommand = new SqlDataAdapter(
"select scode, sname1, sname2, sbun, skum from HSuga where gbn1 = 1", myConnection);
DataSet ds = new DataSet(); //데이터셋 생성
myCommand.Fill(ds, "HSuga"); //데이터셋 채우기
Source = new DataView(ds.Tables["HSuga"]); //데이터뷰 생성
//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 = "데이터셋이 SQL서버 데이터로 생성되었음";
}
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="500" BackColor="#ccccff" BorderColor="black" ShowFooter="false" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaad" />
</form>
</body>
</HTML>
[실행 결과]
처음에 실행 시에는 “데이터셋이 SQL서버 데이터로 생성되었음”이 출력되는 반면에 그 다음 부터는 “데이터셋이 캐시에서 검색되었음”으로 출력된다. 즉 캐시에서 가지고 온다는 것이다.
데이터 캐싱 이란 응용 프로그램이 처음 시작 할 때는 데이터 베이스에 질의해서 가지고 오지만 그 이후 응용 프로그램이 종료 할 때까지는 캐시에 저장된 아이템을 검색하여 사용하는 방법 이다.
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.SqlClient" %>
<%@ 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) {
SqlConnection myConnection = new SqlConnection(
"data source=localhost; initial catalog=dentalDB;" +
"persist security info=True;user id=sa;password=osstem");
SqlDataAdapter myCommand = new SqlDataAdapter(
"select scode, sname1, sname2, sbun, skum from HSuga where gbn1 = 1", myConnection);
DataSet ds = new DataSet(); //데이터셋 생성
myCommand.Fill(ds, "HSuga"); //데이터셋 채우기
Source = new DataView(ds.Tables["HSuga"]); //데이터뷰 생성
//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 = "데이터셋이 SQL서버 데이터로 생성되었음";
}
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="500" BackColor="#ccccff" BorderColor="black" ShowFooter="false" CellPadding="3" CellSpacing="0" Font-Name="Verdana" Font-Size="8pt" HeaderStyle-BackColor="#aaaad" />
</form>
</body>
</HTML>
[실행 결과]
처음에 실행 시에는 “데이터셋이 SQL서버 데이터로 생성되었음”이 출력되는 반면에 그 다음 부터는 “데이터셋이 캐시에서 검색되었음”으로 출력된다. 즉 캐시에서 가지고 온다는 것이다.
[100%환급,개발자전문]빅데이터/SQL/자바/스프링/안드로이드/닷… | 12-27 | 2520 | ||
[채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… | 12-11 | 1849 | ||
53 | [평일100%환급7건]Spring,자바&JSP,안드로이드,웹퍼블리싱,C#닷… | 03-15 | 1657 | |
52 | [주말]C#,ASP.NET마스터 | 01-31 | 1746 | |
51 | [기업100%환급,평일주간]SQL기초에서스키마오브젝트,PLSQL,힌트… | 01-31 | 2516 | |
50 | [평일주간야간,주말]C기본&자료구조,알고리즘 | 01-31 | 1391 | |
49 | [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정-… | 01-19 | 1691 | |
48 | [평일야간,주말]안드로이드개발자과정(Android기초실무) | 01-11 | 1579 | |
47 | [평일야간,주말주간야간]JAVA,Network&JSP&Spring,MyBatis,Hiber… | 01-03 | 2094 | |
46 | [100%환급,개발자전문]빅데이터/SQL/자바/스프링/안드로이드/닷… | 12-27 | 2520 | |
45 | [평일주간]NoSQL,MongoDB,빅데이터기초과정 | 12-19 | 1808 | |
44 | [평일주간야간, 주말]웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX… | 12-14 | 1791 | |
43 | [채용확정무료교육]오라클자바개발잘하는신입뽑기2개월과정,교육… | 12-11 | 1849 | |
42 | [평일주간]빅데이터하둡기초과정(BigData Hadoop) | 12-09 | 1451 | |
41 | [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 | 12-01 | 1674 | |
40 | [기업100%환급]오라클&자바웹스프링신입과정3주(SQL,JAVA,JSP,Se… | 12-01 | 1849 | |
39 | [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) | 12-01 | 1320 |
댓글 없음:
댓글 쓰기