연습: SQL Server에 ASP.NET 출력 캐싱 사용

업데이트: 2007년 11월

이 연습에서는 SQL Server 데이터베이스의 데이터에 종속되는 ASP.NET 페이지를 캐시하는 방법을 보여 줍니다.

ASP.NET 출력 캐싱의 고급 기능은 SQL 캐시 종속성입니다. SQL 캐시 종속성을 사용하여 SQL Server 테이블의 데이터에 종속되는 페이지를 캐시할 수 있습니다. 페이지 요청을 캐시하여 페이지가 종속되는 데이터가 SQL Server에서 업데이트될 때까지 서버 작업을 줄이도록 SQL Server 및 ASP.NET을 구성할 수 있습니다. SQL 캐시 종속성은 비교적 정적인 상태를 유지하는 제품 카탈로그나 고객 등록 정보와 같은 데이터에 유용합니다.

이 연습에서 수행할 작업은 다음과 같습니다.

  • Northwind 데이터베이스의 데이터를 표시하는 페이지 만들기 및 구성

  • SQL 캐시 알림을 보낼 수 있게 데이터베이스 설정

  • 사용자 페이지 및 Web.config 파일에 SQL 캐시 종속성 지정

  • Northwind 데이터베이스를 변경한 후 캐싱 동작 확인

사전 요구 사항

이 연습을 완료하려면 다음과 같은 요건을 갖추어야 합니다.

  • Northwind 데이터베이스가 있는 SQL Server 2005 또는 SQL Server 2000에 대한 액세스 권한

  • SQL Server Northwind 데이터베이스에 대한 액세스 권한 SQL Server 샘플 Northwind 데이터베이스를 다운로드 및 설치하는 방법에 대한 자세한 내용은 Microsoft SQL Server 웹 사이트의 예제 데이터베이스 설치를 참조하십시오.

    참고:

    SQL Server가 실행되는 컴퓨터에 로그온하는 방법에 대한 자세한 내용은 서버 관리자에게 문의하십시오.

  • MDAC(Microsoft Data Access Components) 버전 2.7 이상

    Windows XP나 Windows Server 2003을 사용하고 있는 경우 MDAC 2.7이 이미 설치되어 있습니다. 그러나 Windows 2000을 사용하는 경우 컴퓨터에 이미 설치된 MDAC를 업그레이드해야 합니다. 자세한 내용은 MDAC Installation을 참조하십시오.

  • .NET Framework 버전 2.0

웹 사이트 만들기

Visual Web Developer에서 웹 사이트를 이미 만들었으면(연습: Visual Web Developer에서 기본 웹 페이지 만들기 참조) 해당 웹 사이트를 사용하고 연습 뒷부분의 "SQL Server에 대한 캐시 알림 설정"으로 이동할 수 있습니다. 그렇지 않으면, 다음 절차에 따라 새 웹 사이트와 페이지를 만듭니다.

파일 시스템 웹 사이트를 만들려면

  1. Visual Web Developer를 엽니다.

  2. 파일 메뉴에서 새웹 사이트를 클릭합니다. Visual Web Developer Express Edition의 파일 메뉴에서 새로 만들기를 클릭한 다음 웹 사이트를 클릭합니다.

    새 웹 사이트 대화 상자가 나타납니다.

  3. Visual Studio에 설치되어 있는 템플릿에서 ASP.NET 웹 사이트를 클릭합니다.

  4. 위치 상자에 웹 사이트의 페이지를 보관할 폴더의 이름을 입력합니다.

    예를 들어, 폴더 이름 C:\WebSites를 입력합니다.

  5. 언어 목록에서 작업할 프로그래밍 언어를 클릭합니다.

  6. 확인을 클릭합니다.

    Visual Web Developer에서 해당 폴더와 Default.aspx라는 새 페이지를 만듭니다.

SQL Server에 대한 캐시 알림 설정

종속 데이터가 변경될 때 ASP.NET에 적절한 알림을 제공하도록 SQL Server를 구성해야 합니다. 서버를 구성하려면 관리 권한이 있어야 합니다.

SQL Server에 대한 캐시 알림을 설정하려면

  1. Windows 시작 메뉴에서 모든 프로그램, 보조프로그램을 차례로 가리킨 후 명령 프롬프트를 클릭하여 명령 프롬프트 창을 엽니다.

  2. 디스크 드라이브에서 Aspnet_regsql.exe 실행 파일을 찾습니다. 이 파일은 .NET Framework 버전 2.0과 함께 다음 위치에 설치됩니다.

    %windir%\Microsoft.NET\Framework\FrameworkVersion
    

    %windir%이 사용자의 Windows 디렉터리를 나타내며 .NET Framework 버전이 2.0 이상인지 확인합니다. 이 경로는 다음과 같습니다.

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.40217
    
  3. 다음 명령을 사용하여 Northwind 데이터베이스의 Employees 테이블에 대한 캐시 알림을 사용 가능하게 설정합니다.

    aspnet_regsql.exe -S <Server> -U <Username> -P <Password> -ed -d Northwind -et -t Employees
    
    참고:

    관리 권한이나 관리 계정 및 암호가 필요합니다. 이 정보가 없으면 데이터베이스 관리자에게 문의하십시오.

    데이터베이스 설정의 성공 또는 실패를 나타내는 메시지가 표시됩니다. 다음 메시지는 성공을 나타냅니다.

    Enabling the table for SQL cache dependency.
    ..
    Finished.
    

프로젝트에 데이터 연결 추가

Visual Web Developer에서 SQL Server 데이터베이스로 작업하려면 Northwind 데이터베이스에 대한 연결을 추가해야 합니다.

프로젝트에 데이터 소스를 추가하려면

  1. 서버 탐색기(Visual Web Developer Express Edition의 데이터베이스 탐색기)에서 데이터 연결을 마우스 오른쪽 단추로 클릭한 다음 연결 추가를 클릭합니다.

    참고:

    서버 탐색기(Visual Web Developer Express Edition의 데이터베이스 탐색기)는 일반적으로 솔루션 탐색기 뒤에 도킹됩니다.

    서버 탐색기(Visual Web Developer Express Edition의 데이터베이스 탐색기)가 표시되지 않으면 보기 메뉴에서 서버 탐색기(Visual Web Developer Express Edition의 데이터베이스 탐색기)를 클릭합니다.

  2. 데이터 소스 선택 대화 상자가 표시되면 다음을 수행합니다.

    1. 데이터 소스 목록에서 Microsoft SQL Server를 클릭합니다.

    2. 데이터 공급자 목록에서 .NET Framework Data Provider for SQL Server를 클릭합니다.

    3. 계속을 클릭합니다.

  3. 연결 추가 대화 상자에서 데이터베이스에 대한 세부 정보(서버 이름, 로그인 자격 증명 등)를 제공한 후 Northwind 데이터베이스를 선택합니다.

  4. 확인을 클릭합니다.

웹 페이지에 타임스탬프 및 데이터 추가

이제 웹 페이지를 만들어 캐싱 기능을 실행해 볼 수 있습니다. 이 단원에서는 타임스탬프를 추가하여 페이지 작성 시간을 추적하고 GridView 컨트롤을 추가하여 Northwind 데이터베이스의 Employees 테이블을 표시합니다.

웹 페이지에 타임스탬프 및 데이터를 추가하려면

  1. Default.aspx 페이지로 전환하거나 이 페이지를 엽니다.

  2. 디자인 뷰로 전환합니다.

  3. 도구 상자의 표준 그룹에서 Label 컨트롤을 페이지로 끌어 오며 기본 이름 Label1은 그대로 둡니다.

  4. 서버 탐색기(Visual Web Developer Express Edition의 데이터베이스 탐색기)에서 데이터 연결을 확장합니다.

  5. 앞서 만든 데이터 연결에 대한 노드를 확장합니다.

  6. 테이블 노드를 확장합니다.

  7. Employees 테이블을 페이지로 끌어 옵니다.

    Visual Web Designer는 사용자가 선택한 연결 및 테이블을 사용하도록 구성된 GridView 컨트롤을 만듭니다.

  8. GridView 작업 메뉴에서 데이터 소스 구성을 클릭합니다.

    기본 데이터 연결 문자열 이름 NorthwindConnectionString1이 데이터 소스 구성 마법사 1단계에 표시됩니다.

  9. 다음을 클릭합니다.

  10. Select 문 구성 창에서 테이블 또는 뷰의 열 지정을 선택합니다.

  11. 이름 목록에서 Employees를 클릭합니다.

  12. 목록에서 EmployeeID, LastName 및 FirstName 열을 선택합니다.

  13. 다음을 클릭합니다.

  14. 마침을 클릭합니다.

    Visual Web Designer는 사용자가 선택한 데이터를 표시하도록 GridView 컨트롤을 구성합니다.

    참고:

    GridView 컨트롤에 대한 필드와 키를 새로 고칠지를 묻는 메시지가 표시되면 를 클릭합니다.

  15. 페이지의 빈 부분을 두 번 클릭합니다.

    Designer는 Page_Load 메서드를 생성하고 뷰를 전환합니다.

  16. 다음의 강조 표시된 코드를 추가하여 페이지 작성 시간을 나타내는 타임스탬프를 표시합니다.

    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As System.EventArgs) _
            Handles Me.Load
         Label1.Text = System.DateTime.Now
    End Sub
    
    protected void Page_Load(Object sender, System.EventArgs e)
    {
         Label1.Text = System.DateTime.Now.ToString();
    }
    
  17. 파일을 저장합니다.

캐싱을 사용하지 않고 페이지 테스트

이제 캐싱을 사용하지 않고 페이지를 실행하고 동작을 확인할 수 있습니다. 페이지가 로드되고 현재 서버 시간이 표시된 다음 데이터가 검색되어 페이지에 표시됩니다.

캐싱을 사용하지 않고 페이지를 테스트하려면

  1. Ctrl+F5를 눌러 페이지를 실행합니다.

  2. 브라우저에서 페이지를 새로 고칩니다.

    페이지를 새로 고칠 때마다 타임스탬프가 달라지며 데이터는 동일하게 유지됩니다.

캐싱을 사용할 수 있게 웹 페이지 구성

이 연습 부분에서는 Northwind 데이터베이스의 Employees 테이블을 기반으로 SQL 캐시 종속성이 허용되도록 페이지를 구성합니다.

캐싱을 사용할 수 있게 웹 페이지를 구성하려면

  1. 소스 뷰로 전환합니다.

  2. 페이지 맨 위에서 다음 지시문을 추가하여 종속성을 지정합니다.

    <%@ OutputCache Duration="3600" SqlDependency="Northwind:Employees" VaryByParam="none" %>
    

VaryByParam 특성은 캐싱 중에 ASP.NET이 페이지 매개 변수(예: 쿼리 문자열 또는 게시된 값)를 고려할지 여부를 나타냅니다. VaryByParam을 none으로 설정하면 매개 변수가 고려되지 않습니다. 따라서 추가 매개 변수의 제공 여부에 관계없이 모든 사용자에게 동일한 페이지가 표시됩니다. VaryByParam을 *(별표)로 설정하면 고유한 요청 매개 변수 조합에 대해 고유한 페이지가 캐시됩니다. 그러나 VaryByParam을 *로 설정하면 여러 다른 버전의 페이지가 캐시되므로 캐싱을 변화시키는 매개 변수를 알 경우에는 VaryByParam 특성에 해당 매개 변수를 명시적으로 지정하는 것이 좋습니다. 자세한 내용은 여러 버전의 페이지 캐싱을 참조하십시오.

Web.config 파일에 캐싱 구성 설정

앞의 단원에서 수행한 것처럼 웹 페이지에 OutputCache를 선언하는 것 외에도 Web.config 파일에 캐싱 세부 정보를 지정해야 합니다.

Web.config 파일을 만들고 업데이트하려면

  1. 웹 사이트에 Web.config 파일이 이미 있으면 4단계로 이동합니다.

  2. 솔루션 탐색기에서 웹 사이트의 이름을 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

  3. 항목 추가 대화 상자에서 웹 구성 파일을 클릭한 다음 추가를 클릭합니다.

    Web.config라는 이름을 사용해야 합니다.

  4. 다음 XML을 system.web 요소의 자식으로 Web.config 파일에 추가합니다.

    <!-- caching section group -->
    <caching>
      <sqlCacheDependency enabled = "true" pollTime = "1000" >
        <databases>
          <add name="Northwind" 
             connectionStringName="NorthwindConnectionString1"
             pollTime = "1000"
          />
        </databases>
      </sqlCacheDependency>
    </caching>
    
    참고:

    연결 문자열 이름 NorthwindConnectionString1은 앞에서 데이터 연결을 만들 때 설정된 것입니다. 연결 문자열의 이름이 다르면 해당 이름을 대신 사용합니다.

    참고:

    연결 문자열에 지정된 계정 자격 증명은 데이터베이스를 폴링할 충분한 권한이 있어야 합니다.

  5. 파일을 저장한 다음 닫습니다.

캐싱을 사용하여 페이지 테스트

캐싱을 사용하고 페이지를 새로 고치면 ASP.NET에서 캐시로부터 페이지 요청을 수행하므로 타임스탬프나 데이터베이스 쿼리가 업데이트되지 않습니다.

캐싱을 사용하여 페이지를 테스트하려면

  • Ctrl+F5를 눌러 페이지를 실행합니다.

    각 페이지를 새로 고쳐도 타임스탬프는 동일하게 유지되며 해당 페이지는 캐시에서 가져옵니다.

데이터 변경

이제 데이터베이스의 데이터를 변경한 후 캐시가 무효화되고 새 페이지가 만들어지는지 확인할 수 있습니다.

데이터를 변경하려면

  1. 서버 탐색기(Visual Web Developer Express Edition의 데이터 탐색기)에서 데이터 연결 노드를 확장합니다.

  2. 앞에서 만든 연결을 확장합니다.

  3. 테이블 노드를 확장합니다.

  4. Employees를 마우스 오른쪽 단추로 클릭한 다음 테이블 데이터 표시를 클릭합니다.

  5. 데이터 테이블의 필드를 편집하여 데이터베이스를 업데이트한 후 웹 페이지가 표시되는 필드가 맞는지 확인합니다.

    또한 SQL 창을 사용할 수도 있습니다. SQL 창이 표시되지 않으면 쿼리 디자이너 메뉴에서 을 클릭한 다음 SQL을 클릭합니다. SQL 명령을 직접 입력한 다음 쿼리 디자이너 도구 모음에서 SQL 실행 단추를 클릭합니다. 예를 들어, 다음 명령을 실행합니다.

    UPDATE dbo.Employees SET LastName = 'Doe' WHERE (EmployeeID = 5)
    

    이렇게 하면 직원 5의 이름이 Doe로 변경됩니다.

  6. 데이터 뷰를 닫습니다.

SQL 캐시 종속성 테스트

이제 페이지를 테스트하여 데이터 및 타임스탬프가 변경되었는지 여부를 확인할 수 있습니다.

SQL 캐시 종속성을 테스트하려면

  1. Ctrl+F5를 눌러 페이지를 실행합니다.

    타임스탬프가 변경되고 새 데이터가 표시됩니다.

  2. Ctrl+F5를 눌러 페이지를 다시 실행합니다.

    이번에는 데이터가 변경되지 않았으므로 타임스탬프는 동일하게 유지되며 캐시에서 페이지를 한 번 더 가져옵니다.

다음 단계

다른 매개 변수를 사용하여 페이지를 캐시할 수도 있습니다. 자세한 내용은 연습: 출력 캐싱을 사용하여 웹 사이트 성능 향상을 참조하십시오. 데이터 액세스에 익숙하지 않을 경우에는 연습: 웹 페이지의 기본 데이터 액세스를 참조하십시오.

참고 항목

개념

ASP.NET에서 SqlCacheDependency 클래스를 사용한 캐싱

참조

DefaultHttpCachePolicy

OutputCacheSettingsSection