Metabase

1. Metabase Overview

메타베이스에는 IIS에게 어떤 포트를 사용하고, 어떤 request 처리하고, 어떤 Mime 타입은 처리하지 않으며, 어떤 applicaiton pool을 사용하는 등 IIS 동작에 대한 모든 설정을 담고 있습니다.

결국 IIS 서비스와 관련된 프로세스들은 메타베이스 정보를 알고 있어야 한다는 것을 의미합니다. 특히, 정보를 알고 있다는 것이 Metabase.xml 문서를 수시로 로드하는것이 아니라 IIS 서비스와 관련된 프로세스들이 메모리에 메타베이스 내용을 갖고 있다는 것을 의미합니다. 

 

2. Metabase History 

IIS 4 에서는 IIS 등록 정보 설정이 레지스트리에 있었습니다. 따라서 윈도우 백업과 복구, 서비스 팩 설치 와 같은 작업들이 IIS 설정에 오류를 발생시킬 수 있었습니다.

IIS 5에서는 IIS 등록 정보가 바이너리 파일로 저장되었습니다. 하지만 이를 관리하고 편집하기 쉽지 않았고, 이 역시 파일이 변조되면 복구가 힘들다는 단점이 있었습니다.

따라서 IIS6으로 오면서 xml 형식의 가독성 있는 텍스트 파일로 바뀌었고, 이로써 IIS 설정에 대해 편집 및 관리가 편리해 졌습니다.

또한 Metabase.xml 을 직접 편집해서 관리할 수 있지만 Adsutil.vbs 를 통해 자동화, 일관된 작업을 구현할 수도 있게 되었습니다.

3. Metabase Structure

메타베이스는 다음과 같은 hierarchical한 구조로 되어 있습니다.

- Service

   - Site
- root

         - Virtual Directory

            - Directory

               - File

 

즉, /LM/Service/Site/ROOT/VirtualDirectory/Directory/File 와 같이 표시됩니다. 예를 들어, LM/W3SVC/1 의 위치에는 첫번째 웹 사이트에 대한 속성 값들을 지정하게 됩니다.

4. Metabase Communications Layer

파일에 있는 내용과 메모리에 있는 내용이 동시에 어떻게 관리되는지에 대해 생각해 봅시다. 우선, IIS 가 시작되면 metabase.xml파일에 있는 내용이 로드됩니다. 만약 IIS 관리자에서 설정을 변경을 하게 되면 메모리에 있는 데이터를 우선 바꿉니다. 따라서 적용한 즉시 수정된 사항이 xml 문서에 반영되는 것이 아니라 변경한 지 2분 후에 메모리에 있는 내용이 xml 파일에 적용됩니다. IIS 에 대한 설정을 변경한 후에는 특별한 IISRESET 없이 바로 변경된 내용이 적용됩니다. 특정 웹 사이트의 포트나 MIME 타입을 바꿀 경우에는 IISRESET 을 할 필요는 없지만, 프로세스 모델이 바뀔 경우 즉 IIS 5.0 호환 모드로 돌리고자 하는 경우에는 IIS RESET을 해야 합니다.

특히, IIS 서버에 백신이 작동하고 있을 경우 “C:\Windows\system32\inetsrv” 폴더를 검색 대상에서 제외시켜야 합니다. IIS는 메타베이스를 2분 마다 수정, 편집 하므로 이 행동이 바이러스 동작으로 오해되어 메타베이스 파일이 지워질 가능성이 있습니다. 참고로, IIS 관리자의 “Edit While Running” 을 체크한 상태에서 메타베이스를 변경하거나 ”Adsutil” 을 통해 메타베이스를 바꾸는 것은 in-memory metabase를 바꾸는 것임을 알아두어야 합니다.