본문 바로가기

IT 살이/04. 기술 - 프로그래밍

03. IIS - 워커 프로세스 처리

static 파일에 대한 요청(.jpg, .htm등)이든 동적인 파일에 대한 요청(.aspx, .php등)이든, 모든 요청은 다음 그림처럼 워커 프로세스로 전달된다( 아래 그림은 IIS7.x 이상의 "통합모드"로 설정된 어플리케이션에서 HTTP요청이 처리되는 것을 보여주고 있다). 




정적인 파일에 대한 요청이든 동적 파일에 대한 요청이든 모든 요청은 그림처럼 IIS의 파이프라인를 통과하게된다. 이 과정에서 aspx라는 요청이 확인되면 ASP.NET으로 요청이 전달된다. 


ASP.NET은 .NET 런타임 CLR을 로딩하고 하고, .NET 웹 어플리케이션이 실행될 AppDomain을 생성한다. 그런 다음 CLR은 생성된 AppDomain으로 웹 어플리케이션에서 사용할 클래스 등 모든 타입을 가지고 있는 어셈블리들을 로딩한다. 그리고 HTTPModule, HTTPHandler 등을 사용해서 HTTP요청을 처리할 HTTPRuntime 객체를 생성한다. 그 이후로 Init, Load같은 ASP.NET 페이지 라이프사이클 이벤트가 시작된다. 

ASP.NET에 도달한 HTTP 요청은 바로 처리되지 않고 CLR 쓰레드 풀에 캐싱되는데, 이 쓰레드 풀은 Queue의 역할도 한다. .NET 쓰레드는 요청을 하나씩 꺼내서 AppDomain에서 처리하게 된다. AppDomain은 IIS에서 생성하는 웹 어플리케이션별로 생성되는데, HTTP요청을 어떤 AppDomain에서 처리할지는 IIS의 가상 디렉토리를 통해서 결정된다. 


출처 : CLR via C#, p.540