Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 
(연관된 글이 3개 있습니다.)
(시리즈 글이 3개 있습니다.)
개발 환경 구성: 172. IIS 7.5부터 지원되는 웹 사이트 자동 시작 모드
; https://www.sysnet.pe.kr/2/0/1367

개발 환경 구성: 701. IIS - w3wp.exe 프로세스의 ASP.NET 런타임을 항상 Warmup 모드로 유지하는 preload Enabled 설정
; https://www.sysnet.pe.kr/2/0/13512

닷넷: 2194. C# - WebActivatorEx / System.Web의 PreApplicationStartMethod 특성
; https://www.sysnet.pe.kr/2/0/13513




IIS - w3wp.exe 프로세스의 ASP.NET 런타임을 항상 Warmup 모드로 유지하는 preload Enabled 설정

IIS 7.5부터,

IIS 7.5부터 지원되는 웹 사이트 자동 시작 모드
; https://www.sysnet.pe.kr/2/0/1367

iisreset이나 작업자 프로세스의 recycle 등이 발생했을 때 w3wp.exe를 자동으로 로드하고 닷넷 런타임까지 초기화하는 것이 가능했습니다. 이에 대해 다음과 같이 간략하게 정리할 수 있는데요,

  • AppPool의 "Start Mode" == AlwaysRunning 옵션 제공
  • Auto Start Provider: IProcessHostPreloadClient를 구현한 모듈을 serviceAutoStartProviders 노드에 등록

AppPool의 Start mode는 w3wp.exe의 네이티브 상태만 초기화시키는 것이고, "Auto Start Provider"는 ASP.NET 런타임 및 내부 코드의 역할에 따른 추가 초기화가 가능합니다.

하지만, "Auto Start Provider"는 은근히 사전 단계를 필요로 하기 때문에 불편한 것이 사실입니다. 바로 그런 번거로움을 IIS 8을 사용하면 해결됩니다.




이런 문제가 (Windows Server 2012부터 적용된) IIS 8.0의 "Application Initialization"에서 해결이 됩니다.

IIS 8.0 Application Initialization
; https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-application-initialization

Auto Application Inialization (Preload) on IIS
; https://abhimantiwari.github.io/blog/Application-Initialization/

Application Initialization은, IIS 8.0부터 MMC 화면에서 다음과 같이 "웹 사이트" 레벨로 설정하는 것을 지원합니다.

iis_website_preload_1.png

위의 설정을 추가하면 "%WINDIR%\system32\inetsrv\config\applicationHost.config" 파일에는 해당 사이트에 대해 preloadEnabled 설정이 추가됩니다.

<site name="app1" id="2">
    <application path="/" applicationPool="app1" preloadEnabled="true">
        <virtualDirectory path="/" physicalPath="D:\webapps\app1" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:18000:" />
    </bindings>
</site>

이로 인해, 이후 w3wp.exe가 (AppPool의 "Start Mode" == AlwaysRunning 옵션의 영향으로) 로드되면 IIS는 자동으로 "/" 경로에 대해 요청을 하나 전달합니다. 따라서, IIS 8.0부터는 다음의 2가지 설정만으로,

  • AppPool의 "Start Mode" == AlwaysRunning
  • Web Site의 preload Enabled == "True"

w3wp.exe를 항상 실행 상태로 두면서 ASP.NET 런타임의 초기화까지 마친 상태를 유지할 수 있습니다. 한 마디로, Cold start 타임을 획기적으로 줄일 수 있는 것입니다.




참고로, 원한다면 추가 요청을 발생하는 것도 쉽게 설정이 가능합니다. 이런 설정은 Web Application의 "web.config" 파일에,

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <!-- 생략 -->
  <system.webServer>
      <!-- 생략 -->

      <applicationInitialization>
          <add initializationPage="/api/Values" />
      </applicationInitialization>
      
  </system.webServer>

  <!-- 생략 -->

</configuration>

applicationInitialization 노드를 추가해 add/@initializationPage로 발생시키고자 하는 경로를 명시하면 됩니다. 위와 같이 설정한 경우에는, "/" 요청과 함께 "/api/Values"가 함께 발생하는 것입니다.

이 정도면, 최초 요청에 대한 응답 시간문제를 해결하기 위해 굳이 AOT 빌드까지 해야 할 것인가에 대한 고민의 무게를 많이 덜어 줄 것입니다. ^^




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 1/5/2024]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 181  182  183  184  185  186  187  [188]  189  190  191  192  193  194  195  ...
NoWriterDateCnt.TitleFile(s)
255정성태6/1/200617240    답변글 개발 환경 구성: 2.1. msconfig 설정과 Windows Activation
259정성태6/1/200616361    답변글 개발 환경 구성: 2.2. Vista VPC에 터미널 서비스 - 원격 접속
253정성태6/1/200614695기타: 14. .NET 2.0 이 지원되는 NDoc 2.0 을 배포합니다.
251정성태6/1/200617702오류 유형: 4. [OS 지원 API] SHParseDisplayName과 Windows 2000
252정성태6/1/200617538    답변글 오류 유형: 4.1. NET BCL 에서 제공되는 FolderBrowserDialog [2]
249정성태6/1/200616943.NET Framework: 71. VB.NET 이외의 언어에서 My 네임스페이스 사용
250정성태6/1/200619598    답변글 .NET Framework: 71.1. VB.NET 이외의 언어에서 My 네임스페이스 사용
248정성태6/1/200617811기타: 13. Code Center Premium에서 Win32 API 소스 찾기
245정성태6/1/200625416오류 유형: 3. [C# / VC++] error C2146: syntax error : missing ';' before identifier 'GetType'
247정성태5/3/200622672    답변글 .NET Framework: 3.1. Interface를 사용하면. [1]
242정성태6/1/200623152오류 유형: 2. [COM+] CreateObject 와 HTTP 500 - Internal server error
243정성태6/1/200620590    답변글 오류 유형: 2.1. [COM+] Resolve Partial Assembly failed for Microsoft.VC80.CRT.mui
244정성태6/1/200621915    답변글 오류 유형: 2.2. [COM+] Server object error 'ASP 0178 : 80070005'
240정성태6/1/200619783스크립트: 9. setTimeout 과 jscript/vbscript 혼용 문제
239정성태6/1/200621107COM 개체 관련: 18. Internet Explorer는 Out-of-process COM 개체입니다.
238정성태6/1/200622957개발 환경 구성: 1. batch 파일에서 실행한 exe에서 batch 실행 문맥의 환경 변수 설정 [3]
236정성태6/1/200643739오류 유형: 1. [.NET COM+] UnauthorizedAccessException: 레지스트리 키 HKEY_CLASSES_ROOT\.... 에 대한 액세스가 거부되었습니다
235정성태6/1/200618390VS.NET IDE: 39. VS.NET 2003/2005에서도 제공되는 VS 6.0 MFC ClassWizard
234정성태4/14/200618061VC++: 24. error C2039: 'pOleStr' : is not a member of '_STRRET'
233정성태4/13/200617481.NET Framework: 70. Response.ContentType 과 Response.AddHeader( "Content-Type", "..." ) 의 차이
232정성태4/13/200617239.NET Framework: 69. Reusing C# Source Code Across Multiple Assemblies
231정성태4/13/200617671Team Foundation Server: 4. How to rename a Team Foundation Server
229정성태10/17/200619185.NET Framework: 68. Feb CTP 에서 동작하는 "Save XPS Document page(s) to .bmp" 예제 소스
230정성태4/13/200619413    답변글 .NET Framework: 68.1. -01 MSDN Magazine XPS Document 소스를 Feb CTP로 수정한 버전파일 다운로드1
228정성태4/13/200615843Team Foundation Server: 3. MSBUILD : warning : Visual Studio Team System for Software Testers or Visual Studio Team System for Software Developers is required to run tests as part of a Team Build.
227정성태4/13/200617423Team Foundation Server: 2. TFS 빌드 오류 유형 - MSBUILD: warning : Specified cast is not valid
... 181  182  183  184  185  186  187  [188]  189  190  191  192  193  194  195  ...