ASP.NET 캐싱 개요

Visual Studio 2010

업데이트: 2007년 11월

자주 액세스하거나 만드는 데 처리 시간이 많이 소요되는 데이터를 메모리에 저장하면 응용 프로그램 성능을 향상시킬 수 있습니다. 예를 들어 응용 프로그램에서 복잡한 논리를 사용하여 많은 양의 데이터를 처리한 다음 이 데이터를 사용자가 자주 액세스하는 보고서로 반환할 경우 사용자가 요청할 때마다 보고서를 다시 만들지 않도록 하는 것이 효율적입니다. 마찬가지로, 복잡한 데이터를 처리하지만 자주 업데이트되지 않는 페이지가 응용 프로그램에 포함된 경우에는 요청할 때마다 서버에서 페이지를 다시 만들면 비효율적입니다.

이러한 경우에 응용 프로그램 성능을 향상시킬 수 있도록 ASP.NET에서는 두 가지 기본 캐싱 메커니즘을 사용하여 캐싱 기능을 제공합니다. 첫 번째 방법은 DataSet 또는 사용자 지정 보고서 비즈니스 개체와 같이 사용자가 생성하는 데이터를 캐싱할 수 있는 응용 프로그램 캐싱입니다. 두 번째 방법은 페이지 처리 결과를 저장하고, 사용자가 페이지를 다시 요청할 때 해당 페이지를 다시 처리하는 대신 이전에 저장한 결과를 다시 사용하는 페이지 출력 캐싱입니다.

응용 프로그램 캐시를 사용하면 키/값 쌍을 사용하여 임의의 데이터를 프로그래밍 방식으로 메모리에 저장할 수 있습니다. 응용 프로그램 캐시의 사용 방법은 응용 프로그램 상태의 사용 방법과 비슷합니다. 그러나 응용 프로그램 상태와 달리 응용 프로그램 캐시의 데이터는 휘발성이므로 응용 프로그램의 전체 사용 기간 동안에 메모리에 저장되지 않습니다. 응용 프로그램 캐시를 사용하면 ASP.NET에서 캐시를 관리하고, 항목이 만료되거나 무효화되는 경우 또는 메모리가 부족한 경우에 항목을 제거할 수 있다는 장점이 있습니다. 또한 항목이 제거되면 응용 프로그램에 알리도록 응용 프로그램 캐싱을 구성할 수도 있습니다. 자세한 내용은 응용 프로그램 데이터 캐싱을 참조하십시오.

응용 프로그램 캐시를 사용할 경우에는 항목에 액세스할 때마다 캐시에 항목이 있는지 여부를 확인하여 있을 경우 이를 사용합니다. 항목이 없으면 새로 만든 다음 다시 캐시에 넣으면 됩니다. 이 패턴을 사용하면 캐시에 항상 최신 데이터가 유지됩니다.

자세한 내용은 방법: 캐시된 항목의 값 검색을 참조하십시오.

페이지 출력 캐시는 처리된 ASP.NET 페이지의 콘텐츠를 메모리에 저장합니다. 이렇게 하면 페이지 처리 주기를 다시 실행하지 않고도 ASP.NET에서 페이지 응답을 클라이언트에 보낼 수 있습니다. 페이지 출력 캐싱은 자주 변경되지 않지만 만드는 데 처리 시간이 많이 소요되는 페이지에 특히 유용합니다. 예를 들어 자주 업데이트되지 않는 데이터를 표시하기 위해 트래픽이 많은 웹 페이지를 만드는 경우 페이지 출력 캐싱을 사용하면 해당 페이지의 성능을 크게 향상시킬 수 있습니다. 각 페이지에 대해 페이지 캐싱을 개별적으로 구성하거나, 캐싱 설정을 한 번 정의한 다음 여러 페이지에서 이러한 설정을 사용할 수 있는 캐시 프로필을 Web.config 파일에 만들 수 있습니다.

페이지 출력 캐싱은 전체 페이지 캐싱과 부분 페이지 캐싱이라는 두 가지 페이지 캐싱 모델을 제공합니다. 전체 페이지 캐싱을 사용하면 페이지의 전체 콘텐츠를 메모리에 저장하여 클라이언트 요청을 수행하는 데 사용할 수 있습니다. 부분 페이지 캐싱을 사용하면 페이지의 일부를 캐싱하고 나머지 부분은 동적 상태로 만들 수 있습니다. 자세한 내용은 ASP.NET 페이지 캐싱을 참조하십시오.

부분 페이지 캐싱은 컨트롤 캐싱과 캐시 후 대체라는 두 가지 방법을 사용하여 수행될 수 있습니다. 컨트롤 캐싱은 부분 캐싱이라고도 하며 이 기능을 사용하면 사용자 정의 컨트롤에 정보를 포함한 다음 이 사용자 정의 컨트롤을 캐시 가능한 것으로 표시하여 페이지 출력의 일부를 캐시할 수 있습니다. 이 방법을 사용하면 전체 페이지는 캐시되지 않으므로 매번 다시 만들어지지 않지만 페이지 내의 특정 콘텐츠를 캐시할 수 있습니다. 예를 들어 주식 정보 같은 동적 콘텐츠가 많이 표시되지만 주간 요약 같은 정적 섹션도 포함되어 있는 페이지를 만들 경우에는 정적 섹션을 사용자 정의 컨트롤에 배치하여 이 섹션을 캐시하도록 할 수 있습니다.

캐시 후 대체는 이와 반대입니다. 페이지가 전체적으로 캐시되지만 해당 페이지 내의 부분이 동적입니다. 예를 들어 지정한 기간 동안 정적 상태인 페이지를 만드는 경우 전체 페이지를 캐시하도록 설정할 수 있습니다. 사용자 이름이 표시된 Label 컨트롤을 페이지에 추가한 경우에는 페이지를 다시 고칠 때마다 각 사용자에 대해 Label이 동일하게 유지되어 페이지를 캐시하기 전에 해당 페이지를 요청한 사용자의 이름을 보여 줍니다. 그러나 캐시 후 대체 기능을 사용하면 페이지를 캐시하도록 구성하지만 해당 페이지의 개별 섹션을 캐시할 수 없는 것으로 표시할 수 있습니다. 이 경우에는 캐시할 수 없는 섹션에 Label 컨트롤을 추가하여 페이지가 요청될 때마다 각 사용자에 대해 컨트롤이 동적으로 만들어지도록 할 수 있습니다. 자세한 내용은 ASP.NET 페이지의 부분 캐싱을 참조하십시오.

요청 매개 변수를 사용하여 페이지 캐싱

ASP.NET 페이지 출력 캐싱을 사용하면 단일 버전의 페이지를 캐싱할 수 있을 뿐만 아니라 요청 매개 변수에 따라 달라지는 여러 버전의 페이지를 만들 수 있습니다. 자세한 내용은 여러 버전의 페이지 캐싱을 참조하십시오.

ASP.NET에서는 다음과 같은 경우 캐시에서 데이터를 제거할 수 있습니다.

  • 서버의 메모리가 부족한 경우. 이 때 청소라고 하는 프로세스를 수행합니다.

  • 캐시의 항목이 만료된 경우

  • 항목의 종속성이 변경되는 경우

캐시된 항목을 쉽게 관리할 수 있도록 ASP.NET에서는 캐시에서 항목이 제거될 경우 응용 프로그램에 알릴 수 있습니다.

청소

청소는 메모리가 부족한 경우 캐시에서 항목을 삭제하는 프로세스입니다. 일정 기간 동안 액세스되지 않는 항목 또는 캐시에 추가할 때 낮은 우선 순위로 표시된 항목이 제거됩니다. ASP.NET에서는 CacheItemPriority 개체를 사용하여 맨 먼저 청소할 항목을 결정합니다. 자세한 내용은 방법: 캐시에 항목 추가를 참조하십시오.

만료

ASP.NET에서는 청소 프로세스를 사용할 뿐만 아니라 항목이 만료될 때 캐시에서 해당 항목을 자동으로 제거합니다. 캐시에 항목을 추가하는 경우 다음 표에 설명된 대로 항목 만료를 설정할 수 있습니다.

만료 형식

설명

상대(sliding) 만료

항목이 마지막으로 액세스된 이후에 만료되는 시간을 지정합니다. 예를 들어 항목이 캐시에서 마지막으로 액세스되고 20분 후에 만료되도록 설정할 수 있습니다.

절대 만료

액세스 간격에 관계없이 지정한 시간에 항목이 만료되도록 지정합니다. 예를 들어 오후 6시에 또는 네 시간 후에 항목이 만료되도록 설정할 수 있습니다.

종속성

캐시에 있는 항목의 수명이 파일 또는 데이터베이스 같은 다른 응용 프로그램 요소에 종속되도록 구성할 수 있습니다. 캐시 항목이 종속된 요소가 변경되면 ASP.NET에서는 해당 항목을 캐시에서 제거합니다. 예를 들어 응용 프로그램에서 XML 파일을 사용하여 만드는 보고서가 웹 사이트에 표시되는 경우 이 보고서를 캐시에 저장하고 XML 파일에 종속되도록 구성할 수 있습니다. 그런 다음 XML 파일이 변경되면 ASP.NET에서 캐시의 보고서를 제거합니다. 코드에서 보고서를 요청할 경우에는 먼저 캐시에 보고서가 있는지 확인하고 없으면 다시 만들 수 있습니다. 따라서 항상 최신 버전의 보고서를 사용할 수 있습니다.

다음 표에서는 ASP.NET 캐싱에서 지원하는 종속성에 대해 설명합니다.

종속성

설명

키 종속성

응용 프로그램 캐시의 항목이 키/값 쌍으로 저장됩니다. 키 종속성을 사용하면 항목이 응용 프로그램 캐시에 있는 다른 항목의 키에 종속될 수 있습니다. 원래 항목이 제거되면 키 종속성을 가진 항목도 제거됩니다. 예를 들어 ReportsValid라는 캐시 항목을 추가한 다음, ReportsValid 키에 종속되어 있는 여러 보고서를 캐시할 수 있습니다. ReportsValid 항목이 제거되면 이 항목에 종속되어 캐시된 모든 보고서도 마찬가지로 캐시에서 제거됩니다.

파일 종속성

캐시의 항목이 외부 파일에 종속됩니다. 이 파일이 수정되거나 삭제되면 캐시된 항목이 제거됩니다.

SQL 종속성

캐시의 항목이 Microsoft SQL Server 2005, SQL Server 2000 또는 SQL Server 7.0 데이터베이스의 테이블 변경 내용에 종속됩니다. SQL Server 2005에서는 항목이 테이블의 행에 종속될 수 있습니다. 자세한 내용은 ASP.NET에서 SqlCacheDependency 클래스를 사용한 캐싱을 참조하십시오.

집계 종속성

캐시의 항목이 AggregateCacheDependency 클래스 사용을 통해 여러 요소에 종속됩니다. 종속성이 하나라도 변경되면 캐시에서 항목이 제거됩니다.

사용자 지정 종속성

사용자가 직접 작성한 코드에서 만드는 종속성으로 캐시의 항목이 구성됩니다. 예를 들어 웹 서비스를 호출한 결과 특정 값이 반환되는 경우 캐시에서 데이터를 제거하는 사용자 지정 웹 서비스 캐시 종속성을 만들 수 있습니다.

응용 프로그램 캐시에서 항목이 제거될 때 사용자에게 알릴 수 있습니다. 예를 들어 만드는 데 처리 시간이 많이 소요되는 항목이 있는 경우 이 항목이 캐시에서 제거되면 바로 바꿀 수 있도록 사용자에게 알릴 수 있습니다. 따라서 다음에 이 항목이 요청될 경우 사용자는 처리가 완료될 때까지 기다릴 필요가 없습니다. 자세한 내용은 방법: 캐시에서 항목이 제거될 때 응용 프로그램에 알림을 참조하십시오.

표시: