본문 바로가기

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

01. IIS - Basic Architecture & WAS

IIS  구조, 작동 원리 및 역할 수행 프로세스에 대해서 달봉이 입맛에 맞게 한번 정리하고 싶었다. 나름 정리 원칙을 정했었다.


■ 정리 원칙


1) 먼저, IIS 웹 서버의 정적인 구조를 보여주는 큰 그림을 보여준다. 

2) 그리고 나서 특정 주제별 작은 그림들의 개념도를 간략히 보여준다. 

3) 마지막으로 특정 주제별 상세한 구조 및 프로세스에 대해서 정리한다. 

   여기서, 특정 주제라 함은 프로세스, 쓰레드, 큐 모델, IIS와 .NET 연동 모델, AppDomain, 웹 Application, ApplicationPool의 개념등을 말하고 있다.



1),2) 목적은 기억에 오래 남을 수 있도록 전체와 특정 주제별로 간단한 개념도 수준의 요약본을 그리는 것이다. 주로 정적인 구조의 그림이다. 3)의 목적은 상세 수준에서 특정 주제별 이론을 자세히 정리하는 것이다. 주로 작업 순서, 절차들을 그리는 동적인 구조의 그림이 될 것이다.


근데 쉽지 않았다. 그리다 보면 1), 2), 3) 수준의 그림이 섞여서 결국은 3)의 상세 수준의 그림으로 가게 된다. 근데 3) 수준의 그림은 아티클별로 조금씩 차이가 난다. 결국 "이게 이렇다는 거야? 저렇다는 거야?" 하다가 결국 시간을 보내고 그러다 정리는 흐지 부지. 그러다가 새로운 버전의 IIS가 나오면 새로운 개념과 용어가 나오고 이것을 다시1),2),3) 정리로 시도해보다가 다시 흐지 부지. PPT로 만들고 마음에 안들어 삭제하고 만들고 삭제하고 하다보니 오랜 시간을 보낸것 같은데도 남아 있는 자료가 없다. 


계속 반복되는 결과없는 작업에 시간 낭비만 되는 것 같아서, 이제는 상세부분에서 조금 부족하거나 틀린 부분이 있더라도 정리를 해서 업데이트를 해 나가기로 했다. 우선 업데이트의 베이스라인을 만들어놓다는 의미로 작업을 정리해보려 한다. 그리고 새로운 버전으로 시간을 보내느니 기존에 투자해온 버전 IIS6.0, IIS7.x을 대상으로 하기로 했다. 


■ IIS 기본 아키텍처


IIS7.x의 정적인 Architecture 그림이다. 





그림 - IIS 7.x 기본 정적 아키텍처


전체적인 구조는 기본적인 IIS 구조위에 ASP.NET, PHP같은 프로그램 처리 엔진들을 추가할 수 있는 구조이다. IIS 서버는 크게 두 부분으로 나뉜다: 그림의 아래 부분의 커널 모드(Kernel-mode) 구성 요소와 윗 부분의 용자 모드(user-mode) 구성요소.

각 요소들의 기본 역할을 정리해보면 다음과 같다.


구성요소 

설명 

HTTP.sys

  • 클라이언트에서 보내는 HTTP 요청을 커널 모드에서 받는다. 
  • 이 요청은 HTTP.sys 내부의 Queue에 어플리케이션 풀 별로 쌓인다( 커널 모드의 Queue에 대한 그림은 "요청 처리"를 정리하는 포스크에 있다)
  • 이 커널 모드의 Queue에 쌓인 요청을 각각의 워커 프로세스에서 하나씩 가져가서 처리한다. 
  • 아직 워크 프로세스가 생성되어 있지 않은 경우, 이 요청은 WWW 서비스에 요청이 왔음을 알려준다. 
  WWW 서비스(W3SVC)
  • HTTP 리스너 어댑터 제공
    커널 모드의 HTTP 리스너, Http.sys에서 HTTP 요청을 받게 되는 HTTP 프로토콜에 대한 리스너 어댑터를 제공하는 서비스이다.
    나머지 프로토콜에 대한 리스너 어댑터는 각각 다른 서비스에서 제공된다.
  • W3SVC는 HTTP 요청을 어떻게 다뤄야 하는지 알고 있다.
    IIS7.x인 경우 워커 프로세스의 통합모드의 파이프라인으로 보낸다( "요청 처리"를 정리하는 포스트에 그림이 있다). 만약 IIS6.0( IIS7.x의 클래식 모드)인 경우는 ASP.NET 요청인 경우는 워커 프로세스로 전달하고, 정적 파일에 대한 요청인 경우는 바로 처리한다.  
  • 사용자 모드의 설정이 변경되거나 하면 커널 모드의 HTTP.sys에도 설정을 전달할 필요가 있는데, 이런 설정을 커널모드의 HTTP 리스너에 전달하는 일도 한다. 

 WAS( Windows Activation Service )

  • configuration관리, application pool, 모든 프로토콜별 프로세스 활성화를 처리하는 서비스이다. 
  • 프로세스 관리
    전달받은 HTTP activation 요청이 어떤 어플리케이션 풀에 매핑되어 있는지, 그리고 그 어플리케이션 풀의 실행 계정은 뭔지 등의 환경 정보를 configuration에서 읽어와서, HTTP 요청을 처리할 수 있는 프로세스(w3wp.exe)를 생성한다.다시 말하면, HTTP요청과 Worker 프로세스 생성/매핑,  HTTP 요청 해당 프로세스로 dispatch하는 일을 한다.( Configuration Manager, Process Manager 등 ). 생성된 워커 프로세스는 HTTP.sys의 내부에 있는 Queue에서 처리할 HTTP 요청을 가져와서 처리하게 된다.
  • configuration 관리
    configuration 저장소에서 어플리케이션 그리고 어플리케이션 풀에 대한 정보를 읽는다.

 Configuration(applicationHost.config)

  •  IIS에 설정된 설정들이 있다. 사이트의 도메인 정보, 프로토콜 바인딩 정보, 가상 경로 정보, 보안, 인증, 로깅, 상태 관리 설정 정보, 웹 어플리케이션과 어플리케이션 풀의 매팽 정보, 어플케이션 풀의 실행 계정 및 리사이클 정보 등등

https://www.safaribooksonline.com/library/view/learning-wcf/9780596101626/ch04s07.html





※ 업데이트 - 2015.09.09


위 테이블의 정리가 마음에 안들었다. 너무 장황하다. 그러다 아래 블로그를 찾았다. 좋은 정리다. 

특히 HTTP.SYS의 하는 일에 대해서 정리가 잘 되었다.

출처 : https://fullsocrates.wordpress.com/2012/07/25/iisreset-vs-recycling-application-pools/





IIS는 3개의 주요 구성 요소가 있다. - http.sys, IIS 관리 서비스, 그리고 워크 프로세스( = 어플리케이션 풀 )


1. HTTP.SYS


커널 모드의 구성 요소여서 W#WP.exe같은 사용자 모드의 프로세스와는 다른 메모리 영역을 사용한다. 

3가지 주요 역할 - (클라이언트) 연결 관리, 클라이언트로부터의 요청의 라우팅, 응답 캐시 관리

여기서 "라우팅은 클라이언트로부터의 요청을 각 워커 프로세스와 매핑된 "어플리케이션이션 풀 큐"로 보내는 작업"을 말한다.


HTTP.sys의 역할을 그림에서 잘 표현하고 있다. 



2. Worker Processes (=Application Pools, w3wp.exe)


요청을 처리하는 프로그램이 실행되는 곳. 스킵~!


3. IIS Admin Services


Configuration을 이용해서 앞의 1. 2. 구성 요소를 관리하는 역할을 한다. 구현은 Windows 서비스(SVCHost.exe)로 구현되어 있다. 

역주) 

- 요청을 처리할 워커 프로세스가 없는 경우 생성하기도 하고, 

- configuration이 변경되면 HTTP.sys가 최신 configuration 에 맞게 설정되도록 한다. 예를 들어 새로운 어플리케이션 풀이 생성되거나 워커 프로세스가 재생되어서 새로운 프로세스ID가 생성되거나 하면 HTTP.sys에  해당 정보들를 전달해서 HTTP.sys가 관리하는 어플리케이션 풀의 큐와의 매핑 정보도 업데이트 해 줄것이다. 




■ WAS( Windows Process Activation Service )


WWW 서비스(W3SVC)는 IIS6.0에서 IIS7.x으로 오면서 W3SVC 서비스와 WAS 서비스로 분리됨으로써 기능에 변화가 있었다. 별도로 W3SVC의 기능에 대한 변화를 추가한다.


 기능

IIS6.0 

IIS7.x 

 Configuration 관리

W3SVC는 IIS6.0 confiruation 저장소, metabase에서 설정 정보를 읽어들인다.

 Configuration 관리는 이제 WAS에서 한다. WAS에서 IIS7.0 configuration 저장소, applicationHost.config에서 읽어들여 W3SVC로 전달해준다.

 HTTP.sys 관리

W3SVC 서비스는 metabase에서 정보를 읽어 HTTP.sys의 설정을 업데이트한다.

  • WAS에서 전달받은 configuration 정보를 이용해서 HTTP.sys의 설정을 업데이트한다.
  • HTTP 프로토콜에 대한 리스너 어댑처로서 W3SVC는 WAS와 그리고 HTTP.sys와 통신을 할 수 있다.

 프로세스 관리

 W3SVC에서 어플리케이션 풀과 워커 프로세스 관리를 담당한다. 어플리케이션 시작, 중지, 리사이클등.

 WAS가 워커 프로세스를 관리를 전담한다.

 성능 관리

W3SVC에서 웹 사이트 및 IIS 캐시에 대한 성능을 모니터링하고 성능 카운터를 제공한다.

 IIS7.0에서도 웹 사이트의 성능 카운터를 계속 수집한다. 



IIS7.x은 HTTP 기반의 요청뿐만 아니라 다른 프로토콜의 요청도 처리하기 위해서 WAS라는 확장된 아키텍처를 독립된 서비스로 분리해낸다. WAS는 아래 3 모듈을 이용해서 요청을 처리하게 된다. 



 모듈

설명 

비고 

프로토콜 리스너

Protocol listeners

  • 클라이언트 요청을 처음으로 받기 시작하는 요소를 리스너라고 한다. "HTTP.sys"는 HTTP 프로토콜 요청을 받는 "HTTP 리스너"이다. 
  • 요청은 어플리케이션 풀별로 존재하는 Queue에 저장된다

 커널 모드에서 작동한다.

리스너 어댑터

Listener adapters

  • 들어온 요청을 WAS에서 해당 워커프로세스로 전달해주는 브릿지 역할을 한다.
  • 리스너 어댑터는 어플리케이션 풀별로 존재하는 커널 모드의 Queue에서 요청을 하나씩 끌어내와서 해당 워커 프로세스의 프로토콜 핸들러로 전달해준다.
  • 리스너 어댑터는 프로토콜별로 각각 윈도우 서비스에 구현되어 있다.

커널 모드에서 사용자 모드로 요청을 전달한다.

프로토콜 핸들러

Protocol handlers

  • 프로토콜 핸들러는 워커 프로세스 내에 존재하는데, 
    전달받은 요청을 프로토콜별 적절한 처리 서비스 모델을 통과시킨다.
  • WCF는 HTTP 프로토콜 핸들러뿐만 아니라 named pipes, TCP 그리고 MSMQ에 대한 핸들러도 가지고 있다.
 사용자 모드에서 작동한다.






출처 : https://www.safaribooksonline.com/library/view/learning-wcf/9780596101626/ch04s07.html





참조)


IIS 기본 구조에 대한 이미지를 구글링해보면 많은 그림들이 나온다. 달봉이가 참조한 몇개를 추가한다. 조금씩 다른 내용을 담고 있다. 



그림 - IIS7.0 아키텍처

출처 : http://www.iis.net/learn/manage/provisioning-and-managing-iis/features-of-the-windows-process-activation-service-was


위 그림에서는 점선을 기준으로 커널모드와 사용자 모드의 구성 요소를 구분해준다. WAS에서 생성한 워커 프로세스(W3WP.exe)에서 일어나는 처리 절차도 표현하려고 하려고 하고 있다. 



그림 - WWW Service in IIS6.0, WWW Service and WAS in IIS7.0

출처 : http://programming4.us/website/4240.aspx

IIS6.0에서의 WWW 서비스( W3SVC)가 IIS7.0에서는 W3SVC 서비스와 WAS 서비스로 분리되어 있다는 것을 보여주고 있다. 



출처 : http://www.nxtbook.com/nxtbooks/cmp/msdnmag0907/index.php?startid=75


위 그림에서는 WAS의 역할을 정리해서보여주고 있다. 그리고 WAS에는 HTTP외의 다른 프로토콜  TCP, named pipes, 그리고 MSMQ에 대한 리스너 및 어댑터들도 있음을 보여주고 있다.위 출처 페이지가 Windows Process Activation Service의 구체적인 과정에 대해서 자세히 설명해 놓고 있다. 



출처 : http://programming4.us/website/4244.aspx


WAS의 다른 프로토콜의 어댑터을 보여주고 있다. 그중에서 TCP 요청이 어떻게 .NET 프로그램으로 처리되는지의 구조도 개념적으로 보여주고 있다. 

WAS 참조

WAS Activation Architecture
https://msdn.microsoft.com/en-us/library/ms789006(v=vs.110).aspx 

Extend Your WCF services beyond HTTP with WAS - MSDN Magazine
http://www.nxtbook.com/nxtbooks/cmp/msdnmag0907/index.php?startid=75

IIS7.0 and Windows Activation Service
https://www.safaribooksonline.com/library/view/learning-wcf/9780596101626/ch04s07.html


실패다. IIS 구조에 너무 많은 내용이 들어가버렸다. 
- IIS와 WAS를 구분해서 정리했어야 하는데, 
- 정적인 구조에 HTTP 요청 처리에 대한 내용이 들어가지 않았나 하는 생각도 된다.
시간이 또 들어가야 할 듯 하다.












'IT 살이 > 04. 기술 - 프로그래밍' 카테고리의 다른 글

02. IIS - HTTP 요청 처리  (0) 2015.09.06
어도비 PDF 열리지 않는 문제  (0) 2015.08.24
Adobe, Java 환경 설정  (0) 2015.08.19