Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

웹개발

이제 웹 기반 응용개발 지식은 거의 필수적으로 요구되는 시대입니다. 구체적인 웹 사이트 개발은 아니더라도 거시적인 웹 기반 서비스에 대한 지식 배양을 위해 할 것이 참 많네요 ^^

[IIS] IIS 실행 흐름 - 닷넷의 웹 리소스 처리 메커니즘

작성자 : 박종명
최초 작성일 : 2008-05-07 (수요일)
최종 수정일 : 2008-05-07 (수요일)
조회 수 : 5748

IIS 가 웹 리소스 요청을 받았을때 처리 하는 방식에 대해 기술 합니다.
IIS 5.x 버전과 IIS 6.0 을 비교하여 설명 합니다.
 
IIS 웹 서버를 기반으로 하는 프로젝트를 수행 할 경우 이와 같은 IIS 실행 흐름을 자세히 익혀둘 필요가 있습니다.
 
[1] IIS 5.x 에서의 웹 리소스 처리 아키텍처

1. 클라이언트의 모든 HTTP 요청은 IIS의 실행프로세스인 inetinfo.exe 가 받아 들인다. inetinfo는 요청 리소스의
    형식을 확인하여 확장자와 매핑되어 있는 ISAPI Extension 모듈로 요청을 전달한다.
    (ex: asp -> asp.dll , aspx,asmx,ashx -: aspnet_isapi.dll)
    만일 txt,이미지,스크립트 없는 asp 파일이 요청되었다면 inetinfo는 외부 모듈 연계 없이 직접 처리한다.

2. aspnet_isapi.dll 은 닷넷 웹 리소스를 직접 처리 하지 않고ASP.NET Worker Process 인 aspnet_wp.exe 에게로
    요청을 전달하는 dispatcher 로 서의 역할을 수행한다.

3. aspnet_isapi.dll 과 aspnet_wp.exe 사이의 연결은 프로세스 경계를 넘어 데이터를 전송하기 위한 Win32
    메커니즘 인 명명 파이프를 통해 이루어 진다.

4. ASP.NET Worker Process 인 aspnet_wp.exe 는 닷넷공용언어런타임(CLR)을 호스트 하며 HTTP 파이프라인을
   활성화 해서 웹 리소스의 실제 처리를 시작한다.

5. 각 웹 응용프로그램들은 Worker Process 의 가상 디렉터리로 식별되며, AppDomain 이라는 응용프로그램
   도메인에 속하게 된다. 즉, 각각의 웹 응용프로그램들은 논리적으로 격리됨을 알 수 있다.
   다시 말해 응용 프로그램  설정(Application,Session,Cache등이 공유 되지 않는다.
   AppDomain 은 Win32 내의 프로세스 분리와 유사한 방식으로 서로 분리되고, 격리 되어 진다. CLR 은 서로 다른
   AppDomain  내에 있는 개체들 사이의 직접적인 호출을 막음으로써 격리를 강제한다.
   (여기서 웹 응용프로그램이라 함은 웹 사이트 혹은 응용프로그램으로 구성된 웹사이트 하위 가상 디랙터리를
    말한다) 
   
6. 기본적으로 모든 활성 웹 응용프로그램들은 하나의 Worker process에서 호스트 한다.
    그러나 멀티 CPU를 가진 웹 서버라면 다중 Worker process 가실행되도록 할 수 있다(웹 가든)
    machine.config 파일의 <processModel> 섹션의 webGarden 속성을 true 로 설정하고 cpuMask 속성을
    비트 마스크값으로 지정     

[1] IIS 6.0 에서의 웹 리소스 처리 아키텍처

1. 클라이언트의 모든 HTTP 요청은 커널 모드에서 작동하는http.sys 디바이스 드라이버가 받아 들인다.
   http.sys 리스너는 요청을 적절한 응용프로그램 풀 요청 대기열에 배치한다.
   다수의 웹 응용프로그램들이 하나의 응용프로그램 풀을 사용하더라도 응용프로그램 풀의 요청 대기열은 오직
   하나이다

2. 응용프로그램 풀은 worker process 와 가상디렉터리를 구별한다. 요청을 올바른 worker process 로 보내기 위해
    http.sys 매퍼가 사용하는 논리 프로세스 경계에 의해 정의되는 구성 개체이다.

3. WAS는 메타베이스와 응용프로그램 풀을 관리하는 중추적인 역할을 담당한다
   (WAS 는 Worker Process 를 생성,관리한다)
   이 프로세스는 공유되지 않는 svchost.exe의 사용자 모드에서 Local System 권한으로 실행된다.
  또한 worker process 의 모니터링, 리사이클링 등 관리를 담당한다

4. IIS 6.0 의 메타베이스는 XML 기반의 파일로 관리된다. WAS 는 이 메타베이스의 변경사항을 실시간으로 반영한다

5. 닷넷 웹 리소스를 처리하기 위한 worker process 는 더 이상 aspnet_wp.exe 가 아닌 w3wp.exe 이다.
   W3wp.exe 는 응용프로그램 풀 대기열로부터 요청을 읽어온다. W3wp.exe 는 또한 asp 와 같은 닷넷
   이전버전의 웹 리소스도 처리한다.

6. 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)
커널 모드는 컴퓨터의 모든 메모리에 접근할 수 있고 다른 어플리케이션의 프로세스로부터 격리된 메모리 공간에서
실행된다. 커널 모드 구성요소만이 하드웨어와 같은 리소스에 직접 접근이 가능하다. 반면 어플리케이션과 이를 지원하는 서브시스템은 사용자 모드에서 실행된다. 사용자 모드의 프로세스는 직접 자원에 접근할 수 없으며 자원에 대한 접근 요구가 커널 모드 구성 요소에 의해 허가되어야 한다.



∵Commented by 김재훈 at 2009-09-24 오후 3:01:35  
잘 보고갑니다. 도움이 많이 됐네요.
이름
비밀번호
홈페이지
SD <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요