MSDN Magazine > Home > All Issues > 2007 > March >  IIS 7.0: Windows Vista 및 그 이상의 웹 서버를 위한 탐색
IIS 7.0
Windows Vista 및 그 이상의 웹 서버를 위한 탐색
Mike Volodarsky

이 기사에서 다루는 내용:
  • 모듈형 웹 서버 기능
  • 간소화된 배포와 구성
  • 확장성과 ASP.NET 통합
  • 보안, 성능 및 호환성 개선
이 기사에서 사용하는 기술:
Windows Vista, IIS
요즘 필자는 새로운 IIS 7.0 웹 서버가 최근 몇 년간 Microsoft의 가장 중요한 개발 중 하나가 될 것이라는 이야기를 Microsoft 안팎에서 많이 듣고 있습니다. Windows Vista™를 포함하여 최근 Microsoft가 발표한 인상적인 기술 제품군을 고려할 때 이것은 분명 의미심장한 이야기입니다.
IIS 7.0이 릴리스되는 올해는 IIS 최초 버전이 Windows NT® 4.0에 포함되어 릴리스된 지 10주년이 되는 해이기도 합니다. 2001년에는 IIS 4.0이 릴리스되었고 곧이어 IIS 5.0은 인터넷에서 가장 우세한 웹 서버로 자리 잡았지만 몇 달 후에는 악명 높았던 Code Red 및 Nimbda 웜의 희생양이 되기도 했습니다. Windows Server® 2003에 포함되어 릴리스된 IIS 6.0은 전적으로 보안, 신뢰성 및 성능을 개선에 초점을 맞추어 다시 작성된 서버였습니다. 그 이후로 IIS 6.0은 탁월한 견고성을 입증하면서 높은 신뢰성과 보안 기록을 달성하고 있습니다. 릴리스 이후 단 한 차례의 중요 보안 고지가 있었지만 이 조차도 원격으로 악용할 수 없는 것이었습니다.
이 기사에서는 차세대 IIS 7.0 웹 서버가 개발자와 관리자 모두에게 큰 의미를 가지는 이유를 설명하고 IIS 7.0 웹 서버의 여러 새로운 기능을 한발 앞서 소개하는 기회를 갖고자 합니다.
IIS 7.0의 비전은 IIS 6.0 코드베이스의 속도, 신뢰성 및 보안을 그대로 가지면서 이를 더욱 발전시켜 미래의 웹 응용 프로그램을 충분히 실행할 수 있는 확장성과 관리성이 우수한 웹 서버 플랫폼으로 만드는 것이었습니다. 그 결과로 IIS 역사상 가장 많은 구조적 향상이 이루어진 뛰어난 Microsoft 웹 서버가 탄생했습니다.
IIS 7.0 릴리스의 핵심은 40가지 이상의 기능으로 구성되어 사용자의 응용 프로그램 토폴로지에서 원하는 역할에 최적화된 소규모 웹 서버로 조립할 수 있는 완전한 모듈형 웹 서버라는 것입니다. 이러한 기능은 개발자가 네이티브 코드 또는 Microsoft® .NET Framework를 사용하여 실질적으로 서버의 어떠한 측면이라도 확장하거나 대체할 수 있는 새로운 확장성 계층을 기반으로 구축되었습니다. IIS 7.0은 사용자의 특정한 필요에 맞는 종단 간 솔루션 구축을 지원할 수 있도록 런타임, 관리 및 운영 기능 전반에 걸친 확장성을 제공합니다. 이러한 핵심 플랫폼을 기반으로 IIS 7.0은 관리성 및 서버 운영과 관련된 많은 문제를 해결했습니다. 완전한 사이트의 위임 관리를 지원하는 새로운 구성 시스템을 만들었으며 웹 응용 프로그램의 xcopy 배포가 마침내 현실화되었습니다. 새로운 관리 API 및 진단 기능을 통해 서버의 배포, 관리 및 문제 해결이 그 어느 때보다 쉽고 편리해졌습니다.
Windows Server 다음 버전인 코드 이름 "Longhorn"이 아직 최종 릴리스 전인데도 서버 응용 프로그램인 IIS에 관심을 가져야 하는 이유는 무엇일까요? Windows Server "Longhorn"에 포함되어 릴리스될 IIS와 동일한 모든 기능을 포함하는 IIS 7.0이 Windows Vista와 함께 제공되기 때문입니다. 즉, 새로운 IIS 7.0의 기능을 활용하여 개인 웹 사이트를 구축하고 Windows Vista에서 호스트할 수 있음을 의미합니다. 또한 Windows Server "Longhorn"이 출시되면 배포 환경이 될 동일한 IIS 플랫폼을 한발 앞서 경험하고 프로덕션 웹 응용 프로그램 및 웹 서버 인프라 개발과 테스트를 진행할 수 있습니다.
흥미롭지 않습니까? 자세한 내용을 알아보기로 하겠습니다.

모듈형 웹 서버
IIS 7.0에서는 웹 서버를 경량의 핵심 서버와 이 서버에 연결할 수 있는 40가지 이상의 기능 모듈로 분리했습니다. 이러한 모듈에는 정적 웹 콘텐츠 다운로드를 지원하는 StaticFileModule이나 통합 NTLM 인증을 지원하는 WindowsAuthModule과 같은 것이 있으며 독립적으로 서버에 설치하여 정확히 원하는 기능을 제공할 수 있습니다.
이러한 모듈은 언제라도 서버에서 제거할 수 있으며(그림 1 참조) 모듈이 필요하지 않은 특정 응용 프로그램에 대해서는 사용하지 않도록 설정할 수 있습니다. 이를 통해 서버 관리자는 신속하게 최소 크기의 서버를 배포하여 공격에 취약한 영역을 줄이고 필요한 코드만 실행함으로써 성능을 크게 개선할 수 있게 되었습니다.
그림 1 원하는 기능만 사용 (더 크게 보려면 이미지를 클릭하십시오.)
구성 요소화된 아키텍처는 보안 위험 완화와 패치 요구 사항 최소화를 가능하게 하는 IIS 7.0의 핵심적인 특성입니다. 또한 IIS 기능을 선택하고 역방향 프록시 및 캐시 서버, HTTP 프로토콜 부하 분산 장치 또는 SSL 및 보안 감시 서버와 같은 응용 프로그램 토폴로지의 특정 서버 역할에 최적화된 사용자 지정 구성 요소를 조합함으로써 특화된 서버 배포도 가능해졌습니다.
IIS 7.0에서 제공되는 모든 기능은 새로운 공용 확장성 API를 바탕으로 작성되었습니다. 개발자는 기존 서버 기능을 직접 개발한 기능으로 대체하거나 새로운 모듈을 작성하여 IIS 7.0 기능 집합에 추가할 수 있습니다. 예를 들어 기본 제공 인증 메커니즘을 사용자 지정 인증 메커니즘으로 대체하거나 새로운 형태의 응답 압축을 제공하고자 한다면 그렇게 할 수 있습니다.
새로운 확장성 API는 이전 ISAPI 확장 모델의 기능을 근본적으로 개선한 것이며 이를 통해 유연하고 쉽게 서버를 향상시킬 수 있습니다. 핵심 서버에서 시작하여 구성, 관리 및 진단에 이르기까지 실질적으로 서버의 모든 측면을 확장하고 각자의 필요에 맞게 사용자 지정할 수 있는 확장성이 제공됩니다. 확장성에 대한 내용은 이 기사 뒷부분에서 다시 설명하겠습니다.

간소화된 배포 및 구성
이전 IIS 릴리스에서 메타베이스라는 애정 어린 이름으로 불리던 중앙화된 구성 저장소는 이제 필요 없게 되었습니다. IIS 7.0은 분산된 XML 구성 파일 계층 기반의 새로운 위임 구성 시스템을 갖추고 있습니다. 이 계층은 서버 수준의 구성 기본값을 포함하는 전역 applicationHost.config 파일과 응용 프로그램의 디렉터리 구조 내에 있는 분산된 web.config 파일로 구성됩니다. 이 파일은 ASP.NET 응용 프로그램 프레임워크에서 응용 프로그램 설정을 휴대 가능한 방법으로 저장하는 데 사용되던 것과 동일한 web.config 파일입니다. 이제 깔끔하고 강력한 구조를 가진 XML 지시문을 사용하여 IIS와 ASP.NET 구성을 함께 저장할 수 있게 되었습니다. 다음은 이에 대한 예입니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.web>
        <customErrors mode="Off" />
    </system.web>
    <system.webServer>
      <directoryBrowse enabled="true" />
    </system.webServer>
</configuration>

이전에는 IIS 응용 프로그램 설정을 명시적으로 컴퓨터 수준의 메타베이스 리포지토리에 구성해야 응용 프로그램이 올바르게 작동할 수 있었습니다. 그러나 분산 web.config 파일의 경우에는 응용 프로그램에 필요한 서버 구성이 자체 디렉터리 구조 내에 캡슐화됩니다. 따라서 필요한 것을 완비한 응용 프로그램을 대상 서버의 응용 프로그램 디렉터리에 복사하면 즉시 원하는 설정으로 실행이 가능하게 되어 배포를 크게 간소화할 수 있게 되었습니다.
새로운 구성 시스템은 또한 서버 관리자에게 광범위한 제어권을 부여함으로써 보안 및 업무 목적에 맞게 다른 구성에 대한 제어를 유지하면서도 특정 구현 옵션을 응용 프로그램에 위임할 수 있습니다. 따라서 관리자에게 도움을 요청하거나 외부 프로그램 구성 패널을 사용하지 않고도 서버에서 호스팅되는 응용 프로그램이 응용 프로그램 내에서 필수적인 구성을 직접 설정할 수 있습니다.
IIS 7.0의 진정한 핵심은 구성 시스템이 완벽하게 확장 가능하다는 것입니다. 새로운 모듈이 자체 구성 스키마를 추가할 수 있으므로 응용 프로그램이 자체 기능을 IIS 및 ASP.NET 구성과 함께 구성하는 것이 가능합니다.
<configuration>
    <system.webServer>
      <directoryBrowse enabled="true" />
    </system.webServer>
    <myBandwidthThrottler enabled="true" />    
</configuration>

사용자 지정 구성 영역에서는 IIS 7.0 기능을 위한 구성과 동일한 구성 스키마를 사용하므로 강력한 형식의 특성 값, 컬렉션 구문, 계층적 재정의 및 잠금의 개념을 활용할 수 있습니다.
IIS 7.0은 ABO(Admin Base Object) API를 사용하여 기존 메타베이스에 기록하는 기존 설치 코드 또는 고수준 ADSI(Active Directory® Service Interface) 및 WMI(Windows Management Instrumentation) 개체를 사용하여 IIS를 구성하는 스크립트를 계속해서 지원합니다. IIS 7.0에서는 이를 위해 ABO API를 에뮬레이트하는 호환성 계층을 제공합니다. 스크립트를 사용하여 이전 IIS 릴리스에서와 마찬가지로 구성을 읽고 쓸 수 있도록 다른 모든 레거시 구성 API의 기반 위에 이 호환성 계층이 자리잡고 있습니다. 메타베이스 호환성에 대한 자세한 내용은 이 기사 끝부분에 있는 "개선된 성능" 및 "이전 버전과의 호환성" 섹션을 참조하십시오. 구조적인 새 XML 구성 형식 덕분에 선호하는 텍스트 편집기에서 구성과 관련된 작업을 하기가 쉬워졌지만 IIS는 서버 관리자가 서버 관리를 간소화하고 구성 및 배포를 자동화할 수 있도록 지원하는 다양한 관리 도구와 API를 제공하고 있습니다.

향상된 관리
IIS 7.0은 넓은 범위의 시나리오에서 서버 관리를 가능하게 하는 풍부한 관리 기능 집합을 제공합니다. InetMgr.exe MMC 스냅인을 대체하는 새로운 그래픽 IIS 관리자 관리 도구는 작업 기반 관리 인터페이스를 통해 수동 서버 관리를 크게 간소화했습니다(그림 2 참조).
그림 2 IIS 관리자에서 제공하는 그래픽 관리 도구 (더 크게 보려면 이미지를 클릭하십시오.)
IIS 관리자를 사용하면 대부분의 IIS 7.0 기능을 관리하고 서버의 작업을 모니터링할 수 있습니다. 이 도구는 방화벽 환경에서도 편리하게 사용할 수 있는 HTTP/SSL 연결을 통한 원격 관리를 지원하며 인증을 위해서는 Windows 기반 및 다른 자격 증명을 지원하는 옵션을 제공합니다.
이 도구는 또한 위임 관리를 지원하므로 응용 프로그램 소유자가 서버 컴퓨터에 대한 관리 액세스 권한이 없더라도 자신의 응용 프로그램을 원격으로 관리할 수 있습니다. 호스팅되는 서비스의 사용자는 이러한 기능을 사용하여 집에 있는 데스크톱에서 관리 도구를 실행하고 호스팅되는 서버에 원격으로 연결하여 응용 프로그램을 관리할 수 있습니다. 물론 서버 관리자는 응용 프로그램 소유자에게 어떤 관리 기능을 위임할지를 완벽하게 제어할 수 있습니다.
마지막으로 관리 도구는 구성 시스템 확장성을 바탕으로 구성되어 도구에 사용자 지정 관리 UI를 추가할 수 있는 완벽한 확장 가능성을 제공합니다. IIS 관리자 도구 및 자체 관리 플러그 인을 추가하는 방법에 대한 자세한 내용은 iis.net/default.aspx?tabid=7&subtabid=73(영문)을 참조하십시오.
보다 유연한 명령줄 관리를 위해 IIS 7.0은 appcmd.exe라는 명령줄 도구를 제공합니다(그림 3 참조). 이 도구는 포괄적인 관리 기능을 제공하며 UI에 비해 대량 작업을 보다 잘 지원합니다. 이 강력한 유틸리티를 사용하면 구성 읽기 및 쓰기, 사이트 및 응용 프로그램 풀 상태 정보 액세스를 비롯한 다른 거의 모든 관리 작업을 명령 프롬프트에서 손쉽게 수행할 수 있습니다.
그림 3 IIS 7.0용 명령줄 관리 도구인 appcmd.exe (더 크게 보려면 이미지를 클릭하십시오.)
appcmd.exe를 사용하면 사이트, 응용 프로그램, 응용 프로그램 풀 및 가상 디렉터리를 만들고 구성할 수 있습니다. 이외에도 사이트 시작 및 중지, 응용 프로그램 풀 재활용, 실행 중인 작업자 프로세스 나열, 현재 실행 중인 요청 조사, FREB(Failed Event Request Buffering) 추적 로그 검색은 물론 IIS 및 ASP.NET 구성 데이터의 검색, 편집, 내보내기 및 가져오기를 수행할 수도 있습니다.
이 도구는 특정 설정이 지정된 사이트 또는 중지된 응용 프로그램 풀을 신속하게 찾는 등 지원되는 서버 개체에 대한 유연한 검색을 위해 만들어졌습니다. 검색을 수행할 때는 숫자 범위 및 간단한 와일드카드 문자열 일치를 포함하여 모든 개체의 속성에 대해 원하는 수의 조건을 사용할 수 있습니다.
appcmd는 또한 Windows PowerShell™에서 제공하는 연결된 작업을 지원하므로 연관된 개체 집합에 대한 여러 작업을 단일 명령줄로 수행할 수 있습니다. 예를 들어 한 명령을 사용하여 특성 사이트의 응용 프로그램을 호스트하는 모든 응용 프로그램 풀을 찾고 재활용할 수 있습니다. AppCmd로 IIS를 관리하는 데 대한 자세한 내용은 iis.net/default.aspx?tabid=2&subtabid=25&i=954&p=1(영문)을 참조하십시오.

.NET Framework 및 스크립팅
IIS 관리자나 appcmd.exe 명령줄 도구를 사용하는 수동 서버 관리 이외에도 IIS 7.0은 프로그래밍 방식의 관리를 위한 다양한 옵션을 제공합니다. 먼저 .NET 응용 프로그램에서 Microsoft.Web.Administration API를 활용하여 서버를 관리할 수 있습니다. 또는 새로운 COM API를 사용하여 IIS 구성 시스템을 직접 관리하거나 ASP나 WSH(Windows® 스크립트 호스트)와 같은 스크립팅 환경에서 액세스할 수 있습니다. 또한 새로운 WMI 공급자 및 메타베이스 호환성 계층을 통한 레거시 WMI 및 ADSI 공급자에 대한 지원도 제공됩니다.
관리 코드 응용 프로그램에서는 새로운 .NET 관리 API인 Microsoft.Web.Administration을 사용하여 프로그래밍 방식으로 IIS 사이트 및 응용 프로그램을 구축하고 중요한 상태 및 진단 정보에 액세스하며 서버를 구성할 수 있습니다. .NET Framework 기반 응용 프로그램이 손쉽게 IIS 구성 및 상태 정보에 액세스할 수 있도록 함으로써 .NET 기반 설치 및 관리 응용 프로그램을 작성하거나 심지어 ASP.NET 페이지에서 직접 관리 작업을 수행할 수 있는 가능성이 열렸습니다.
이러한 예로 그림 4에서는 Microsoft.Web.Administration을 사용하여 명령줄에서 새로운 웹 사이트를 만드는 C# 프로그램을 보여 주고 있습니다.
using System;
using Microsoft.Web.Administration;

class CreateASite
{
    static void Main(string[] args)
    {
        ServerManager serverManager = new ServerManager();
        Site mySite = serverManager.Sites.Add(
            "MySite", "d:\\inetpub\\mysite", 8080);
        mySite.ServerAutoStart = true;
        serverManager.CommitChanges();
    }
}

Microsoft.Web.Administration을 사용하면 선택한 .NET 호환 언어를 통해 사용자의 응용 프로그램 내부에서 IIS 운영 및 구성 작업을 손쉽게 수행할 수 있습니다. 또한 실행 중인 작업자 프로세스나 현재 실행 중인 요청과 같이 서버와 관련된 런타임 상태 정보에 손쉽게 액세스할 수 있습니다.
Microsoft.Web.Administration API는 사용자 지정 .NET 서버 모듈 및 IIS 관리자 도구용 UI 플러그 인 내부의 사용자 지정 구성에 액세스할 수 있는 기반 역할을 합니다. 웹 서버를 개선하는 이미지 저작권 처리기와 관련 구성 및 관리 구성 요소를 포함하는 종단 간 서버 패키지의 예를 보려면iis.net/default.aspx?tabid=2&subtabid=25&i=1076(영문)을 참조하십시오.
IIS 팀은 Windows Server "Longhorn" 출시에 맞추어 사용자 지정 관리 개체를 추가하거나 기존 개체를 확장할 수 있는 통합된 확장성 모델을 만들기 위해 작업하고 있습니다. 이를 통해 스크립팅 및 Microsoft.Web.Administration API를 포함하는 서로 다른 관리 기능을 통해 자동으로 사용자 지정 관리 기능을 제공할 수 있습니다. Windows Vista에서는 관리 개체를 추가하거나 확장할 수 없지만 Microsoft.Web.Administration 및 다른 API를 사용하여 기존 IIS 구성 섹션에 대한 작업을 수행하는 것처럼 사용자 지정 구성 섹션을 액세스 및 조작할 수는 있습니다.

웹 서버 기능 작성
IIS 7.0에서는 필요한 기능을 제공하기 위해 서버의 어떤 기능이라도 추가하거나 대체하여 정확히 원하는 형태로 서버를 구성할 수 있습니다. 이러한 기능의 핵심에는 모든 기존 IIS 7.0 HTTP 기능의 기반이 되는 새로운 웹 서버 확장성 API가 있습니다. 이 API는 공용이므로 IIS 7.0과 함께 제공되는 어떤 기능이라도 구현할 수 있습니다. 이것은 IIS에서는 처음으로 선보이는 것이며 이전의 제한적인 ISAPI 확장 모델에 비해 근본적으로 기능이 향상된 부분입니다.
새 확장성 API는 웹 서버 개체 모델을 정의하고 모듈이 IIS에서 요청 처리 서비스를 제공할 수 있게 하는 사용하기 쉬운 C++ 클래스 집합입니다. 이러한 클래스는 Windows Vista SDK에 있는 \inc\httpserv.h 헤더 파일에 정의되어 있습니다.
ISAPI와 비교하면 이러한 API는 더 강력하고 훨씬 사용하기 쉽습니다. 어떻게 이런 일이 가능할까요? 첫째, 새 API는 형식의 측면에서 안정적이며 잘 캡슐화된 개체 모델을 갖추고 있습니다. 모든 기본 서버 개체 및 작업에 대한 특화된 인터페이스를 제공하는 새로운 서버 개체 모델을 사용하여 수월하게 개발할 수 있으며 다음과 같은 작업이 가능합니다.
  • IHttpRequest 클래스를 사용하여 요청 조사
  • IHttpResponse 클래스를 사용하여 응답 조작
  • IHttpServer 클래스의 유용한 유틸리티 기능 사용
  • IHttpUser 클래스를 사용하여 인증 제공
  • 구성 API를 사용하여 모듈의 사용자 지정 구성 섹션에 액세스
이러한 클래스는 이전보다 훨씬 많은(IIS에서 제공하는 모든 기능을 작성하는 데 필요한 것보다도 많은) 서버의 기능 집합을 제공하면서도 느슨한 형식의 ISAPI 인터페이스에 비해 훨씬 사용하기 쉽습니다.
또한 개발자는 메모리 및 상태 관리에 있어서 개선된 패턴의 이점을 활용할 수 있습니다. 대부분의 IIS 7.0 서버 API는 ISAPI와 거의 모든 기존 Win32® API에서 개발자가 버퍼를 할당하고 관리하도록 요구하는 것과는 달리 API가 반환하는 데이터에 서버 관리 메모리를 사용합니다. 이는 과거 ISAPI 개발에 있어 가장 오류가 발생하기 쉽고 지루한 영역 중 하나였습니다. 새 API는 또한 응답 버퍼링, 인증, 클라이언트를 위한 응답 데이터 준비 등과 같은 여러 복잡한 요청 처리 작업을 간소화했습니다. 몇 달 전에 필자는 새 프로그래밍 모델의 중요한 기능 개선과 패턴을 설명하는 블로그 게시물 시리즈 연재를 시작했습니다. IIS를 위한 C++ 개발을 고려하고 있다면mvolo.com/blogs/serverside/archive/2006/10/07/10-reasons-why-server-development-is-better-with-IIS7.aspx(영문)에 방문해 보시기 바랍니다.
IIS 7.0는 또한 서버 확장을 위한 완전한 통합 .NET Framework API를 제공합니다. 게다가 이것은 Windows 2000의 ASP.NET 1.0 이후로 ASP.NET 모듈 및 처리기 작성을 위해 ASP.NET에서 제공하던 것과 동일한 API입니다. 그러나 혼동하지는 마십시오. 친숙한 ASP.NET 모델을 통해 기존 ASP.NET 모듈 및 처리기를 IIS 7.0 서버에서 사용할 수 있도록 허용하고 있지만 기존의 오래된 기술과는 상당한 차이가 있습니다.
IIS 7.0에서 ASP.NET은 클래식 모드 및 통합 모드라는 두 가지 모드로 제공됩니다. 클래식 모드는 이전 버전의 IIS와 정확히 같은 방식으로 작동합니다. 반면에 새 플랫폼 기본값인 통합 모드는 완전히 새로운 엔진을 사용하여 IIS 웹 서버와의 탁월한 통합을 제공합니다. 통합 모드에서는 ASP.NET API를 사용하여 웹 서버와 직접 통합되며 기본 C++ API를 통해 실질적으로 가능한 모든 서비스를 제공할 수 있는 IIS 7.0 모듈을 개발할 수 있습니다.
익숙한 인터페이스를 비롯하여 멤버 자격 및 역할 관리와 같은 .NET Framework 및 ASP.NET 2.0 응용 프로그램 서비스의 편리함과 함께 이전에는 C 기반 ISAPI 구성 요소를 통해서만 가능했던 서버 확장의 능력까지 제공하므로 초보자와 전문가 모두에게 유용합니다.
통합 모드의 특정 혜택을 바탕으로 새로운 ASP.NET 모듈을 작성할 수 있는 것은 물론이고 web.config 파일에서 단지 몇 가지 구성 옵션을 변경하기만 해도 여러 레거시 ASP.NET 모듈이 훨씬 더 강력해집니다.

ASP.NET 통합
IIS 7.0을 사용한다면 ASP.NET 2.0은 동적 응용 프로그램 작성을 위한 탁월한 플랫폼에서 나아가 ASP.NET 구성 요소가 IIS 요청 처리 파이프라인의 완전한 구성원이 될 수 있도록 IIS 웹 서버를 확장하는 플랫폼이 될 수 있습니다. 작동 원리는 다음과 같습니다.
버전 6.0까지 IIS 릴리스에서 ASP.NET는 독립 실행형 응용 프로그램 프레임워크로 웹 서버에 연결되었으며 ASP.NET에 등록된 요청 확장(일반적으로 .aspx 및 기타 다른 요청)을 처리하는 역할을 했습니다. 이러한 요청에 대해서는 폼 인증, 응답 출력 캐싱을 비롯하여 사용자 지정 ASP.NET 모듈에서 제공하는 다른 서비스를 포함한 강력한 기능을 제공했습니다. 그러나 ASP.NET에 등록된 콘텐츠 형식만 이러한 서비스의 혜택을 받을 수 있었으며 ASP 페이지, PHP 페이지, 이미지 및 CGI 응용 프로그램을 포함한 다른 형식은 혜택을 받을 수 없었습니다. 또한 ASP.NET 리소스에 대해서도 런타임의 제한 때문에 특정 웹 서버 기능은 ASP.NET에서 사용할 수 없었습니다. 예를 들어 보내는 HTTP 응답 헤더 집합을 조사하고 클라이언트로 전송하기 전에 이를 수정하는 것은 불가능했습니다.
이제 IIS 7.0에서 통합 모드로 실행하면 ASP.NET 모듈은 통합된 요청 처리 파이프라인에서 네이티브 C++ IIS 모듈과 함께 실행됩니다(그림 5 참조). 이것은 출력 캐싱, URL 다시 쓰기 및 사용자 지정 ASP.NET 모듈에서 제공하는 기타 다른 기존 ASP.NET 서비스를 어떤 콘텐츠 형식에나 적용할 수 있게 되었음을 의미합니다. 런타임 통합이 향상됨에 따라 ASP.NET 모듈이 이전에는 사용할 수 없었던 서버 기능에 액세스할 수 있게 되어 대부분의 경우 네이티브 IIS 확장성을 직접 작성할 필요가 없어졌습니다.
그림 5 IIS 6.0 및 IIS 7.0에서 ASP.NET과의 통합 (더 크게 보려면 이미지를 클릭하십시오.)
마지막으로 ASP.NET은 통합 모드에서 IIS와의 더 밀접한 통합을 통해 가능해진 추가 기능을 공개하는 약간의 새 API를 제공합니다. 여기에는 누가 응답을 생성했는지에 관계없이 모든 응답 헤더를 검토할 수 있는 기능과 다른 URL에 대한 요청 실행을 완전히 다시 작성하는 기능이 포함됩니다.
통합 모드에 한정된 기능을 사용하는 새 ASP.NET 모듈을 사용하지 않더라도 기존 응용 프로그램이 통합 모드의 혜택을 누릴 수 있는 경우가 많습니다. 간단하게 구성을 변경하는 것만으로 응용 프로그램에서 ASP.NET 폼 인증 및 URL 권한 부여를 사용하여 사용자의 보안으로 전체 웹 사이트를 보호하거나 ASP.NET URL 매핑을 사용하여 응용 프로그램에서 URL을 다시 쓰는 등의 작업이 가능합니다. 통합 모드를 활용하여 염치없는 웹 사용자가 사이트의 이미지를 핫 링크하는 것을 방지하는 예를 보려면 mvolo.com/2006/11/10/stopping-hotlinking-with-iis-and-aspnet.aspx(영문)에서 샘플 ASP.NET 모듈이 작동하는 방식을 확인하십시오. 이것은 기존 타사 ASP.NET 모듈을 통합 모드에서 최대한 활용하는 방법을 보여 주는 좋은 예입니다.
기존 응용 프로그램에서 통합 모드를 활용하는 단계에 대한 자세한 설명을 보려면 iis.net/default.aspx?tabid=2&subtabid=25&i=1081&p=1(영문)에 있는 필자의 기사를 참조하십시오.

개선된 보안
IIS 7.0은 세심한 코딩과 기본적으로 보안을 우선하는 설계 원칙에 따라 입증된 보안 추적 기록을 자랑하는 IIS 6.0의 코드베이스에 바탕을 두고 있습니다. IIS 7.0은 이러한 기반 위에 더욱 강력한 보안을 제공할 수 있는 약간의 아키텍처 변경과 더 안전한 웹 응용 프로그램 구축을 도와주는 몇 가지 기능을 추가했습니다.
공격 취약점 영역을 줄이는 것은 보안 시스템을 설계하고 배포하는 데 있어 기본적인 원칙 중 하나였습니다. IIS 7.0은 IIS 6.0의 기본적 잠금 원칙에서 한 단계 나아가 기본적으로 더 적은 수의 기능을 설치함으로써 서버를 더욱 엄격히 잠급니다. 서버의 모듈화된 특성을 한층 더 활용하여 사용되지 않는 모든 기능을 제거함으로써 서버의 공격 취약 영역을 줄이고 공격자가 서버를 손상시킬 수 있는 위험을 최소한으로 제한할 수 있습니다.
서버가 사용하고 있지 않은 구성 요소에서 취약점이 발견되는 경우 이를 악용하지 못하게 하기 위해 서버를 교대에서 제외하거나 취약한 구성 요소를 즉시 패치할 필요가 없습니다. 따라서 응용 프로그램의 가용성이 높아지고 패치 관리 비용이 낮아집니다.
IIS 7.0에서는 핵심 보안 기능 향상 이외에도 서버에서 보안 응용 프로그램을 잠그거나 배포하는 데 사용할 수 있는 여러 보안 기능을 제공합니다. IIS는 지금까지 항상 인증을 통해 응용 프로그램 콘텐츠에 대한 강력한 보호를 지원해 왔습니다. 이제 ASP.NET 통합 모드에서 폼 인증, 멤버 자격 및 로그온 제어와 같은 널리 사용되는 ASP.NET 보안 기능을 사용하여 전체 응용 프로그램을 위한 완벽한 인증 및 액세스 제어 솔루션을 제공할 수 있게 되었습니다. 아주 간단하게 단 한 줄의 코드도 작성하지 않고 이렇게 할 수 있는 경우가 많습니다.
ASP.NET URL 권한 부여 기능의 영향을 받은 새로운 URL 인증 기능을 사용하여 전체 응용 프로그램에 대한 선언적 액세스 제어 규칙을 구성할 수 있습니다. 이러한 액세스 규칙은 사용자 이름 및 역할에 따라 응용 프로그램 내 URL에 대한 액세스를 허가 또는 거부하는 데 사용됩니다. URL 권한 부여는 ASP.NET 2.0 멤버 자격 및 자격 관리 기능과 매끄럽게 통합되며 ASP.NET 폼 인증 및 로그인 컨트롤과 함께 효율적으로 활용하여 응용 프로그램에서 사용자 보안을 신속하게 활성화할 수 있습니다.
새 요청 필터링 기능은 자주 사용되는 URLScan 도구의 일부로 제공되던 강력한 잠금 기능을 제공합니다. 요청 필터링을 사용하여 의심되는 데이터를 포함하는 요청을 거부하고 중요한 리소스를 보호하거나 공격적인 요청 제한을 적용하여 사이트를 추가로 잠글 수 있습니다.
IIS 7.0에는 또한 보안 설정의 배포와 관리를 수월하게 하기 위한 여러 가지 변경 사항이 있습니다. 새로운 IIS_IUSR 익명 계정이 기본 제공됩니다. 이 계정은 암호 만료의 영향을 받지 않으며 컴퓨터 간의 암호 동기화를 요구하지도 않습니다. IIS_WPG 그룹을 대체하는 새로운 IIS_IUSRS 그룹이 런타임에 자동으로 작업자 프로세스의 ID에 주입되므로 사용자 지정 계정을 사용할 때 수동으로 작업자 프로세스 ID를 그룹에 추가할 필요가 없어졌습니다.
기본 제공 IIS_USR 계정 및 IIS_USRS 그룹 덕분에 익명 IIS 계정 및 그룹의 ACL(액세스 제어 목록)을 지정하는 응용 프로그램 콘텐츠를 보안 설정을 보존하기 위한 추가 단계 없이 간단하게 한 IIS 서버에서 다른 서버로 복사할 수 있습니다. 이에 따라 개발-테스트-프로덕션 주기에 걸쳐 응용 프로그램 배포를 크게 간소화할 수 있습니다.
응용 프로그램 소유자가 앞서 설명한 분산 구성 시스템을 통해 서버에 대한 권리 액세스 권한이 없더라도 자신의 응용 프로그램 내에서 필요한 웹 서버 설정을 직접 관리할 수 있습니다. 응용 프로그램 관리자는 응용 프로그램을 서버에 업로드할 때 web.config에 필요한 설정을 응용 프로그램 콘텐츠 내에 지정하거나 또는 IIS 관리자 도구를 사용하여 원격으로 응용 프로그램을 구성할 수 있습니다.
IIS 관리자 도구는 방화벽 환경에서 편리하게 사용할 수 있는 HTTPS 연결을 통해 보안 원격 관리를 제공합니다. 멤버 자격 서비스를 통해 응용 프로그램 관리자를 Windows 사용자 또는 사용자 지정 사용자 계정으로 인증할 수 있으므로 소유자가 서버에 대한 Windows 액세스 권한이 없더라도 관리 도구를 사용하여 원격으로 응용 프로그램을 관리할 수 있습니다.
서버 관리자는 구성 시스템의 유연한 잠금 지원을 통해 응용 프로그램이 구성할 수 있는 설정을 완벽하게 제어할 수 있습니다. 마찬가지로 응용 프로그램을 원격으로 관리하는 응용 프로그램 관리자에게 어떤 IIS 관리자 도구 기능을 사용할 수 있도록 할지 제어할 수 있습니다.

개선된 진단
Windows, IIS 7.0 및 웹 응용 프로그램에 지원되는 새로운 기능이 많지만 웹 서버는 매우 복잡한 시스템이므로 문제를 해결하는 데 많은 노력이 필요한 경우가 많습니다. IIS 7.0에서는 웹 서버의 작동을 모니터링하고 응용 프로그램 문제 디버그를 지원하는 여러 가지 새로운 기능을 추가했습니다.
첫째, IIS 7.0은 서버의 실시간 상태를 들여다볼 수 있게 해 줍니다. Runtime State and Control API 또는 RSCA("리스카"라고 읽음)라고 하는 이 기능을 통해 사이트 및 응용 프로그램 풀의 활성 상태와 실행 중인 작업자 프로세스를 보는 것은 물론 서버에서 현재 실행 중인 요청까지 볼 수 있습니다. 또한 사이트를 시작 또는 중지하거나 응용 프로그램 풀을 재활용하는 등 서버의 상태를 제어할 수 있습니다. Windows Vista에서 이 정보에 액세스하려면 IIS 관리자 또는 appcmd.exe 명령줄 도구를 사용하거나 아니면 Microsoft.Web.Administration API를 통한 프로그래밍 방식을 사용할 수 있습니다.
예를 들어 현재 실행 중인 요청과 서버 상태를 확인하면 어느 곳이 문제인지를 알 수 있습니다. 이를 통해 요청 중지 문제를 신속하게 해결하고 CPU에서 실행되고 있는 스크립트를 추적할 수 있습니다(그림 6 참조).
RSCA 기능을 사용하면 시스템에서 일어나고 있는 일을 신속하게 확인하고 문제 해결을 수행할 때 서버를 제어할 수 있으므로 서버 문제를 조사하거나 서버 성능을 조정할 때 매우 편리합니다. 필자는 사무실에서 버그에 대해 조사할 때 문제 해결을 위해 응용 프로그램 풀을 보거나, 작업자 프로세스를 확인하고, 문제 응용 프로그램 풀을 시작 또는 중단하는 데 appcmd.exe를 자주 사용합니다.
그림 6 IIS 관리자에서 문제 스크립트 추적 (더 크게 보려면 이미지를 클릭하십시오.)
웹 응용 프로그램에서 오류가 발생하면 이것은 잘못된 서버 구성이나 응용 프로그램 오류 또는 다양한 환경 요인에 의한 것일 수 있습니다. 상태 코드와 표준 오류 메시지만으로는 무엇이 문제인지에 대한 정보가 충분하지 않기 때문에 서버 문제 해결이 매우 어려워질 수 있습니다. IIS 7.0에서는 그림 7과 같이 대부분의 오류에 대해 무엇이 문제이며 왜 발생하였고 어떻게 수정할 수 있는지에 대한 자세한 오류 정보를 제공합니다.
그림 7 문제와 해결책을 보여 주는 오류 정보 (더 크게 보려면 이미지를 클릭하십시오.)
세부 오류는 ASP.NET의 세부 오류와 비슷한 보안 방식을 따릅니다. 기본적으로는 로컬 컴퓨터에서 웹 사이트를 검색하는 경우에만 자세한 정보가 표시됩니다. 이전처럼 다른 오류 코드를 위한 사용자 지정 오류 페이지를 구성하거나 사용자 지정 URL로 재지정하는 것도 가능합니다. 세부 오류 페이지 역시 이제는 각 언어로 번역되므로 해당 언어에 대한 언어 팩을 설치한 경우에는 클라이언트의 기본 설정 언어로 오류 설명을 제공합니다.

디버깅 없이 오류 진단
발생한 오류 상황이 알려지지 않은 것이거나 여러 웹 서버 구성 요소의 복잡한 상호 작용에 의한 것이라면 어떻게 할까요? 이제 걱정할 필요가 없습니다. IIS 7.0에서 제공하는 포괄적인 추적 메커니즘을 사용하면 각 요청에 대한 자세한 과거 기록을 생성할 수 있으며 이 기록을 사용하여 신속하게 문제를 추적할 수 있습니다.
IIS 7.0은 Windows Server 2003 서비스 팩 1(SP1)의 IIS 6.0에 추가된 ETW(Windows 이벤트 추적)를 바탕으로 정보 이벤트를 더 추가했습니다. 이러한 이벤트에는 요청 실행을 통한 역 추적 및 문제가 발생한 위치 식별을 위해 살펴볼 수 있는 서버 프로세스의 각 단계에 대한 유용한 정보를 포함합니다. 이러한 이벤트는 Windows 추적 인프라로 라우팅할 수 있으며 이를 통해 ASP.NET 및 SQL Server™를 포함한 여러 Windows 구성 요소의 자체 추적 정보를 요청에 대한 하나의 논리적인 실행 추적에 연결할 수 있습니다.
또한 이벤트를 실패한 요청 추적(FREB라고도 함)이라는 새로운 기능으로 라우팅하여 추적 로그를 XML 로그 파일로 저장하고 제공되는 XSLT 스타일시트(그림 8 참조)를 사용하여 보거나 프로그래밍 방식으로 사용할 수 있습니다.
그림 8 XML 로그 파일 보기 (더 크게 보려면 이미지를 클릭하십시오.)
실패한 요청 추적의 훌륭한 점은 서버에 대해 사용하도록 설정할 수 있다는 것입니다. 이렇게 하면 성공적으로 완료된 요청의 추적 로그를 저장하는 데 따르는 성능 저하를 방지하면서 구성 가능한 오류 상황이 발생한 요청에 대한 추적 로그를 자동으로 캡처할 수 있습니다. 예를 들어 서버 오류를 일으킨 요청이나 완료하는 데 특정 시간 이상을 소비한 요청에 대한 실패한 요청 추적을 설정할 수 있습니다.
실패한 요청 추적 기능을 사용하면 간헐적으로 발생하거나 재연하기 어려운 오류에 대해서도 귀중한 추적 정보를 캡처할 수 있습니다. 이로써 이전에는 고수준 디버깅이 필요했던 어려운 문제를 진단 및 해결할 수 있습니다.
기본 추적 인프라는 서버 확장성 모델을 통해 IIS 모듈에 공개되므로 IIS와 함께 제공된 것이든 타사에서 개발한 것이든 관계없이 모든 서버 구성 요소가 요청 처리 중에 자세한 추적 정보를 내보낼 수 있습니다. IIS 7.0 추적은 System.Diagnostics API 및 ASP.NET 페이지 추적을 통해 ASP.NET 추적과 통합되어 관리되는 모듈이 통합 추적 모델을 활용할 수 있도록 허용합니다. 이에 그치지 않고 추적 정보를 처리하고 출력하는 새로운 방법을 제공하는 추적 모듈을 작성할 수도 있습니다. 예를 들어 IIS 추적 정보를 SQL Server나 텍스트 파일에 저장하는 모듈을 최초로 작성할 수도 있습니다.

개선된 성능
Windows Vista는 클라이언트 운영 체제 릴리스이며 높은 처리량의 프로덕션 배포용도 아니지만(Windows Vista의 IIS에서는 처리 가능한 동시 요청이 10개로 제한됨) 웹 응용 프로그램의 성능을 크게 높이기 위한 몇 가지 구조적으로 향상된 기능을 포함하고 있습니다. 이러한 향상된 기능은 Windows Server "Longhorn" 출시에 맞추어 계획된 광범위한 성능 개선 작업과 함께 IIS 7.0으로 서버의 성능을 개선하는 데 큰 도움이 될 것입니다.
향상된 기능 중 첫 번째로 꼽을 수 있는 것은 구성 요소화입니다. 서버의 모듈화 특성 덕분에 관리자는 불필요한 서버 기능을 제거하여 요청 처리 중에 메모리와 CPU 사용을 절약할 수 있습니다. 이를 통해 컴퓨터의 처리량과 용량을 크게 개선할 수 있습니다. 기능을 더욱 세부적으로 설정할 수 있으므로(서버의 각 응용 프로그램에 대해 기능을 켜고 끌 수 있음) 사이트의 특정 부분에서만 특정 기능이 필요한 경우 응용 프로그램의 성능을 더욱 개선할 수 있습니다.
IIS 7.0의 주목할 만한 다른 성능 기능으로 새로운 IIS 출력 캐시가 있습니다. 이러한 기능을 통해 서버에서 비용이 높은 동적 페이지에 대한 응답을 다시 사용할 수 있게 되어 클라이언트에 응답을 반환하기 위해 비용이 높은 렌더링 및 데이터베이스 트랜잭션을 수행해야 할 필요가 줄어들었습니다. IIS 출력 캐시는 ASP.NET의 다양한 기존 캐시 기능을 대체하는 더 빠른 기능이며 지원하는 기능 집합의 수는 적지만 성능 향상을 위해 동적 콘텐츠를 캐시할 수 있는 충분한 유연성을 갖추고 있습니다.
ASP.NET 페이지, PHP 스크립트 또는 CGI 응용 프로그램과 같은 동적 콘텐츠의 출력을 캐싱함으로써 디스크와 데이터베이스에 대한 부하를 줄이고 5~10배 정도의 성능 향상 효과를 얻을 수 있습니다.

이전 버전과의 호환성
IIS 7.0은 대부분의 기존 응용 프로그램을 수정하지 않고 실행할 수 있습니다. 이 릴리스 혁신을 지원하는 데 필요한 구조적인 변경을 고려할 때 이것은 상당히 중요한 특징입니다. 구성 시스템은 이전의 중앙화된 느슨한 형식의 구성 저장소에서 위임 XML 구성 파일 계층으로 가장 큰 변화를 겪었습니다. 구성 정보의 구조와 저장소는 이제 IIS 6.0 메타베이스와는 완전히 다르며 레거시 구성 API를 통해서는 액세스할 수 없습니다.
IIS 7.0은 구성 시스템에 있는 기본 데이터와 메타베이스 ABO API에서 제공하는 인터페이스 간의 즉석 변환을 수행하는 메타베이스용 에뮬레이션 계층을 제공함으로써 이 문제를 해결하고 있습니다. 따라서 ABO, 고수준 WMI 또는 ADSI 스크립트 중 어떤 것을 통해 액세스하더라도 메타베이스에 대해 작성한 코드가 올바르게 작동합니다. 그러나 이 기능은 호환성 설치 구성 요소를 설치해야 올바르게 작동합니다.
IIS 7.0은 IIS 구성 요소 개발을 위한 새로운 확장성 모델을 제공하고 있지만 ISAPI 구성 요소 역시 아직 지원됩니다. ISAPI 확장 기능 및 ISAPI 필터 설치 구성 요소를 설치하면 확장 기능 및 필터를 이전과 같이 실행할 수 있습니다. 그러나 새 구성 요소를 개발하고 있다면 더 강력하고 향상된 개발 환경을 위해 새 확장성 모델을 사용해야 합니다.
통합 모드와 런타임 호환이 되지 않는 일부 소수의 ASP.NET 응용 프로그램에서는 응용 프로그램 풀을 클래식 모드로 실행해야 합니다. 이 경우 여러 응용 프로그램을 동일한 서버에서 별도의 응용 프로그램 풀에 배치하면 함께 실행하는 것이 가능합니다. ASP.NET의 주요 변경 내용에 대한 전체 목록 및 IIS 7.0과 ASP.NET의 일반적인 호환성에 대한 자세한 내용은 iis.net/default.aspx?tabid=2&subtabid=25&i=1223(영문)에 있는 ASP.NET 호환성 백서를 참조하십시오.

결론
Windows Vista에 포함된 IIS 7.0 릴리스는 웹 서버를 위한 올바른 핵심 아키텍처, 확장성 및 관리 플랫폼에 초점을 맞추고 차세대 웹 응용 프로그램 플랫폼을 위한 구조적인 기초를 제공하는 데 그 목적이 있습니다. Windows Vista는 서버 버전의 Windows Vista가 출시되었을 때 응용 프로그램을 배포하게 될 동일한 서버 플랫폼을 미리 살펴보고 응용 프로그램을 개발 및 테스트할 수 있는 환경을 제공합니다.
Windows Vista에 IIS 7.0이 릴리스됨에 따라 이제는 프로덕션 환경을 위해 웹 서버를 준비하고 프로덕션 시나리오에 맞게 안정성과 성능을 개선하는 데 웹 플랫폼 및 도구 팀의 초점이 옮겨지고 있습니다. 그러나 Windows Vista에 제공되는 핵심 개발 및 관리 기능은 변하지 않을 것이며 서버 버전의 IIS 7.0이 완성되면 이러한 향상된 기능은 서비스 팩을 통해 Windows Vista에서 사용할 수 있게 될 것입니다. 그때가 되면 클라이언트와 서버 컴퓨터가 다시 동일한 서버의 IIS를 실행하게 될 것이므로 여러분은 계속해서 Window Vista를 실행하는 데스크톱에서 웹 응용 프로그램을 개발 및 테스트할 수 있습니다.
IIS 7.0 사용을 시작하려면 IIS 팀의 새 홈 페이지인 iis.net 웹 사이트를 비롯하여 웹에 있는 유용한 많은 리소스를 확인해 보시기 바랍니다. 이 새로운 사이트에는 자세한 기사부터 모든 IIS 7.0 기능에 대한 정리에 이르기까지 완벽한 IIS 7.0 포털이 있습니다. 질문을 하거나 IIS 팀 및 IIS 커뮤니티와 함께 문제에 대해 논의하려면 포럼을 사용하십시오.
www.mvolo.com(영문)에 있는 필자의 블로그에도 IIS 7.0에 대한 깊이 있는 내용 및 내부 정보가 있습니다. 꼭 방문해 주십시오. 그리고 가장 좋아하는 IIS 7.0 관련 내용이 있으면 알려 주십시오. 블로그에서 다룰 기회를 마련하겠습니다.

Mike Volodarsky는 Microsoft의 웹 플랫폼 및 도구 팀에서 기술 프로그램 관리자로 일하고 있으며 ASP.NET와 IIS의 핵심 서버 인프라 담당자로서 현재 차세대 웹 서버인 IIS 7.0의 웹 응용 프로그램 플랫폼을 개선하는 데 주력하고 있습니다.

Page view tracker