ASP.NET에서 SqlCacheDependency 클래스를 사용한 캐싱
업데이트: 2007년 11월
ASP.NET에서는 SqlCacheDependency 클래스를 사용하여 데이터베이스의 행 또는 테이블에 대한 캐시 항목 종속성을 만들 수 있습니다. 테이블 또는 특정 행에서 변경하면 종속성이 있는 항목이 무효가 되고 캐시에서 제거됩니다. Microsoft SQL Server 7.0, SQL Server 2000 및 SQL Server 2005에서 테이블에 대한 종속성을 설정할 수 있습니다. SQL Server 2005를 사용 중인 경우에는 특정 레코드에 대한 종속성도 설정할 수 있습니다.
SQL 종속성에 캐싱 기능을 사용하면 특정 시나리오에서 응용 프로그램 성능을 크게 향상시킬 수 있습니다. 예를 들어 데이터베이스에서 제품 정보를 표시하는 전자 상거래 응용 프로그램을 구축하는 경우를 가정해 봅니다. 캐싱 기능이 없으면 사용자가 제품을 보려고 할 때마다 응용 프로그램에서 데이터베이스에 데이터를 요청해야 합니다. 제품 정보를 하루에 한 번씩 캐시하면 제품 정보가 이미 메모리에 있으므로 응답 시간이 빨라집니다. 그러나 제품 정보가 바뀌면 캐시된 제품 정보가 그 날의 최신 데이터와 동기화되지 않을 수도 있습니다.
SQL 캐시 종속성을 사용하면 제품 정보를 캐시하고 데이터베이스 테이블 또는 행 변경에 대한 종속성을 만들 수 있습니다. 데이터가 변경되는 경우에만 해당 데이터를 기반으로 하는 캐시 항목이 무효가 되고 캐시에서 제거됩니다. 다음에 캐시에서 해당 항목을 요청할 때 이 항목이 캐시에 없으면 업데이트된 버전을 캐시에 다시 추가하여 최신 데이터를 사용할 수 있습니다.
페이지 출력 캐시에도 SQL 캐시 종속성을 사용할 수 있습니다. 예를 들어 특정 제품에 대한 정보를 표시하는 ViewProduct.aspx 페이지를 만들 수 있습니다. 캐시에 수동으로 추가한 항목의 경우와 마찬가지로 이 페이지의 캐시 정책을 SQL 종속성으로 설정합니다. 그러면 데이터가 종속되어 있는 테이블 또는 행이 변경될 때까지 캐시에 해당 페이지가 저장됩니다. 데이터가 변경되면 페이지를 다시 만들어 출력 캐시에 다시 저장할 수 있습니다.
자세한 내용은 ASP.NET 캐싱 개요를 참조하십시오.
기능
ASP.NET SQL 캐시 종속성은 다음과 같은 기능을 제공합니다.
응용 프로그램 캐시와 페이지 출력 캐시 둘 다에 대해 SQL 캐시 종속성을 사용할 수 있습니다.
SQL Server 7.0 이상 버전에서 SQL 캐시 종속성을 사용할 수 있습니다.
웹 가든(서버 하나에 여러 프로세서가 있음) 또는 웹 팜(같은 응용 프로그램을 실행하는 여러 서버가 있음)에서 SQL 캐시 종속성을 사용할 수 있습니다.
SQL 캐시 종속성과 관련된 데이터베이스 작업이 간단하므로 서버에서 지나치게 많은 처리 과정을 수행할 필요가 없습니다.
SQL에 대한 지식이 많지 않더라도 응용 프로그램 및 SQL Server에서 SQL 캐시 종속성을 구성할 수 있습니다. ASP.NET에는 이러한 구성을 자동화하는 도구가 포함되어 있습니다. 또한 SqlCacheDependencyAdmin 클래스를 사용하여 SQL 캐시 종속성을 프로그래밍 방식으로 구성할 수도 있습니다.
SQL Server 7.0 및 SQL Server 2000 구현
ASP.NET에서는 SQL Server 7.0 및 SQL Server 2000 캐시 종속성을 위해 폴링 모델을 구현합니다. ASP.NET 프로세스 내의 스레드는 지정된 시간 간격에 따라 SQL Server 데이터베이스를 폴링하여 데이터가 변경되었는지 여부를 확인합니다. 데이터가 변경되었으면 종속된 캐시 항목이 무효가 되고 캐시에서 제거됩니다. 폴링 간격은 응용 프로그램에서 Web.config 파일을 사용하여 선언적으로 지정하거나 SqlCacheDependency 클래스를 사용하여 프로그래밍 방식으로 지정할 수 있습니다.
SQL 캐시 종속성은 SQL Server 7.0 및 SQL Server 2000에 대해 테이블 수준의 데이터 변경으로 제한됩니다. 데이터베이스에서 특정 행이 아니라 테이블의 변경 내용을 폴링하도록 ASP.NET을 구성할 수 있습니다.
SQL 캐싱 사용
SQL Server 7.0 및 SQL Server 2000에서 SQL 캐시 종속성을 사용하려면 SQL Server에서 SQL 캐시 종속성을 지원하도록 구성해야 합니다. ASP.NET에서는 Aspnet_regsql.exe 도구와 SqlCacheDependencyAdmin 클래스 등을 포함하여 SQL Server에서 SQL 캐싱을 구성하는 데 사용할 수 있는 유틸리티를 제공합니다. SQL Server에서 SQL 캐시 종속성을 사용하도록 설정하는 데 대한 자세한 내용은 방법: 캐시 키 종속성을 사용하여 페이지 출력 캐시를 참조하십시오.
SQL Server 2005 구현
SQL Server 2005에서는 SQL Server 7.0 및 SQL Server 2000의 캐시 종속성 모델과 다른 모델을 구현합니다. SQL Server 2005에서는 SQL 캐시 종속성을 설정하기 위해 특별한 구성 작업을 수행할 필요가 없습니다. 또한 SQL Server 2005에서는 이전 버전의 SQL Server에서 사용한 폴링 모델 대신 등록 응용 프로그램 서버에 알림 메시지를 보내는 변경 알림 모델을 구현합니다.
SQL Server 2005 캐시 종속성은 알림을 받는 변경 형식에 상당한 융통성이 있습니다. SQL Server 2005에서는 특정 SQL 명령의 결과 집합에 대한 변경 내용을 모니터링합니다. 데이터베이스가 변경되어 해당 명령의 결과 집합이 수정될 경우에는 종속성으로 인해 이전에 캐시된 항목이 무효가 됩니다. 이로 인해 SQL Server 2005에서는 행 수준의 알림을 제공할 수 있습니다.
변경 내용을 테스트하는 데 사용되는 쿼리에 대한 몇 가지 요구 사항이 있습니다. 소유자 이름을 포함하여 정규화된 테이블 이름을 제공해야 합니다(예: dbo.authors). 일반적으로 SQL 2005 알림은 저장 프로시저뿐만 아니라 선택 쿼리 및 다수의 중첩 쿼리를 지원하지만 COUNT(*)와 같은 집계 작업은 지원하지 않습니다. SQL Server 2005에서 알림에 지원되는 쿼리 및 적용 규칙에 대한 자세한 내용은 SQL 온라인 설명서의 "Creating a Query for Notification"을 참조하십시오.
ASP.NET 응용 프로그램에서 SQL 캐싱 구성
캐시 종속성을 위해 SQL Server 7.0 및 SQL Server 2000을 구성했거나 SQL Server 2005에서 적절한 명령 종속성을 만든 후에는 다른 캐시 종속성을 구성하는 것처럼 응용 프로그램에서 SQL 캐시 종속성을 사용하도록 구성할 수 있습니다. 예를 들어 Web.config 파일에 캐시 프로필을 만든 다음 SQL 캐시 종속성을 사용할 각 페이지에서 캐시 프로필을 참조할 수 있습니다. SqlCacheDependency 클래스를 사용하여 프로그래밍 방식으로 SQL 캐시 종속성을 사용하도록 설정할 수도 있습니다. 자세한 내용은 방법: 캐시 키 종속성을 사용하여 페이지 출력 캐시를 참조하십시오.