- IIS가 웹 리소스 요청을 받았을때 처리 하는 방식
- IIS 5.X 버전과 IIS 6.0 의 버전간 차이가 있다.
- IIS 5.X
- 클라이언트의 모든 HTTP 요청은 IIS의 실행 프로세스인 inetinfo.exe 가 받아 들인다.
inetinfo는 요청 리소스의 형식을 확인하여 확장자와 매핑되어 있는 ISAPI Extension 모듈로 요청을 전달한다.
ex)
asp -> asp.dll,
aspx, asmx, ashx -> aspnet_isapi.dll,
txt, 이미지, 스크립트 없는 asp 파일이 요청되면 inetinfo는 외부 모듈 연계없이 직접 처리함. - aspnet_isapi.dll 은 닷넷 웹 리소스를 직접 처리 하지 않고 ASP.NET Worker Process 인 aspnet_wp.exe 로 요청을 전달하는 dispatcher 로서 역할을 수행한다.
- aspnet_isapi.dll 과 aspnet_wp.exe 사이의 연결은 프로세스 경계를 넘어 데이터를 전송하기 위한 Win32 메커니즘인 명명 파이프를 통해 이루어 진다.
- ASP.NET Worker Process 인 aspnet_wp.exe 는 닷넷공용언어런타임(CLR)을 호스트하며 HTTP 파이프라인을 활성화하여 웹 리소스의 실제 처리를 시작한다.
- 각 웹 응용프로그램들은 Worker Process 의 가상 디렉터리로 식별되며, AppDomain 이라는 응용프로그램 도메인에 속하게 된다.
- 각각의 웹 응용프로그램들은 논리적으로 격리됨을 알 수 있다.
(응용프로그램 설정(Application, Session, Cache 등)이 공유 되지 않는다.)
- AppDomain 은 Win32 내의 프로세스 분리와 유사한 방식으로 서로 분리되고, 격리 되어 진다.
- CLR 은 서로 다른 AppDomain 내에 있는 개체들 사이의 직접적인 호출을 막음으로써 격리를 강제한다.
(여기서 웹 응용프로그램이라 함은 웹 사이트 혹은 응용프로그램으로 구성된 웹사이트 하위 가상 디렉터리를 의미) - 기본적으로 모든 활성 웹 응용프로그램들은 하나의 Worker Process 에서 호스트한다.
- 그러나 멀티 CPU를 가진 웹 서버라면 다중 Worker Process 가 실행되도록 할 수 있다. (웹 가든)
- machine.config 파일의 <processModel> 섹션의 webGarden 속성을 true 로 설정하고 cpuMask 속성을 비트 마스크값으로 지정
- IIS 6.0
- 클라이언트의 모든 HTTP 요청은 커널 모드에서 작동하는 http.sys 드라이버가 받아 들인다.
- http.sys 리스너는 요청을 적절한 응용프로그램 풀 요청 대기열에 배치한다.
- 다수의 웹 응용프로그램들이 하나의 응용프로그램 풀을 사용하더라도 풀의 요청 대기열은 오직 하나다.) - 응용프로그램 풀은 worker process 와 가상디렉터리를 구별한다.
- 요청을 올바른 worker process 로 보내기 위해 http.sys 매퍼가 사용하는 논리 프로세스 경계에 의해 정의되는 구성 개체이다. - WAS 는 메타베이스와 응용프로그램 푸을 관리하는 중추적인 역할을 담당한다. (WAS 는 Worker Process 를 생성, 관리한다.)
- 이 프로세스는 공유되지 않는 svchost.exe 의 사용자 모드에서 Local System 권한으로 실행된다.
- 또한 worker process 의 모니터링, 리사이클링 등 관리를 담당한다. - IIS 6.0 의 메타베이스는 XML 기반의 파일로 관리된다.
- WAS 는 이 메타베이스의 변경사항을 실시간으로 반영한다. - 닷넷 웹 리소스를 처리하기 위한 worker process 는 더 이상 aspnet_wp.exe 가 아닌 w3wp.exe 이다.
- w3wp.exe 는 응용프로그램 풀 대기열로부터 요청을 읽어온다.
- w3wp.exe 는 또한 asp 와 같은 닷넷 이전버전의 웹 리소스도 처리한다. - inetinfo.exe 에서 호스트 되었던 aspnet_isapi.dll 은 이제 w3wp 라는 worker process 가 로드한다.
- aspnet_isapi.dll 은 CLR 을 로드하고 파이프라인을 시작한다.
- IIS6.0 에서는 WWW 서비스가 더 이상 inetinfo.exe 프로세스에 호스트 되지 않고 별도의 작업자 프로세서인 w3wp.exe 에 의해 처리된다.
단, 요청 프로세스 설정, FTP, SMTP, NNTP, IIS Admin 과 같은 서비스는 여전히 inetinfo.exe 에서 호스트 한다.
- 커널 모드(Kernel Mode)와 사용자 모드(User Mode)
- 커널 모드는 컴퓨터의 모든 메모리에 접근할 수 있고 다른 어플리케이션의 프로세스로부터 격리된 메모리 공간에서 실행된다.
- 커널 모드 구성요소만이 하드웨어와 같은 리소스에 직접 접근이 가능하다.
- 반면 어플리케이션과 이를 지원하는 서브시스템은 사용자 모드에서 실행 된다.
사용자 모드의 프로세스는 직접 자원에 접근할 수 없으며 자원에 대한 접근 요구가 커널 모드 구성 요소에 의해 허가되어야 한다.
'프로그래밍 노트 > ASP.NET' 카테고리의 다른 글
.NET Framework 버전별 정리 (0) | 2017.03.29 |
---|---|
LINQ (0) | 2017.03.28 |
숫자 범위에 Switch문 사용하기 (0) | 2015.12.21 |
데이터 캐시 이용하여 특정IP 연속 접속 차단하는 방법 (0) | 2015.11.30 |
[C#] 별도의 서버에서 iOS게임센터 회원 인증하는 방법 (0) | 2015.08.27 |