내보내기(0) 인쇄
모두 확장

방법: Azure 역할 내 캐시 사용

업데이트 날짜: 2014년 8월

캐싱은 동일한 결과가 나오는 계산을 반복적으로 수행할 필요가 없도록 하여 웹 응용 프로그램의 성능을 향상시켜 주는 기능입니다. 캐싱을 사용하면 자주 요청되는 콘텐츠와 기타 데이터를 한 번 계산한 후 반복해서 사용할 수 있도록 저장할 수 있습니다.

이 항목을 참조하여 Windows Azure 응용 프로그램에 캐싱 지원을 추가할 수 있습니다. Windows Azure 역할 내 캐시를 사용할 경우 캐싱 전용 역할을 설정하거나, 사용되지 않는 리소스를 캐싱용 역할에 사용할 수 있습니다. 예를 들어 웹 역할에서 각 인스턴스에 사용 가능한 리소스의 절반만 사용하는 경우 이러한 리소스를 출력, 세션 상태 또는 자주 사용하는 데이터를 캐시하는 데 사용할 수 있습니다.

Windows Azure 응용 프로그램의 .cscfg 및 .csdef 파일에서 캐싱을 구성하며, 역할에 대한 캐싱 속성 페이지의 설정을 사용하면 이 구성을 가장 쉽게 수행할 수 있습니다. 특정 역할에서 캐시를 사용하려면 해당 역할에 대한 XML 구성 파일에 정보를 추가합니다. ASP.NET 웹 역할에서 적합한 구성 파일은 web.config입니다. 다른 역할에서 구성 파일은 app.config입니다. 구성 파일에 정보를 수동으로 추가하거나 NuGet 패키지를 사용하여 추가할 수 있습니다. 역할 내 캐시에 대한 자세한 내용은 Windows Azure 역할 내 캐시를 참조하십시오.

두 가지 방법으로 캐싱을 구성할 수 있습니다. 즉, 캐싱 전용 캐시 작업자 역할을 추가하여 클라우드 서비스에 캐싱 기능을 추가하거나, 기존 역할의 메모리, CPU 및 대역폭 리소스를 사용하도록 캐싱을 구성할 수 있습니다. 전용 캐시는 별도의 역할로 실행됩니다. 이 옵션은 인스턴스의 리소스를 해당 인스턴스를 실행하는 데만 사용하려는 경우에 적합합니다. 같은 위치에 배치된 캐시는 동일한 인스턴스에서 다른 역할로 실행됩니다. 이 옵션은 실행 시 시스템 리소스를 모두 사용하지 않는 역할 인스턴스가 있는 경우에 적합합니다.

이 항목에는 다음과 같은 섹션이 포함되어 있습니다.

기존 역할에 캐싱 기능을 추가하거나, 다른 역할에서 사용할 수 있는 캐시 작업자 역할을 만들 수 있습니다.

  1. Windows Azure 프로젝트에 대한 바로 가기 메뉴를 열고 새 작업자 역할 프로젝트를 선택합니다.

  2. 프로젝트 템플릿 목록에서 캐시 작업자 역할 템플릿을 선택하고 프로젝트에 CacheWorkerRole1과 같은 이름을 지정합니다.

    작업자 역할 프로젝트가 만들어집니다.

  3. Windows Azure 프로젝트에서 역할 노드를 확장하고 방금 만든 캐시 작업자 역할에 대한 바로 가기 메뉴를 연 다음 속성을 선택합니다.

    이 프로젝트의 역할 디자이너가 표시됩니다.

  4. 구성 탭에서 가상 컴퓨터의 적절한 크기와 이 역할의 인스턴스 수를 설정합니다.

  5. 캐싱 탭의 캐시 클러스터 설정에서 전용 캐시가 선택되어 있는지 확인합니다.

  6. 기본 캐시에 원하는 동작을 구성하거나 사용자 지정 속성을 사용하여 명명된 캐시를 만듭니다.

    명명된 각 캐시에는 구성 가능한 고유 속성 집합이 있습니다. 테이블 머리글을 가리키면 명명된 각 캐시를 구성하는 방법에 대한 정보가 표시됩니다. 자세한 내용은 방법: Azure 역할 내 캐시 구성를 참조하십시오.

  1. Windows Azure 프로젝트에서 역할 노드를 확장하고 캐싱 기능을 추가할 역할에 대한 바로 가기 메뉴를 연 다음 속성을 선택합니다.

  2. 캐싱 탭에서 캐싱 사용 확인란을 선택합니다.

  3. 같은 위치에 배치됨 옵션을 선택하고 캐시 전용으로 할당할 역할을 호스팅하는 가상 컴퓨터의 메모리 리소스 백분율을 선택합니다. 일반적으로 이 값은 가상 컴퓨터 크기가 작음으로 설정된 경우 30~55%, 매우 큼으로 설정된 경우 최대 80%가 되어야 합니다. 클라우드 서비스가 일반적인 부하 상태에서 실행 중일 때 원격 데스크톱을 사용하여 가상 컴퓨터에 로그온한 다음 작업 관리자를 사용하여 실제 메모리 백분율을 확인하면 이 값을 최적화할 수 있습니다. 같은 위치에 배치된 캐시에는 나머지 메모리를 사용할 수 있습니다.

  4. 기본 캐시에 원하는 동작을 구성하거나 사용자 지정 속성을 사용하여 명명된 캐시를 만듭니다.

이 섹션에 설명된 대로 캐싱 참조를 프로젝트에 수동으로 추가하거나, 이 항목의 뒷부분에 나오는 NuGet을 사용하여 역할에 캐싱 추가에 설명된 대로 NuGet을 사용할 수 있습니다. 수동으로 참조를 추가하면 디스크에서 해당 어셈블리가 있는 위치를 알 수 있지만 이 방법은 보다 복잡할 수 있습니다.

  1. 캐시를 사용할 역할이 포함된 프로젝트의 참조 노드에 대한 바로 가기 메뉴에서 참조 추가를 선택합니다.

  2. 참조 추가 대화 상자에서 적절한 확인란을 선택하여 다음 어셈블리에 대한 참조를 추가하고 확인 단추를 선택합니다.

    • Microsoft.ApplicationServer.Caching.AzureClientHelper

    • Microsoft.ApplicationServer.Caching.Client

    • Microsoft.ApplicationServer.Caching.Core

    • Microsoft.Web.DistributedCache

  3. 캐싱을 추가할 역할이 포함된 프로젝트에서 웹 역할 프로젝트의 web.config 파일을 열거나 다른 프로젝트 형식의 app.config 파일을 엽니다.

  4. configSections 섹션이 없는 경우 이 섹션을 추가합니다. 이 섹션에서 다음 코드와 같이 캐싱 섹션에 대한 선언을 추가합니다.

    <configSections>     <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>   </configSections> 
    
  5. 사용할 명명된 캐시를 식별하는 XML을 추가합니다.

    <dataCacheClients>     <tracing sinkType="DiagnosticSink" traceLevel="Verbose"/>     <dataCacheClient name="default">       <autoDiscover isEnabled="true" identifier="WebRole1"/>     </dataCacheClient>   </dataCacheClients> 
    

    앞의 예와 같이 캐시를 하나만 선언하는 경우 이름이 default일 수 있습니다. 캐시를 여러 개 선언하는 경우에는 각 캐시에 대해 개별 dataCacheClient 섹션을 추가하고 각 캐시에 고유한 이름을 지정합니다. default로 명명된 캐시는 코드에서 GetDefaultCache 개체에 대해 DataCacheFactory 메서드를 호출할 때 반환됩니다. identifier 특성은 캐싱 지원을 추가한 웹 역할 프로젝트나 캐시 작업자 역할의 이름을 지정합니다.

    이 역할에서는 분산 캐시를 구성했으므로 DataCacheFactory 및 DataCache 개체를 만들어 코드에서 캐시에 액세스할 수 있습니다.

  6. 코드 숨김 파일에서 Page 클래스에 선언을 추가하고, 난수 생성기를 추가하여 캐시를 테스트할 데이터를 생성합니다.

            static DataCacheFactory myFactory;         static DataCache myCache;         static Random randomizer = new Random(); 
    
  7. 캐시를 사용하는 웹 응용 프로그램을 만들려면 Default.aspx 웹 페이지의 코드를 다음 코드로 바꿉니다.

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"     CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>  <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">        <p style="font-size:large; height: 283px;">         <asp:Label ID="Label0" runat="server" Text="Text for the cache:   " />         <asp:TextBox runat="server" ID="TextBox1" Width="125" /> <br /> <br />          <asp:Button runat="server" onclick="OnPutInCache" Text="Put in Cache" id="AddCachedItemsButton" /> &nbsp;&nbsp;&nbsp;         <asp:Button runat="server" onclick="OnGetFromCache" Text="Get from Cache" id="GetCachedItemsButton" /> &nbsp;&nbsp;&nbsp;         <asp:Label ID="Label1" runat="server" Width="500" />          <br /> <br />  <br />               Cached Datestamp: <%= DateTime.Now.ToString() %><br />         Fresh Datestamp: <asp:Substitution runat="server" methodname="GetFreshDateTime" id="UnCachedArea" /><br /><br />     </p>  </asp:Content>  
    
  8. 캐시를 초기화하는 코드를 추가합니다.

            protected void Page_Load(object sender, EventArgs e)         {             try             {                 //Get a named cache (or default cache)                 if (myCache == null)                 {                     // You should initialize the data cache factory                     // once and keep reusing the same object.                     myFactory = new DataCacheFactory();                     myCache = myFactory.GetDefaultCache();                     // If you want to get a handle to a named cache                     // that is not the default cache, supply the                     // cache's name from the configuration file:                     // myCache = myFactory.GetCache("anotherNamedCache");                 }             }             catch (DataCacheException dce)             {                 Label1.Text = dce.ToString();             }         } 
    

    이 초기화 코드는 캐시를 사용하기 전에 호출해야 합니다. 예를 들어 이 코드를 Page_Load 이벤트 처리기에 추가할 수 있습니다. 그렇지 않으면 캐시 팩터리 메서드 GetDefaultCache()를 사용하여 캐시에 대한 핸들이 만들어집니다. 캐시 이름을 지정하지 않으면 default라는 캐시가 사용됩니다. 캐시 메서드로 작업할 때마다 DataCacheException 예외가 throw될 수 있습니다. 앞의 코드에서는 이 예외를 catch하여 레이블 컨트롤로 사용자에게 표시합니다.

  9. 캐시를 사용하는 코드를 추가합니다.

            /// <summary>         /// Adds the value of the TextBox to the cache         /// </summary>         protected void OnPutInCache(object sender, EventArgs e)         {             try             {                 myCache.Put("MyKey", TextBox1.Text);                 Label1.Text = " \" " + TextBox1.Text + "\" has been added to the cache.";             }             catch (DataCacheException dce)             {                 Label1.Text = dce.ToString();             }         } 
    

    앞의 예에서는 텍스트 상자와 단추가 있는 간단한 웹 양식을 가정하지만 동일한 코드로 어떤 데이터라도 캐시할 수 있습니다. 캐시에 데이터를 추가하려면 예와 같이 Put 메서드를 사용합니다. 캐시는 사전으로 작동합니다. 첫 번째 인수는 키이고 두 번째 인수는 캐시할 데이터입니다.

  10. Get 메서드를 호출하고 키를 제공하여 캐시에서 데이터를 검색합니다.

            /// <summary>         /// Gets the cached item (that was added from the TextBox)         /// </summary>         protected void OnGetFromCache(object sender, EventArgs e)         {             try             {                 string outputFromCache = myCache.Get("MyKey") as string;                 Label1.Text = "\"" + outputFromCache + "\" has been retrieved from the cache.";             }             catch (DataCacheException dce)             {                 Label1.Text = dce.ToString();             }         } 
    

출력 캐싱을 사용하면 이미 검색한 데이터를 다시 생성할 필요가 줄어 웹 사이트의 성능이 향상됩니다. 응용 프로그램의 구성 파일을 편집하면 프로그램 코드를 변경하지 않고도 분산 캐시를 사용하여 ASP.NET 응용 프로그램의 출력을 캐시할 수 있습니다.

  1. 출력 캐싱을 구성할 ASP.NET 응용 프로그램의 web.config 파일을 엽니다.

  2. 다음 줄을 추가하여 분산 캐시를 사용하도록 출력 캐싱을 구성합니다.

        <caching>       <outputCache defaultProvider="defaultProvider" >         <providers>           <add cacheName="default"                name="defaultProvider"                dataCacheClientName="nameOfDataCacheClient"                applicationName="<unique-appId>"                type= "Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" />         </providers>       </outputCache>     </caching> 
    

    cacheName에는 지정된 dataCacheClient에 의해 호스팅되는 적절한 명명된 캐시의 이름을 지정합니다. dataCacheClient 특성은 캐시를 호스팅하는 역할을 지정합니다.

  3. 출력을 캐시할 페이지에 OutputCache 지시문을 추가합니다.

    <%@ OutputCache Duration="60" VaryByParam="*" %>
    

    Duration은 캐시에 데이터를 유지할 시간(초)입니다. VaryByParam은 각 매개 변수 조합에 대해 서로 다른 버전의 페이지가 캐시됨을 나타냅니다. 이 컨텍스트에서 별표(*)는 모든 매개 변수에 따라 달라짐을 나타냅니다. 매개 변수를 이름으로 지정할 수도 있습니다. 사용 가능한 옵션에 대한 자세한 내용은 OutputCache 지시문을 참조하십시오.

    출력 캐시를 구성했습니다.

이 섹션에서는 코드를 수정하지 않고 ASP.NET 웹 응용 프로그램에 대한 세션 상태 정보를 캐시하는 방법을 보여 줍니다.

  1. 세션 상태 캐싱을 구성할 ASP.NET 웹 응용 프로그램의 web.config 파일을 엽니다.

  2. 다음 줄을 추가하고 사용할 캐시의 이름(이 경우 "default"), 공급자 이름, dataCacheClient의 이름 및 응용 프로그램의 appId를 지정합니다.

        <!--Set up custom session state provider -->     <sessionState mode="Custom" customProvider="defaultProvider">       <providers>         <add cacheName="default"              name="defaultProvider"              dataCacheClientName="nameOfDataCacheClient"              applicationName="<unique-appId>"              type= "Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"/>       </providers>     </sessionState> 
    

용도에 따라 다수의 명명된 캐시를 만들고 구성할 수 있습니다. 예를 들어 출력용 캐시 하나와 프로그래밍 방식의 데이터용 캐시 하나를 사용할 수 있습니다.

  1. 역할에 대한 역할 디자이너에서 캐싱 탭을 엽니다.

  2. 명명된 캐시에서 출력을 위한 명명된 캐시와 세션 상태 정보를 위한 명명된 캐시를 추가합니다.

  3. 명명된 캐시 테이블에서 명명된 캐시에 대한 속성을 설정합니다.

    예를 들어 제거 정책은 출력 캐시의 경우 TTL로 설정하고 세션 상태 캐시의 경우 없음으로 설정할 수 있습니다.

  4. web.config 파일을 열고 outputCache 및 sessionState 섹션의 cacheName 특성을 새 값으로 변경합니다.

패키지 관리자인 NuGet을 사용하면 기존 역할에 가장 쉽게 캐싱을 추가할 수 있습니다. Windows Azure Tools가 설치되어 있는 경우 NuGet에서는 적절한 참조를 추가하고 구성 파일에 필요한 수정 작업을 수행할 수 있습니다.

  1. 최신 버전의 NuGet이 설치되어 있는지 확인합니다.

    자세한 내용 및 설치 지침은 NuGet을 참조하십시오.

  2. 솔루션 탐색기에서 캐싱을 추가할 역할의 프로젝트 노드에 대한 바로 가기 메뉴를 열고 NuGet 패키지 관리를 선택합니다.

    NuGet 패키지 관리 대화 상자가 나타납니다.

  3. 온라인 갤러리에서 Windows Azure 역할 내 캐시를 선택하고 설치 단추를 선택합니다.

    프로젝트가 수정되고, 캐싱 어셈블리에 대한 참조가 추가되며, 캐시를 구성하도록 구성 파일이 업데이트됩니다.

  4. 프로젝트의 구성 파일에서 dataCacheClient 자식 요소가 있는 autoDiscover 요소를 검색합니다.

  5. 해당 자식 요소에서 identifier 특성 값을 캐시를 제공하는 역할의 이름으로 변경합니다.

        <dataCacheClient name="default">       <autoDiscover isEnabled="true" identifier="CacheWorkerRole1"/>     </dataCacheClient> 
    
  6. 캐시를 사용하기 시작하려면 이 항목의 앞에서 설명한 대로 코드를 수정합니다.

    출력 캐시 또는 세션 상태 캐시를 사용하도록 설정하려면 해당한 역할에 대한 구성 파일을 편집하고 이 항목의 앞에서 설명한 대로 다른 변경 작업을 수행합니다. 캐시를 프로그래밍 방식으로 사용하려면 코드 숨김 파일에 캐시를 만들고 데이터를 추가 및 검색하기 위한 적절한 코드를 추가합니다.

  7. (선택 사항) 전체 솔루션에 대한 NuGet 패키지를 관리하고 여러 프로젝트에 동시에 캐싱 지원을 추가하려면 솔루션 노드에 대한 바로 가기 메뉴를 열고 NuGet 패키지 관리를 선택합니다.

참고 항목

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2014 Microsoft