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 |
|
WWW 서비스(W3SVC) |
|
WAS( Windows Activation Service ) |
|
Configuration(applicationHost.config) |
|
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의 설정을 업데이트한다. |
|
프로세스 관리 |
W3SVC에서 어플리케이션 풀과 워커 프로세스 관리를 담당한다. 어플리케이션 시작, 중지, 리사이클등. |
WAS가 워커 프로세스를 관리를 전담한다. |
성능 관리 |
W3SVC에서 웹 사이트 및 IIS 캐시에 대한 성능을 모니터링하고 성능 카운터를 제공한다. |
IIS7.0에서도 웹 사이트의 성능 카운터를 계속 수집한다. |
IIS7.x은 HTTP 기반의 요청뿐만 아니라 다른 프로토콜의 요청도 처리하기 위해서 WAS라는 확장된 아키텍처를 독립된 서비스로 분리해낸다. WAS는 아래 3 모듈을 이용해서 요청을 처리하게 된다.
모듈 |
설명 | 비고 |
프로토콜 리스너 Protocol listeners |
| 커널 모드에서 작동한다. |
리스너 어댑터 Listener adapters |
| 커널 모드에서 사용자 모드로 요청을 전달한다. |
프로토콜 핸들러 Protocol handlers |
| 사용자 모드에서 작동한다. |
참조)
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://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
'IT 살이 > 04. 기술 - 프로그래밍' 카테고리의 다른 글
02. IIS - HTTP 요청 처리 (0) | 2015.09.06 |
---|---|
어도비 PDF 열리지 않는 문제 (0) | 2015.08.24 |
Adobe, Java 환경 설정 (0) | 2015.08.19 |