다음을 통해 공유


IIS 8.0 애플리케이션 초기화

작성자 : Shaun Eagan

호환성

버전 참고
IIS 8.0 애플리케이션 초기화는 IIS 8.0용으로 기본 제공되었습니다.
IIS 7.5 애플리케이션 초기화는 IIS 7.5용 대역 외 모듈로 릴리스되었습니다.
IIS 7.0 IIS 7.0에는 애플리케이션 초기화가 지원되지 않았습니다.

문제

웹 사이트 관리자가 직면하는 일반적인 문제는 웹 애플리케이션에 대한 초기화 작업 및 "준비" 작업을 수행해야 한다는 것입니다. 더 크고 복잡한 웹 애플리케이션은 긴 시작 처리, 주요 메모리 내 캐시, 콘텐츠 생성 등을 수행해야 할 수 있습니다. 첫 번째 HTTP 요청을 제공하기 전입니다.

해결 방법

IIS 8.0 애플리케이션 초기화 기능을 사용하면 웹 사이트 관리자가 IIS 8.0을 구성하여 하나 이상의 웹 애플리케이션에 대한 초기화 작업을 사전에 수행할 수 있습니다. 애플리케이션이 초기화되는 동안 애플리케이션이 초기화 작업을 완료할 때까지 정적 콘텐츠를 자리 표시자 또는 "시작 페이지"로 반환하도록 IIS 8.0을 구성할 수도 있습니다.

애플리케이션 초기화 기능은 IIS 8.0에서 웹 애플리케이션을 초기화하는 방법과 시기를 알려주는 전역 및 애플리케이션별 규칙의 조합을 통해 구성됩니다. 또한 애플리케이션 초기화 기능은 IIS URL 다시 쓰기 모듈과의 통합을 지원하여 애플리케이션이 초기화되는 동안 자리 표시자 콘텐츠의 더 복잡한 처리를 지원합니다.

참고

애플리케이션 초기화와 ARR(애플리케이션 요청 라우팅) 사이에는 알려진 비호환성이 있습니다. ARR이 설치된 컴퓨터에서는 애플리케이션 초기화를 사용하지 않는 것이 좋습니다.

단계별 지침

사전 요구 사항

애플리케이션 초기화 기능을 사용하려면 IIS 8.0을 설치해야 합니다. 또한 IIS "애플리케이션 개발" 하위 기능 내의 애플리케이션 초기화 기능을 설치해야 합니다.

Windows Server 2012 서버 관리자 UI의 다음 스크린샷은 애플리케이션 초기화 기능을 보여줍니다.

Windows Server 2012 설치된 애플리케이션 초기화 기능을 보여 주는 스크린샷

참고

또한 이 연습에서는 ASP.NET 4.5 애플리케이션을 사용하여 애플리케이션 초기화 기능을 보여 줍니다. 이 문서의 끝에 있는 부록에는 샘플 애플리케이션과 컴퓨터에서 애플리케이션을 설정하는 방법에 대한 지침이 포함되어 있습니다.

알려진 버그에 대한 해결 방법

  • 현재 이 기능에 대한 알려진 버그가 없습니다.

전역 애플리케이션 초기화

애플리케이션 초기화 기능은 컴퓨터 전체 applicationHost.config 파일과 애플리케이션 수준 web.config 파일의 두 위치에서 구성할 수 있습니다. applicationHost.config 파일의 구성에는 "전역" 애플리케이션 초기화 설정이 포함되며 애플리케이션 수준 web.config 파일에는 "로컬" 애플리케이션 초기화 설정이 포함되어 있습니다.

이 연습에서는 애플리케이션과 연결된 애플리케이션 풀이 시작될 때 항상 초기화되도록 샘플 애플리케이션을 구성합니다. 애플리케이션 풀 동작은 applicationHost.config만 구성할 수 있으므로 애플리케이션 풀이 시작될 때마다 애플리케이션 초기화를 실행하는 것은 "전역" 애플리케이션 초기화 설정의 일부로 간주됩니다.

applicationHost.config 수정

메모장에 있는 %WINDIR%\system32\inetsrv\config applicationHost.config 파일을 엽니다. ("관리자 권한으로 실행" 옵션을 사용하여 텍스트 편집기를 실행해야 합니다.)

<applicationPools 구성 섹션을> 찾은 다음 이름이 ".NET v4.5"인 애플리케이션 풀 항목을 찾습니다.

애플리케이션 풀이 항상 실행되도록 애플리케이션 풀 항목을 수정합니다. 전역 애플리케이션 초기화를 수행하려는 애플리케이션의 경우 일반적으로 연결된 애플리케이션 풀을 시작하고 실행하려고 합니다. 구성 코드 조각의 굵게 표시된 특성은 구성 항목에 추가할 항목을 보여줍니다.

<add name=".NET v4.5" startMode="AlwaysRunning" managedRuntimeVersion="v4.0" />

구성 요소에 applicationHost.config <sites> 조금 더 아래로 스크롤합니다. 해당 섹션 내에는 샘플 애플리케이션에 대한 항목이 있습니다 <application> (컴퓨터에서 샘플 애플리케이션을 만드는 방법에 대한 지침은 부록 참조). 애플리케이션을 "appinit"라고 하며 경로 특성 값은 "/appinit"입니다. <application> 구성 코드 조각에 표시된 대로 굵게 표시된 preloadEnabled 특성을 추가하여 항목을 수정한 다음 변경 내용을 저장합니다.

<application path="/appinit" preloadEnabled="true" applicationPool=".NET v4.5">

preloadEnabled를 "true"로 설정하면 IIS 8.0에서 연결된 애플리케이션 풀이 시작될 때 애플리케이션에 "fake" 요청을 보냅니다. 따라서 이전 단계에서 애플리케이션 풀의 startMode 를 "AlwaysRunning"으로 설정했습니다.

애플리케이션 풀의 조합이 항상 실행되고 애플리케이션 자체가 항상 가짜 요청을 수신하도록 표시되면 컴퓨터가 다시 시작되거나 World Wide Web 서비스가 재활용될 때마다 IIS 8.0은 애플리케이션 풀 instance 실행 중이며 애플리케이션 "/appinit"가 항상 애플리케이션을 시작하도록 트리거하는 가짜 요청을 전송하도록 합니다.

애플리케이션의 web.config 수정

메모장의 두 번째 instance 사용하여 다음 위치에 있는 애플리케이션 수준 web.config 파일을 엽니다. ("관리자 권한으로 실행" 옵션을 사용하여 텍스트 편집기를 실행해야 합니다.)

C:\inetpub\wwwroot\appinit

참고: 기본 웹 사이트가 다른 실제 드라이브에 설치된 경우 드라이브 문자를 변경합니다.

web.config 파일에는 이미 미리 채워진 몇 가지 구성 섹션이 있지만 주석 처리되었습니다. 구성 섹션 내에 표시된 구성 코드 조각의 <system.webServer> 주석 처리를 제거합니다. 이 코드 조각은 web.config 파일의 주석 "연습 1 - 1단계" 바로 아래에 있습니다. 그런 다음, 변경 사항을 저장합니다.

<applicationInitialization
    remapManagedRequestsTo="Startup.htm" 
    skipManagedModules="true" >
  <add initializationPage="/default.aspx" />
</applicationInitialization>

applicationInitialization 요소는 애플리케이션을 초기화하기 위해 애플리케이션의 루트 URL(이 예제에서는 "/default.aspx")에 요청을 실행해야 한다고 IIS에 알립니다. IIS는 요청이 "/default.aspx"가 완료될 때까지 기다리는 동안 활성 브라우저 클라이언트에 "Startup.htm"을 제공합니다. "Startup.htm"는 애플리케이션의 "시작 페이지"입니다.

애플리케이션 실행

관리자 권한 명령 프롬프트 창에서 아래와 같은 명령을 사용하여 World Wide Web Service를 재활용합니다.

net stop w3svc & net start w3svc

"관리자 권한으로 실행" 옵션을 사용하여 명령 프롬프트 창을 실행해야 합니다.

인터넷 Explorer 사용하여 다음 URL로 이동합니다.

http://localhost/appinit/default.aspx

브라우저는 web.config 구성된 "시작 페이지"이므로 처음 몇 초 동안 회색 배경의 정적 "Startup.htm" 페이지를 반환합니다. 웹 브라우저에서 페이지를 계속 새로 고치고 약 8초 후에(샘플 애플리케이션의 global.asax에서 스레드 절전 모드로 시뮬레이션됨) 흰색 배경의 default.aspx에 대한 "실제" 콘텐츠를 수신하는 것을 확인할 수 있습니다. 이는 애플리케이션 초기화가 완료되었음을 나타냅니다.

겹치는 프로세스 재활용 구성

IIS 8.0은 백그라운드에서 겹치는 프로세스에서 애플리케이션 초기화를 수행하여 겹치는 프로세스 재활용과 글로벌 애플리케이션 초기화를 통합합니다. IIS에서 활성 작업자 프로세스가 재활용되고 있음을 감지하면 새 작업자 프로세스가 새 프로세스의 모든 애플리케이션 초기화 URL 실행을 완료할 때까지 IIS는 활성 트래픽을 새 재활용 작업자 프로세스로 전환하지 않습니다. 이렇게 하면 애플리케이션이 라이브로 실행되고 나면 웹 사이트를 검색하는 고객에게 애플리케이션 초기화 페이지가 표시되지 않습니다.

applicationHost.config 메모장의 instance 돌아가기. ".NET v4.5"에 대한 애플리케이션 풀 항목을 아래 표시된 구성 코드 조각과 같이 수정합니다.

<add name=".NET v4.5"
                startMode="AlwaysRunning"
    managedRuntimeVersion="v4.0" >
  <recycling logEventOnRecycle="Schedule">
    <periodicRestart requests="30" />
  </recycling>
</add>

변경 내용을 저장해야 합니다.

<재활용> 요소는 30개의 HTTP 요청마다 작업자 프로세스를 재활용하도록 IIS에 지시합니다.

애플리케이션을 두 번째로 실행합니다.

관리자 권한 명령 프롬프트 창에서 아래와 같은 명령을 사용하여 World Wide Web Service를 재활용합니다.

net stop w3svc & net start w3svc

인터넷 Explorer 새 instance 사용하여 다시 한 번 다음으로 이동합니다.

http://localhost/appinit/default.aspx

회색 배경이 있는 "Startup.htm" 시작 페이지가 표시됩니다.

다음으로 작업 관리자를 끌어오고 프로세스 탭이 표시되는지 확인 합니다 . 실행 중인 w3wp.exe instance 표시될 때까지 프로세스 목록을 이름으로 정렬합니다. 이 instance 현재 "appinit" ASP.NET 애플리케이션을 실행하는 작업자 프로세스입니다.

w 3 w p 실행 파일의 instance 실행 중인 작업 관리자 프로세스 목록을 보여 주는 스크린샷

실제 default.aspx 페이지의 콘텐츠가 반환될 때까지 브라우저를 몇 번 새로 고칩니다. 배경이 흰색으로 변경되면 애플리케이션이 "실제" default.aspx 페이지를 실행한다는 것을 알고 있습니다. 다음으로, 작업 관리자와 브라우저를 모두 볼 수 있도록 화면에서 창을 정렬합니다.

이제 브라우저로 다시 전환하고 페이지를 30번 이상 새로 고치면 IIS가 애플리케이션 풀을 재활용합니다. 아래와 같이 작업 관리자 프로세스 목록에 두 번째 instance w3wp.exe 표시되면 페이지 새로 고침을 중지할 수 있습니다.

작업 관리자 프로세스 목록에서 w 3 w p 실행 파일의 두 번째 instance 보여 주는 스크린샷

스크린샷은 이전에 설정된 프로세스 재활용 제한으로 인해 시작된 w3wp.exe 두 번째 instance 보여줍니다.

앞으로 10초 정도 동안 브라우저 창을 주기적으로 새로 고칠 수 있습니다. default.aspx는 계속 실행됩니다. 겹치는 재활용이 완료되면 작업 관리자 프로세스 창에서 w3wp.exe instance 하나가 사라집니다.

겹치는 재활용 기간 동안 애플리케이션 초기화가 애플리케이션에 대해 구성되고 w3wp.exe 새 instance 백그라운드에서 초기화 URL을 실행했음에도 불구하고 "real" default.aspx의 콘텐츠가 계속 제공됩니다.

Url 다시 쓰기 및 애플리케이션 초기화

기본적으로 애플리케이션 초기화를 사용하면 애플리케이션을 초기화하는 동안 표시할 단일 "시작 페이지" URL만 지정할 수 있습니다. 그러나 애플리케이션 초기화 기능은 애플리케이션이 초기화되는 동안 요청 처리를 제어하는 데 사용할 수 있는 몇 가지 서버 변수를 지원합니다. 이렇게 하면 미리 생성된 정적 콘텐츠에 대한 더 복잡한 매핑이 포함된 URL 다시 쓰기 모듈을 사용하여 선언적 규칙을 만들 수 있습니다.

이 연습에서는 remapManagedRequestsTo 특성을 동일한 최종 결과를 수행하는 Url 다시 쓰기 규칙 집합으로 바꿉니다.

참고: URL 다시 쓰기 설치에 대한 지침은 부록을 참조하세요.

applicationHost.config 수정

applicationHost.config 열려 있는 메모장의 instance 사용하여 애플리케이션 풀과 애플리케이션 요소를 모두 되돌리기 모든 전역 애플리케이션 초기화 처리를 해제합니다. 이 연습의 나머지 부분에서는 구성된 애플리케이션 초기화 동작에 중점을 두므로 이 단계에서 전역 설정이 제거됩니다.

애플리케이션 풀 및 애플리케이션에 대한 applicationHost.config 항목은 아래와 같습니다.

애플리케이션 풀 구성 항목:

<add name=".NET v4.5" managedRuntimeVersion="v4.0" />

애플리케이션 구성 항목:

<application path="/appinit" applicationPool=".NET v4.5">

완료되면 변경 내용을 저장해야 합니다.

또한 IIS에서 변경 내용을 적용하려면 관리자 권한 명령 프롬프트 창에서 아래 표시된 명령으로 World Wide Web Service를 재활용합니다.

net stop w3svc & net start w3svc

애플리케이션 수준 web.config 수정

애플리케이션 수준 web.config 열려 있는 메모장의 instance 사용하여 요소에서 <applicationInitialization>remapManagedRequestsTo 특성을 제거합니다. 이제 구성 섹션이 <applicationInitialization> 이 구성 코드 조각과 같이 표시됩니다.

<applicationInitialization skipManagedModules="true" >
  <add initializationPage="/default.aspx" />
</applicationInitialization>

<applicationInitialization> 요소는 더 이상 요청을 다시 매핑할 URL을 정의하지 않으므로 Url 다시 쓰기 규칙 집합을 추가합니다. 다음으로, "default.aspx"에 대한 요청을 명시적으로 매핑하는 다시 쓰기 규칙과 "/"를 추가하여 "Startup.htm"로 라우팅합니다. URL 다시 쓰기 모듈이 기본 문서의 작동 방식에 대해 "알 수 없음"을 모르기 때문에 두 가지 규칙이 필요합니다. "/"는 ASP.NET 애플리케이션에서 "default.aspx"와 동일하므로 각 URL 변형에 대한 하나의 규칙인 두 개의 Url 다시 쓰기 규칙이 필요합니다.

새 규칙은 아래에 굵게 표시됩니다. 또는 web.config 파일의 "연습 2 - 2단계 홈페이지에 요청 매핑" 주석에 따라 미리 채워진 Url 다시 쓰기 규칙의 주석 처리를 해제할 수 있습니다.

<rewrite> 
  <rules>
    <rule name="Home Page-Expanded" stopProcessing="true">
      <match url="default.aspx" />
      <conditions>
        <add input="{APP_WARMING_UP}" pattern="1" />
      </conditions>
      <action type="Rewrite" url="Startup.htm" />
    </rule>
    <rule name="Home Page-Short" stopProcessing="true">
      <match url="^$" />
      <conditions>
        <add input="{APP_WARMING_UP}" pattern="1" />
      </conditions>
      <action type="Rewrite" url="Startup.htm" />
    </rule>
  </rules>
</rewrite>

이러한 규칙에 대해 유의해야 할 몇 가지 항목: 먼저 stopProcessing 특성은 규칙/>요소에서 <"true"로 설정됩니다. 이는 나중에 catch-all Url 다시 쓰기 규칙을 추가하고 catch-all 규칙을 실행하지 않으려는 default.aspx 또는 "/"에 대한 요청에 필요합니다.

둘째, 조건/>요소에 Url 다시 쓰기 조건이 있습니다<. 이 조건은 "애플리케이션이 초기화 상태인 경우에만 규칙 적용"을 효과적으로 말합니다. "APP_WARMING_UP" 서버 변수는 애플리케이션 초기화가 활성화되어 있고 IIS가 모든 초기화 URL을 계속 처리하는 경우 IIS에서 "1" 값으로 설정됩니다.

마지막으로 활성 요청을 다시 작성하여 "Startup.htm"을 실행하도록 작업이 정의되었습니다. 이 규칙은 IIS가 정적 파일 처리기에 요청을 전달하도록 말한 다음 정적 페이지 Startup.htm 렌더링하는 효과가 있습니다.

다음으로 catch-all 다시 쓰기 규칙을 추가합니다. 애플리케이션 초기화와 함께 Url 다시 쓰기 모듈을 사용하는 경우 이전 규칙 일치가 필요하지 않은 경우 발생하는 catch-all 규칙입니다. 아래에 표시된 굵은 규칙을 catch-all 규칙으로 다시 쓰기 섹션에 추가합니다. 또는 web.config 파일의 "연습 2 - 2단계 Catch-All 규칙 설정" 주석 아래에 있는 web.config 미리 채워진 catch-all 규칙의 주석 처리를 해제할 수 있습니다.

<rewrite> 
  <rules>
    <rule name="Home Page-Expanded" stopProcessing="true">
      <match url="default.aspx" />
      <conditions>
        <add input="{APP_WARMING_UP}" pattern="1" />
      </conditions>
      <action type="Rewrite" url="Startup.htm" />
    </rule>
    <rule name="Home Page-Short" stopProcessing="true">
      <match url="^$" />
      <conditions>
        <add input="{APP_WARMING_UP}" pattern="1" />
      </conditions>
      <action type="Rewrite" url="Startup.htm" />
    </rule>
    <rule name="All Other Requests">
      <match url=".*" />
      <conditions>
        <add input="{APP_WARMING_UP}" pattern="1" />
      </conditions>
      <serverVariables>
        <set name="SKIP_MANAGED_MODULES" value="0" />
      </serverVariables>
      <action type="Rewrite" url="{URL}" />
    </rule>
  </rules>
</rewrite>

완료되면 변경 내용을 저장합니다.

새 규칙은 도달한 모든 URL과 일치하고 IIS에 인바운드 URL에 대해 만들어진 요청을 계속 처리하도록 지시합니다. 또한 규칙은 "SKIP_MANAGED_MODULES"라는 서버 변수를 "0" 값("false")으로 설정합니다. 이 설정은 요청이 일반적으로 유선에서 도착한 경우와 동일한 방식으로 URL 다시 쓰기에서 다시 작성된 요청을 처리해야 한다는 것을 IIS에 알려줍니다.

애플리케이션 실행

관리자 권한 명령 프롬프트 창에서 아래 표시된 명령으로 World Wide Web Service를 재활용합니다.

net stop w3svc & net start w3svc

인터넷 Explorer 새 instance 사용하여 다시 한 번 다음으로 이동합니다.

http://localhost/appinit/default.aspx

이제 Url 다시 쓰기 규칙을 사용하여 시작 페이지 논리를 정의하지만 첫 번째 연습에서 동일한 동작이 표시됩니다. 회색 배경이 있는 Startup.htm 페이지가 처음에 표시됩니다. 브라우저를 주기적으로 새로 고치면 약 8초 후에 페이지 배경 스위치가 흰색으로 다시 표시되며, 이는 애플리케이션 초기화가 완료된 지금 "real" default.aspx 페이지가 제공되고 있음을 나타냅니다.

복잡한 시작 페이지 규칙

이전 연습에서는 애플리케이션 초기화를 URL "X"를 URL "Y"에 대한 직선 매핑으로 사용합니다. 이 연습에서는 보다 복잡한 애플리케이션 초기화 시나리오를 구현하려고 합니다.

브라우저에서 다음 URL로 이동합니다.

  • http://localhost/appinit/ImageHandler.ashx?image=Lighthouse
  • http://localhost/appinit/ImageHandler.ashx?image=Tulips

이러한 URL은 동적으로 생성된 정적 콘텐츠의 예입니다. 이 샘플 애플리케이션의 경우 ImageHandler.ashx 내의 코드는 querystring 키 "image"를 확인합니다. 해당 쿼리 문자열 값이 "Lighthouse" 또는 "Tulips"인 경우 ASP.NET 처리기는 App_Data 폴더에 있는 해당 JPG를 전송합니다.

이미지 처리기는 이미지를 반환하기 때문에 애플리케이션 초기화 중에도 적절한 이미지를 계속 반환할 수 있어야 합니다. 이러한 이미지를 제공하는 메커니즘은 관리 코드를 사용하지만 기본 ASP.NET 애플리케이션을 시작하고 초기화하는 데 시간이 오래 걸리더라도 고객에게 미리 생성된 이미지를 신속하게 제공할 수 있습니다.

애플리케이션 수준 web.config 수정

애플리케이션 수준 web.config 열려 있는 메모장 instance 사용하여 최종 catch-all 규칙 앞에 다른 Url 다시 쓰기 규칙을 추가합니다. 추가할 새 코드 조각은 다음과 같습니다. 또는 web.config 파일의 "연습 3 - 1단계 복잡한 시작 페이지 규칙" 주석 아래에 있는 web.config 미리 채워진 이미지 처리기 규칙의 주석 처리를 해제할 수 있습니다.

<rule name="Image Handler Remapping" stopProcessing="true">
  <match url="ImageHandler.ashx" />
  <conditions>
    <add input="{APP_WARMING_UP}" pattern="1" /> 
    <add input="{QUERY_STRING}" pattern="image=([A-Za-z]+)&amp;?" /> 
  </conditions>
  <action type="Rewrite" url="Images/{C:1}_static.jpg" appendQueryString="false" />
</rule>

완료되면 변경 내용을 저장합니다.

default.aspx 및 "/"에 대한 다시 쓰기 규칙과 마찬가지로 이 규칙에는 stopProcessing 특성이 "true"로 설정되어 ImageHandler.ashx에 대한 요청이 애플리케이션 초기화 중에 최종 catch-all 다시 쓰기 규칙으로 실수로 대체되지 않도록 합니다.

"ImageHandler.ashx"에 대한 요청의 경우 다시 쓰기 규칙은 정규식 캡처 그룹을 사용하여 쿼리 문자열에서 요청된 이미지를 추출합니다. 일치 패턴 정의 pattern="image=([A-Za-z]+)&?" 는 IIS에 "image" 쿼리 문자열 변수의 값을 추출하도록 지시합니다. 그런 다음, 해당 값은 작업 특성 url ="Images/{C:1}_static.jpg"의 url 특성에 사용됩니다.

작업 요소의 url 특성은 애플리케이션의 이미지 하위 디렉터리에 있는 파일을 가리키도록 ImageHandler.ashx 요청을 다시 작성하도록 Url 다시 쓰기 모듈에 지시합니다. 또한 정규식에 의해 캡처된 쿼리 문자열 값은 궁극적으로 Images 하위 디렉터리에서 제공될 파일의 이름을 형성하는 데 사용됩니다. 예를 들어 ImageHandler.ashx?image=Tulips에 대한 요청은 Images/Tulips_static.jpg에 다시 작성됩니다.

Windows Explorer 사용하여 inetpub\wwwroot\appinit 디렉터리로 이동하고 이미지 하위 디렉터리를 살펴보면 두 개의 파일이 표시됩니다. 하나는 Tulips.jpg "정적" 버전을 나타내는 파일이고 다른 하나는 Lighthouse.jpg "정적" 버전을 나타냅니다. 이러한 정적 이미지는 애플리케이션이 초기화되는 동안 제공될 수 있는 미리 생성된 콘텐츠 역할을 합니다.

애플리케이션 실행

관리자 권한 명령 프롬프트 창에서 아래 표시된 명령으로 World Wide Web Service를 재활용합니다.

net stop w3svc & net start w3svc

인터넷 Explorer 사용하여 다음 중 하나로 이동합니다.

http://localhost/appinit/ImageHandler.ashx?image=Lighthouse

또는

http://localhost/appinit/ImageHandler.ashx?image=Tulips

두 경우 모두 반환된 이미지에는 미리 생성된 이미지의 "정적" 버전임을 나타내는 워터마크가 포함됩니다. 워터마크는 이미지의 위쪽에 "이 이미지는 정적 버전입니다..."라는 텍스트입니다.

약 10초 후에 브라우저를 새로 고치면 반환된 이미지 콘텐츠가 ImageHandler.ashx 처리기에서 제공하는 "실제" 콘텐츠로 변경되는 것을 볼 수 있습니다. 워터마크가 사라집니다. 이는 애플리케이션이 초기화를 완료한 이후 ASP.NET 처리기에서 콘텐츠가 동적으로 생성되고 있음을 나타냅니다.

[참고: 인터넷 Explorer 새로 고치지 않는 것처럼 보이면 주소 표시줄에서 "손상된 문서" 아이콘 또는 새로 고침 아이콘을 클릭하여 인터넷 Explorer 페이지를 다시 로드하도록 합니다.]

요약

IIS 8.0 애플리케이션 초기화 기능은 IIS가 "콜드" 애플리케이션을 초기화하는 동안 개발자와 관리자가 정적 콘텐츠를 브라우저에 반환할 수 있는 기능을 제공합니다. 정적 콘텐츠를 브라우저에 즉시 제공하면 고객에게 더 나은 사용자 환경을 제공합니다. 빈 브라우저 페이지 또는 회전 대기 아이콘을 만드는 콜드 스타트 애플리케이션 대신 애플리케이션 초기화 기능을 사용하여 관련 정적 콘텐츠를 제공하는 동시에 기본 애플리케이션에서 비용이 많이 드는 초기화 처리를 완료할 수 있습니다.

초기화 프로세스는 웹 서버가 온라인 상태가 되거나 재활용될 때마다 자동으로 발생할 수 있습니다. 서버 관리자가 애플리케이션을 욕심나게 초기화하지 않으려는 시나리오의 경우 첫 번째 요청이 "콜드" 애플리케이션에 도착하면 대신 주문형으로 초기화 프로세스를 트리거할 수 있습니다.

전역 및 로컬 애플리케이션 초기화의 경우 Url 다시 쓰기 모듈을 통합하여 더 풍부하고 복잡한 초기화 규칙을 제공할 수 있습니다. 애플리케이션 초기화 기능과 통합된 Url 다시 쓰기 규칙을 사용하면 IIS가 백그라운드에서 애플리케이션을 계속 시작하는 동안 다른 URL 및 가상 경로에 대해 미리 생성된 다양한 유형의 정적 콘텐츠를 제공할 수 있습니다.

부록 - 샘플 ASP.NET 애플리케이션 설정

참고 - 다음 단계에서는 서버에 이미 IIS 8.0이 설치되어 있고 IIS 8.0에서 사용할 수 있는 ASP.NET 4.5가 모두 있다고 가정합니다.

샘플 애플리케이션 압축 풀기

샘플 ASP.NET 애플리케이션은 다음 .zip 파일에 포함되어 있습니다.

파일의 압축을 웹 서버의 wwwroot 폴더로 압축 해제합니다. 예를 들어 웹 서버가 C:\ 드라이브에 "기본 웹 사이트"를 설치한 경우 파일 c:\inetpub\wwwroot\appinit내용의 압축을 풉니다.

IIS 8.0에서 애플리케이션 만들기

파일 시스템에 "appinit" 샘플의 압축을 풀고 나면 IIS 8.0에서 폴더를 ASP.NET 애플리케이션으로 구성해야 합니다. 아래 스크린샷은 IIS 8.0에서 애플리케이션으로 구성된 appinit 샘플 애플리케이션을 보여줍니다. 또한 애플리케이션은 ".NET v4.5" 애플리케이션 풀에 할당됩니다.

I S Manager의 고급 설정 메뉴 스크린샷 샘플 appication 및 애플리케이션 풀이 강조 표시됩니다.

Url 다시 쓰기 모듈 설치

샘플 애플리케이션은 애플리케이션 초기화 기능과 고급 통합을 위해 Url 다시 쓰기 모듈을 사용합니다. 서버에 Url 다시 쓰기 모듈을 설치해야 합니다. 에서 https://www.iis.net/downloads/microsoft/url-rewrite다운로드할 수 있습니다.

Url 다시 쓰기 모듈 구성

웹 서버에 Url 다시 쓰기 모듈이 설치되면 애플리케이션 초기화 기능에서 지원하는 SKIP_MANAGED_MODULES 서버 변수를 사용할 수 있도록 IIS applicationHost.config 파일을 수정해야 합니다.

메모장과 같은 텍스트 편집기에서 컴퓨터 전체 applicationHost.config 파일을 엽니다. 예를 들어 C:\ 드라이브에 운영 체제를 설치한 경우 applicationHost.config 파일은 에 C:\Windows\System32\inetsrv\config있습니다.

파일을 아래로 스크롤하여 보안 섹션을 찾습니다. 이 섹션은 Xml 요소인 <보안>으로 시작합니다.

보안> 요소 앞에<다음 Xml 요소를 입력합니다.

<rewrite>
  <allowedServerVariables>
    <add name="SKIP_MANAGED_MODULES" />
  </allowedServerVariables>
</rewrite>

변경 내용을 applicationHost.config 파일에 저장합니다.