성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>IIS - w3wp.exe 프로세스의 ASP.NET 런타임을 항상 Warmup 모드로 유지하는 preload Enabled 설정</h1> <p> IIS 7.5부터,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > IIS 7.5부터 지원되는 웹 사이트 자동 시작 모드 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/1367'>https://www.sysnet.pe.kr/2/0/1367</a> </pre> <br /> iisreset이나 작업자 프로세스의 recycle 등이 발생했을 때 w3wp.exe를 자동으로 로드하고 닷넷 런타임까지 초기화하는 것이 가능했습니다. 이에 대해 다음과 같이 간략하게 정리할 수 있는데요,<br /> <br /> <ul> <li>AppPool의 "Start Mode" == AlwaysRunning 옵션 제공</li> <li>Auto Start Provider: IProcessHostPreloadClient를 구현한 모듈을 serviceAutoStartProviders 노드에 등록</li> </ul> <br /> AppPool의 Start mode는 w3wp.exe의 네이티브 상태만 초기화시키는 것이고, "Auto Start Provider"는 ASP.NET 런타임 및 내부 코드의 역할에 따른 추가 초기화가 가능합니다.<br /> <br /> 하지만, "Auto Start Provider"는 은근히 사전 단계를 필요로 하기 때문에 불편한 것이 사실입니다. 바로 그런 번거로움을 IIS 8을 사용하면 해결됩니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> 이런 문제가 (<a target='tab' href='https://learn.microsoft.com/en-us/lifecycle/products/internet-information-services-iis'>Windows Server 2012부터 적용된</a>) IIS 8.0의 "Application Initialization"에서 해결이 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > IIS 8.0 Application Initialization ; <a target='tab' href='https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-application-initialization'>https://learn.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-application-initialization</a> Auto Application Inialization (Preload) on IIS ; <a target='tab' href='https://abhimantiwari.github.io/blog/Application-Initialization/'>https://abhimantiwari.github.io/blog/Application-Initialization/</a> </pre> <br /> Application Initialization은, IIS 8.0부터 MMC 화면에서 다음과 같이 "웹 사이트" 레벨로 설정하는 것을 지원합니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='iis_website_preload_1.png' src='/SysWebRes/bbs/iis_website_preload_1.png' /><br /> <br /> 위의 설정을 추가하면 "%WINDIR%\system32\inetsrv\config\applicationHost.config" 파일에는 해당 사이트에 대해 preloadEnabled 설정이 추가됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <site name="app1" id="2"> <application path="/" applicationPool="app1" <span style='color: blue; font-weight: bold'>preloadEnabled="true"</span>> <virtualDirectory path="/" physicalPath="D:\webapps\app1" /> </application> <bindings> <binding protocol="http" bindingInformation="*:18000:" /> </bindings> </site> </pre> <br /> 이로 인해, 이후 w3wp.exe가 (AppPool의 "Start Mode" == AlwaysRunning 옵션의 영향으로) 로드되면 IIS는 자동으로 "/" 경로에 대해 요청을 하나 전달합니다. 따라서, IIS 8.0부터는 다음의 2가지 설정만으로,<br /> <br /> <ul> <li>AppPool의 "Start Mode" == AlwaysRunning</li> <li>Web Site의 preload Enabled == "True"</li> </ul> <br /> w3wp.exe를 항상 실행 상태로 두면서 ASP.NET 런타임의 초기화까지 마친 상태를 유지할 수 있습니다. 한 마디로, Cold start 타임을 획기적으로 줄일 수 있는 것입니다.<br /> <br /> <hr style='width: 50%' /><br /> <a name='init_page'></a> <br /> 참고로, 원한다면 추가 요청을 발생하는 것도 쉽게 설정이 가능합니다. 이런 설정은 Web Application의 "web.config" 파일에,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > <?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 생략 --> <system.webServer> <!-- 생략 --> <span style='color: blue; font-weight: bold'><applicationInitialization> <add initializationPage="/api/Values" /> </applicationInitialization></span> </system.webServer> <!-- 생략 --> </configuration> </pre> <br /> applicationInitialization 노드를 추가해 add/@initializationPage로 발생시키고자 하는 경로를 명시하면 됩니다. 위와 같이 설정한 경우에는, "/" 요청과 함께 "/api/Values"가 함께 발생하는 것입니다.<br /> <br /> 이 정도면, 최초 요청에 대한 응답 시간문제를 해결하기 위해 굳이 AOT 빌드까지 해야 할 것인가에 대한 고민의 무게를 많이 덜어 줄 것입니다. ^^<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1247
(왼쪽의 숫자를 입력해야 합니다.)