다음을 통해 공유


IIS 7 출력 캐싱 구성

작성자: Tali Smith

IIS(인터넷 정보 서비스)에는 메모리에 동적 PHP 콘텐츠(또는 Microsoft® ASP.NET 또는 클래식 ASP 또는 기타 동적 페이지의 출력)를 캐시할 수 있는 출력 캐시 기능이 포함되어 있습니다. 동적 출력을 생성하는 데 사용되는 스크립트가 각 요청에 대해 실행할 필요가 없으므로 이렇게 하면 성능이 크게 향상될 수 있습니다. 캐시는 클라이언트에서 서버로 전송된 HTTP 헤더뿐만 아니라 쿼리 문자열 값에 따라 캐시되는 출력을 변경할 수 있습니다. 또한 캐시는 Http.sys 커널 모드 드라이버와 통합되어 성능을 향상합니다.

출력 캐싱을 사용하는 경우

웹 콘텐츠는 정적 콘텐츠와 동적 콘텐츠라는 두 가지 기본 범주로 나눌 수 있습니다.

  • 정적 콘텐츠는 요청에서 요청으로 변경되지 않습니다. 웹 브라우저로 반환되는 콘텐츠는 항상 동일합니다. 정적 콘텐츠의 예로는 HTML, JPG 또는 GIF 파일이 있습니다.
  • 동적 콘텐츠는 모든 요청에 따라 변경되는 출력입니다. 예를 들어 ASP.NET 또는 PHP 콘텐츠가 있습니다.

이러한 두 범주 사이에는 반동적인 콘텐츠가 있습니다. 데이터베이스 쿼리를 실행하는 동적 ASP.NET 페이지를 상상해 보십시오. 기본 데이터베이스 테이블이 자주 변경되지 않는 경우 모든 요청에서 이 쿼리를 실행할 이유가 없습니다.

IIS는 이러한 유형의 콘텐츠가 요청에서 요청으로 변경되지 않으므로 정적 콘텐츠(예: HTML 페이지, 이미지 및 스타일시트)를 자동으로 캐시합니다. 또한 IIS는 업데이트할 때 파일의 변경 내용을 검색하고 필요에 따라 IIS가 캐시를 플러시합니다.

IIS 출력 캐싱 기능은 반동적인 콘텐츠를 대상으로 합니다. 동적 요청에 대한 정적 응답을 캐시하고 확장성을 높일 수 있습니다.

모든 동적 페이지가 출력 캐시를 활용할 수 있는 것은 아닙니다. 동적 출력이 반복적으로 요청되지 않고 콘텐츠를 캐시하는 데 사용되는 메모리가 낭비되기 때문에 고도로 개인화된 페이지(예: 쇼핑 카트 또는 전자 상거래 트랜잭션)는 적합하지 않습니다. HTML 양식에 대한 POST 형식 요청의 결과로 출력되는 콘텐츠도 캐시할 수 없습니다.

출력 캐시에 가장 적합한 후보는 데이터를 동적으로 생성하지만 URL 또는 헤더 정보에 따라 요청에서 요청으로 변경할 가능성이 없는 페이지입니다. 예를 들어 웹 페이지에 표시할 이미지의 크기를 동적으로 조정하는 사진 갤러리 형식 애플리케이션은 데이터를 캐싱하면 서버가 각 요청에 대한 이미지 크기 조정을 다시 처리할 필요가 없으므로 출력 캐시에 적합한 후보입니다. 출력 캐시 기능을 활용할 수 있는 애플리케이션 유형의 또 다른 좋은 예는 주식 시세 애플리케이션입니다.

캐시 정책 선택

IIS는 다음 두 가지 유형의 캐시 정책을 지원합니다.

  • varyByQuerystring- URL은 동일하지만 쿼리 문자열 값은 다릅니다.
  • varybyHeaders는 클라이언트에서 서버로 전송되는 HTTP 헤더에 따라 캐시를 변경할 수 있습니다.

캐시 무효화

동적 콘텐츠를 사용하면 데이터가 자주 변경될 수 있으며 캐시를 플러시하여 새 데이터를 검색하고 다시 캐시해야 합니다. 데이터가 매 초마다 자주 변경되더라도 데이터를 캐시하는 것이 유용할 수 있습니다. 사이트는 초당 수백 개 이상의 요청을 받을 수 있으며 캐싱은 데이터를 검색하기 위해 데이터베이스로의 여행을 줄여 웹 서버와 데이터베이스 서버를 추가 작업에서 저장할 수 있습니다.

IIS는 동적 콘텐츠를 무효화하는 두 가지 방법을 지원합니다.

  • 간단한 시간 제한 기간을 사용합니다. 구성 속성은 CacheForTimePeriod입니다.
  • 기본 리소스에 대한 변경 사항을 검색합니다. 구성 속성은 CacheUntilChange입니다. 기본 리소스가 변경될 때 캐시를 플러시하려는 경우에만 이 유형의 무효화 체계를 사용합니다.

캐시 가치 구성

출력 캐싱을 사용하도록 설정하더라도 IIS는 요청을 즉시 캐시하지 않습니다. IIS가 요청을 "캐시에 합당하다"고 간주하기 전에 몇 번 요청해야 합니다. 캐시 적합성은 ServerRuntimeSection 클래스 문서에 설명된 ServerRuntime 섹션을 통해 구성할 수 있습니다.

두 가지 속성은 캐시의 적합성을 결정합니다.

  • frequentHitTimePeriod
  • frequentHitThreshold

캐시 가능한 URL에 대한 요청보다 <frequentHitThreshold> 많은 요청이 에 도착하는 경우에만 요청이 캐시됩니다 <frequentHitTimePeriod>. 기본 설정 frequentHitTimePeriod 은 10초입니다. 기본 설정 frequentHitThreshold 은 2안타입니다.

IIS 관리자를 통해 출력 캐싱 구성

캐시는 새 IIS 관리 도구의 사용자 인터페이스 기능을 사용하여 쉽게 구성할 수 있습니다.

  1. 시작 메뉴에서 관리영구 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.

  2. 왼쪽의 트리 뷰에서 애플리케이션을 찾습니다.

  3. 출력 캐싱 메뉴 항목을 선택합니다.

  4. 오른쪽 열의 [작업] 메뉴에서 [추가]를 클릭합니다. 여기에서 출력 캐싱 규칙을 추가할 수 있습니다.

  5. 예를 들어 파일 이름 확장명 필드에 .php 입력한 다음 사용자 모드 캐싱을 선택합니다.

  6. 고급을 클릭한 다음 쿼리 문자열 변수 검사 상자를 선택합니다.

  7. 쿼리 문자열 변수 텍스트 상자에 적절한 변수입력합니다.

    캐시 규칙 추가 대화 상자, 출력 캐싱 페이지 및 고급 출력 캐시 규칙 설정 스크린샷

    그림 1: 출력 캐싱 예제

Web.config 파일을 통해 출력 캐싱 구성

콘텐츠 디렉터리에 있는 로컬 Web.config 파일에서 캐싱 기능을 구성할 수도 있습니다. 다음은 varyByQueryString 매개 변수가 *(쿼리 문자열 매개 변수의 모든 고유한 변형 캐시를 의미) 및 시간 제한이 1초인 ShowStockPrice.asp 페이지에 필요한 구성의 샘플입니다.

<configuration> 
     <location path="showStockPrice.asp">     
       <system.webserver>        
         <caching>         
           <profiles>
             <add varybyquerystring="*"location="Any"
               duration="00:00:01" policy="CacheForTimePeriod"            
               extension=".asp">
           </profiles>
         </caching>
       </system.webserver>
     </location>
</configuration>

더 빠른 성능을 위해 이 데이터를 커널에 캐시하려면 정책 특성을 kernelCachePolicy로 변경하면 됩니다.

참고 항목

Microsoft ASP.NET 출력 캐시 기능을 이미 포함하고 있습니다. IIS 출력 캐시 기능은 ASP.NET 캐시와 병렬로 작동하며 모든 유형의 애플리케이션에서 작동합니다.

성능 카운터 확인

출력 캐시의 성능을 보려면 안정성 및 성능 모니터에서 출력 캐시 카운터를 확인할 수 있습니다.

  1. 시작 메뉴에서 관리istrative Tools를 클릭한 다음 안정성 및 성능 모니터 클릭합니다. (Windows Vista® 또는 Windows® 7에서는 관리istrative Tools가 제어판 있습니다.)
  2. 오른쪽의 트리 보기에서 성능 모니터 선택한 다음 도구 모음을 클릭합니다+.
  3. 웹 서비스 캐시 카운터로 이동한 다음 클릭하여 엽니다.
  4. 캐시된 총 URI 카운터를 추가합니다.

성능 테스트를 실행하는 경우 캐시된 URI 수가 요청된 항목의 수와 함께 증가하는 것을 볼 수 있습니다.

커널 모드 캐싱 사용

IIS 출력 캐시는 다음 두 가지 캐시 정책을 지원합니다.

  • IIS 작업자 프로세스에 상주하는 캐시를 사용하는 사용자 모드 출력 캐시 정책입니다.
  • 커널 모드 캐시 정책- 커널 모드 드라이버인 Http.sys 있는 캐시를 사용합니다.

커널 모드에서 콘텐츠를 캐싱하면 웹 사이트 성능 속도를 높일 수 있습니다. 커널 모드 캐싱을 사용하는 예제는 IIS 출력 캐싱 문서에서 찾을 수 있습니다.

사용자 모드와 커널 모드 출력 캐시 간에는 두 가지 중요한 차이점이 있습니다.

  • 커널 모드 출력 캐시는 인증 또는 권한 부여와 같은 사용자 모드에서 실행해야 하는 모듈 및 기능을 지원하지 않습니다. 예를 들어 기본 인증 또는 Windows® 인증과 같은 인증 체계를 사용하는 경우 캐시 정책이 작동하지 않습니다. 콘텐츠는 제공되지만 캐시되지 않습니다. 응답이 커널 모드로 캐시되지 않는 이유에 대한 자세한 내용은 이 기술 자료 문서에서 확인할 수 있습니다.
  • 커널 모드 출력 캐시는 varyByHeaders 특성을 지원하지만 varyByQuerystring은 지원하지 않습니다.

캐싱 문제 해결

FREB(실패한 요청 이벤트 버퍼링)는 요청이 캐시되는지 여부를 확인하는 가장 좋은 방법입니다. 요청이 캐시되지 않는 이유를 확인할 수도 있습니다. 예를 들어 FREB 로그의 HTTPSYS_CACHEABLE 이벤트는 커널 모드 캐시가 활성화되지 않아서 요청이 캐시되지 않음을 알 수 있습니다.

다음 명령을 사용하여 커널 모드에서 캐시되는 콘텐츠를 확인할 수 있습니다.

netsh http show cachestate

기본 페이지(가장 자주 요청된 페이지)만 캐시하도록 출력 캐시를 설정할 수 있습니다.

  1. %systemdrive%\inetpub\wwwroot\<애플리케이션> 디렉터리에 default.aspx 파일을 만들고 다음 코드를 추가합니다.

    <%=DateTime.Now%>
    
  2. 시작 메뉴에서 관리영구 도구를 클릭한 다음 IIS(인터넷 정보 서비스) 관리자를 클릭합니다.

  3. 왼쪽의 트리 뷰를 사용하여 애플리케이션으로 이동합니다.

  4. 페이지 아래쪽에서 콘텐츠 보기를 클릭합니다.

  5. 기본 문서(예: Default.aspx 페이지)를 선택합니다.

  6. 오른쪽의 작업 메뉴에서 기능 보기로 전환을 클릭합니다. 구성한 모든 설정은 이제 기본 문서에만 적용됩니다.

  7. 출력 캐싱 규칙 설정을 엽니다.

  8. 파일 확장자로 .aspx 추가합니다.

  9. 커널 모드 캐싱을 선택하고, 시간 간격을 선택하고, 캐시된 파일 모니터를 사용하도록 설정한 다음, 시간 간격(예: 00:00:30)을 입력합니다.

  10. Windows® Internet Explorer®로 이동합니다 http://localhost//<your application> . 페이지를 지속적으로 새로 고침하면(Ctrl+F5 키를 눌러 브라우저 캐시를 사용하지 않는지 확인) 시간이 30초 동안 변경되지 않는 것을 볼 수 있습니다.

참고 항목

이 문서는 2007년 5월 2일에 게시된 Bill Staples의 "동적 콘텐츠에 대한 IIS 7 출력 캐싱 - ASP 및 PHP 애플리케이션 속도 향상" 문서의 정보를 기반으로 합니다.

참고 항목