2007~2011/IIS2010. 10. 14. 16:05

이번 포스팅은 쉬어가는 포스팅으로 가볍게 한 번 읽어 볼 수 있는 IIS 7 에 대한 아키텍처 및 용어 소개 자료입니다. 흥미롭지 않은 용어 설명과 이론적인 내용들로 가득합니다만 앞으로 종종 보게 될 용어와 아키텍처에 대한 정보를 담고 있는 내용입니다. 사실 모든 내용을 이해하기에 충분한 설명은 아니지만 그래도 전혀 모르는 것보단 훨씬 낫겠죠. 제가 잘못 이해하였거나 번역이 잘못된 부분이 있다면 꼭 알려주시기 바랍니다. (우리 함께 해요~) 

참고한 원문 출처는 아래와 같습니다. 도움 주신 Ryuchan 님께 감사 드립니다.


[참고자료]
Introduction to IIS 7 Architecture
http://learn.iis.net/page.aspx/101/introduction-to-iis-7-architecture/ 


인터넷 웹 서비스를 위해 Internet Information Services (IIS) 7 에서 제공되는 컴포넌트, 모듈, 요청 프로세스의 개념을 이해하기 위해 다음과 같은 정보를 살펴 보도록 하겠습니다.    

  • IIS 7 컴포넌트
  • 프로토콜 수신기(Protocol Listeners)
  • 하이퍼텍스트 전송 프로토콜 스택 (HTTP.sys)
  • 웹 게시 서비스 (World Wide Web Publishing Services)
  • Windows Process Activation Service (WAS)
  • IIS 7 모듈
  • 네이티브 모듈
  • 관리 모듈
  • IIS 7 요청 처리 (Request Processing)
  • IIS 7 응용 프로그램 풀 (Application Pool)
  • IIS 7 에서의 HTTP 요청 처리

   

IIS 7 컴포넌트
IIS 7 은 어플리케이션과 Windows server 2008 (IIS 7.0), Windows Server 2008 R2 (IIS 7.5)의 웹 서버 역할을 위해 중요한 기능을 수행하는 몇 가지 컴포넌트들을 포함하고 있습니다. 각 컴포넌트들은 요청을 수신하고 프로세스 관리하며 설정 파일을 읽는 기능이 있습니다. HTTP.sys 와 같은 서비스 프로토콜 수신기, 웹 게시 서비스(WWW service)와 Windows Process Activation Service(WAS)와 같은 서비스들이 포함됩니다.



프로토콜 수신기(Protocol Listeners)
프로토콜 수신기는 프로토콜 관련 요청을 받고 처리를 위해 IIS 로 보내고 요청자에게 응답을 반환합니다. 예를 들면 클라이언트 웹 브라우저가 인터넷으로부터 웹 페이지를 요청할 때 프로토콜 수신기인 HTTP.sys가 요청을 받아 처리를 위해 IIS 로 전달하며 IIS 가 그 요청을 처리하면 HTTP.sys 는 클라이언트 브라우저에 응답을 반환하게 됩니다.

기본적으로 IIS 7 은 HTTP, HTTPS 요청을 수신하는 HTTP.sys 프로토콜 수신기를 제공하며 SSL(Secure Socket Layer) 지원을 포함합니다. HTTP와 HTTPS 이외 다른 프로토콜을 사용하는 서비스와 어플리케이션을 지원하기 위해 WCF (Windows Communication Foundation) 같은 기술을 사용할 수 있습니다. 




하이퍼텍스트 전송 프로토콜 스택 (HTTP.sys)

HTTP.sys는 Windows 운영체제의 네트워킹 하위 시스템이며 HTTP 프로토콜 스택 (HTTP.sys) 라는 커널 모드 장치 드라이버로 구현됩니다. HTTP.sys는 네트워크로부터 http 요청을 수신하고 그 요청을 처리를 위해 IIS로 보낸 후 클라이언트 브라우저에 처리된 응답을 반환하며 HTTP.sys 다음과 같은 이점을 제공합니다.

  • 커널 모드 캐싱 : 사용자 모드로 전환하지 않고 커널 모드에서 캐시된 응답을 요청은 처리합니다
  • 커널모드 요청 큐 : 요청은 컨텍스트 스위칭에서 커널 전달자가 올바른 작업자 프로세스에 직접 요청을 하기 때문에 오버헤드가 적습니다. 만약 요청을 받아들일 수 있는 가용한 작업자 프로세스가 없을 경우에는 커널 모드 요청 큐는 요청을 계속해서 받아 해당 큐에 보관하게 됩니다.
  • Pre-processing 및 보안 필터링 요청 

    웹 게시 서비스 (World Wide Web Publishing Service)
    IIS 7 에서는 이전에 웹 게시 서비스 (WWW service) 단독으로 처리했던 기능을 WWW service와 새로운 서비스인 Windows Process Activation Service(WAS) 두 서비스로 분리하였습니다. 이 두 서비스는 동일한 Svchost.exe에서 로컬 시스템으로 실행 되고 동일한 바이너리들을 공유합니다.

    IIS 7 에서 WWW Service가 동작하는 방식

    IIS 7에서 WWW service는 더 이상 작업 프로세스를 관리하지 않습니다. 대신 WWW service는 HTTP 수신기와 HTTP.sys를 위한 수신기 어댑터 입니다. 수신기 어댑터로서 WWW service는 우선 적으로 Http.sys를 구성하고 그 구성이 변경 되면 업데이트하고 요청 큐에 요청이 들어 오면 WAS 에 알리는 역할을 합니다. 또한 WWW service는 웹 사이트를 위한 카운터 수집을 지속합니다. 왜냐하면 성능 카운터들은 WWW service의 한 부분으로 남아 있고 HTTP 특성이며 WAS 에 적용할 수 없기 때문입니다.

Windows Process Activation Service (WAS)
I
IS7 에서 Windows Process Activation Service (WAS)는 WWW service를 대신하여 어플리케이션 풀 구성과 작업자 프로세스를 관리합니다. 이것은 HTTP, non-HTTP 사이트에서 동일한 구성(Configuration)과 프로세스 모델을 사용할 수 있게 합니다. 그리고 만약 HTTP 기능이 필요하지 않다면 WWW 서비스 없이 WAS를 운영할 수 있습니다. 예를 들면 HTTP.sys에서 HTTP 요청을 위해 수신할 필요가 없는 경우 WWW 서비스를 운영하지 않는 NetTcpActivator와 같은 WCF 수신기 어댑터를 통해 웹 사이트를 관리할 수 있습니다.


WAS 구성 관리

시작
WAS 특정 정보를 ApplicationHost.config 파일에서 읽고 서버의 수신기 어댑터에 정보를 전달합니다. 수신기 어댑터는 HTTP.sys 같은 WAS 및 프로토콜 수신기 간의 통신을 설정하는 구성 요소입니다. 수신기 어댑터들이 구성 정보를 받으면 수신기 어댑터들은 그와 관련된 프로토콜 수신기들을 구성하고 요청을 수신할 있도록 준비합니다.

아래의 목록은 구성(configuration)에서 WAS가 읽는 정보 유형입니다. .

  • 글로벌 구성 정보
  • HTTP 와 non-HTTP 프로토콜을 위한 프로토콜 구성 정보
  • 프로세스 계정 정보와 같은 응용프로그램 풀 구성
  • 바인딩과 응용프로그램과 같은 사이트 구성
  • 응용프로그램이 속한 응용프로그램 풀과 사용 하도록 설정 된 프로토콜 같은 응용프로그램 구성

만약 ApplicationHost.config이 변경되면 WAS는 변경 내용을 받고 새로운 정보를 수신기 어댑터에 업데이트 합니다.
 

프로세스 관리
WAS 는 HTTP 및 non-HTTP 요청을 위해 응용프로그램 풀과 작업자 프로세스를 관리합니다. 프로토콜 수신기가 클라이언트 요청을 선택할 때 WAS 는 작업 프로세스가 실행 중인지 아닌지 확인을 합니다. 만약 이미 응용프로그램 풀이 요청을 서비스하는 작업 프로세스를 가지고 있을 경우 수신기 어댑터는 처리 요청을 작업자 프로세스에 보냅니다. 만약 응용프로그램 풀에 작업자 프로세스가 없다면 WAS 는 작업자 프로세스를 시작하여 그 수신기 어댑터가 처리 요청을 전달할 수 있습니다. 

   


IIS 7 모듈

IIS 7 은 이전 버전의 IIS 와 다른 새로운 아키텍처를 제공합니다. 웹 서버가 자체적으로 대부분의 기능을 포함하고 있는 대신 IIS 7 은 필요에 따라 컴포넌트들을 추가 혹은 삭제 할 수 있는 모듈형 디자인을 제공합니다.
모듈은 서버가 요청을 처리하는 데 사용하는 개별 기능입니다. 예를 들어, IIS는 클라이언트 자격증명을 인증하기 위해 인증 모듈을 사용하고 캐시 사용을 관리 하기 위해 캐시 모듈을 사용합니다.

IIS 7 의 새로운 아키텍처는 이전 버전에 비해 다음과 같은 이점을 제공합니다.

  • 원하는 모듈을 제어할 수 있음
  • 사용자 환경에 맞는 서버 커스터마이즈
  • 새로운 기능 도입이나 존재하는 모듈을 교체할 수 있는 모듈 커스터마이즈 
      

또한 IIS 7 아키텍처는 보안이 향상되고 관리가 쉬워졌습니다. 불필요한 모듈을 제거함으로써 서버 공격 노출과 해당 머신에서 작업자 프로세스가 많은 양의 메모리를 사용하는 메모리 사용 공간을 줄일 수 있습니다. 또한 웹 사이트와 응용프로그램 대한 불필요한 기능을 관리할 필요가 없습니다.



네이티브 모듈
IIS 7 의 모든 기능을 설치하였을 경우 사용 가능한 네이티브 모듈을 설명합니다. 해당 모듈은 필요에 따라 사용자 모듈로 교체 하거나 삭제할 수 있습니다.    

  • HTTP 모듈 (HTTP Modules)
  • 보안 모듈 (Security Modules)
  • 콘텐츠 모듈 (Content Modules)
  • 압축 모듈 (Compression Modules)
  • 캐싱 모듈 (Caching Modules)
  • 로깅 및 진단 모듈 (Logging and Diagnostics Modules)
  • 관리지원 모듈 (Managed Support Modules)




관리되는 모듈
네이티브 모듈과 함께 IIS 7 은 IIS 기능을 확장하는 코드 모듈을 관리할 수 있도록 합니다. UrlAuthorization 같은 일부 관리되는 모듈은 관리되는 모듈에 네이티브 대안을 제공하는 일부 네이티브 모듈을 가지고 있습니다. 

  • AnonymousIdentification : ASP.net 프로필 같은 익명ID를 지원하는 기능에 사용되는 익명 식별자 관리
  • DefaultAuthentication : 컨텍스트에 인증 개체가 존재하는 지 확인
  • FileAuthorization : 사용자가 요청한 파일을 액세스 할 수 있는 권한이 있는지 확인
  • FormsAuthentication : 폼 인증을 사용하여 인증 지원
  • OutputCache : 출력 캐싱 지원
  • Profile : 사용자 프로필을 저장하고 데이터베이스와 같은 데이터 원본에서 사용자 설정을 검색하는 ASP.net을 이용하여 사용자 프로필 관리
  • RoleManager : 현재 사용자를 위한 RolePrincipal 관리
  • Session : 세션 상태 유지 지원
  • UrlAuthorization : 현재 사용자가 요청된 URL에 액세스 할 권한이 있는지 결정
  • UrlMappingsModule : 더 사용자 친화적인 주소를 실제 URL에 맵핑 지원
  • WindowsAuthentication : Windows 인증이 가능 할 경우 ASP.net 응용프로그램을 위한 사용자의 ID 설정




IIS 7 요청 처리 (Request Processing)
IIS 7 에서 IIS 와 ASP.net 요청 파이프라인은 통합된 방법으로 요청을 처리하도록 결합되었습니다. 새로운 요청 처리 아키텍처는 요청에 응답하여 특정 작업을 수행하는 네이티브 & 관리되는 모듈의 정렬된 리스트로 구성됩니다. 

이러한 디자인은 이전 버전과 비교해서 몇 가지 이점을 제공합니다. 먼저 모든 파일 형식이 원래 관리되는 코드에서만 사용할 수 있습니다. 예를 들어, ASP.NET 폼 인증 및 URL(Uniform Resource Locator) 인증, Active Server Page(ASP) 파일 그리고 모든 다른 파일을 웹 사이트와 어플리케이션에서 사용할 수 있습니다.

<Merged IIS7 and ASP.net Processing>


두 번째로 이러한 디자인은 IIS와 ASP.NET 의 몇 가지 중복된 기능을 제거합니다. 예를 들면 클라이언트가 관리되는 파일을 요청하면 서버는 클라이언트를 인증하기 위해 통합된 파이프라인에서 적절한 인증 모듈을 호출합니다. 이전 버전의 IIS 에서는 이러한 동일한 요청이 IIS 파이프라인과 ASP.NET 파이프라인 양쪽 모두를 통해서 진행되었습니다. 


<IIS6 and ASP.net have Separate Pipeline>


세 번째, 일부 기능을 IIS와 일부 ASP.NET configuration에서 관리하는 대신 한 곳에서 모든 모듈을 관리 할 수 있습니다. 이것은 사이트 및 응용프로그램 서버 관리를 단순화합니다. 


IIS 7 응용프로그램 풀 (Application Pools)
응용프로그램 풀은 서버의 다른 응용프로그램에 영향을 미치지 않도록 프로세스 범위에 의해 분리되어 있습니다. IIS 7에서 응용프로그램 풀은 IIS 작업자 프로세스 격리모드를 계속 사용합니다. 게다가 이제 관리되는 리소스 (통합모드 혹은 클래식 모드)를 포함하는 요청을 처리하는 방법을 결정하는 설정을 지정할 수 있습니다. 



IIS 7 에서 HTTP 요청 처리
IIS 7 은 IIS 6.0 과 비슷한 요청 처리 흐름을 가지고 있습니다. 다음 목록은 아래 그림에 표시된 요청 처리 흐름을 설명합니다.

1. 클라이언트 브라우저가 웹 서버에 대한 HTTP 요청을 시작 하는 경우 HTTP.sys 가 해당 요청을 가로챕니다.

2. HTTP.sys 는 구성 정보 저장소로부터 정보를 얻기 위해 WAS 와 연락을 합니다.

3. WAS 는 ApplicationHost.config, 구성 정보 저장소부터 구성 정보를 요청합니다.

4. WWW Service 는 응용프로그램 풀과 사이트 구성과 같은 구성 정보를 받습니다.

5. WWW service 는 Http.sys 를 구성하기 위해 구성 정보를 이용합니다.

6. WAS 는 요청에 의 만들어진 응용프로그램 풀을 위해 작업자 프로세스를 시작합니다.

7. 작업자 프로세스가 요청을 처리하고 Http.sys 응답을 반환 합니다.

8. 클라이언트가 응답을 받습니다.


작업자 프로세스에서 HTTP 요청은 이벤트라고 불리는 정렬된 여러 단계를 통해 전달됩니다. 각 이벤트에서 네이티브 모듈은 사용자 인증이나 이벤트 로그에 정보 추가 같은 요청의 일부분을 처리합니다. 만약 요청이 관리되는 모듈을 필요로 할 경우 네이티브 ManagedEngine 모듈이 폼 인증을 사용하여 사용자 인증 등의 필요한 프로세스를 수행할 수 있는 관리되는 모듈 AppDomain을 만듭니다. 요청이 웹 서버 코어에서 모든 이벤트를 통과 할 경우 응답이 HTTP.sys 에 반환됩니다. 

잠시 쉬어가는 포스팅으로 오히려 복잡하게 부담을 드린 것은 아닌지 모르겠네요. 여기까지 IIS 7 에서 제공되는 새로운 개념과 컴포넌트, 모듈, 요청에 대한 처리 방식 등에 대한 정보를 소개하였습니다. 낯설고 어려운 용어들로 가득합니다만 최소한 한 번쯤 가볍게 읽어볼 수 있는 자료가 되었으면 합니다. 이제 Chapter 1을 마치고 실전 IIS 7 을 본격적으로 만져볼 계획입니다.


작성자 : Lai Go / 작성일자 : 2010.10.14

Posted by Lai Go