연습: IIS 7.0에서 ASP.NET 응용 프로그램 구성

업데이트: 2007년 11월

ASP.NET 웹 응용 프로그램을 IIS 7.0에 호스팅하는 경우 여러 가지 방법으로 응용 프로그램의 구성을 설정할 수 있습니다. 이름을 전달할 수 있습니다.

  • IIS 관리자 사용. 자세한 내용은 방법: IIS 관리자 열기Internet Information Services (IIS) Manager를 참조하십시오.

  • Web.config 파일 직접 편집. 이 작업은 Visual Studio나 Visual Web Developer에서 또는 텍스트 편집 프로그램을 사용하여 수행할 수 있습니다.

  • IIS 7.0 명령줄 도구(Appcmd.exe) 사용. 이 유틸리티를 사용하면 IIS 구성 설정과 웹 응용 프로그램 구성 설정을 지정할 수 있습니다. 자세한 내용은 IIS 7.0 Command-Line Tool을 참조하십시오.

  • WMI(Windows Management Instrumentation) 사용. IIS 7.0 WMI 공급자 WebAdministration 네임스페이스에는 웹 사이트, 웹 응용 프로그램 및 해당 개체와 속성에 대한 관리 작업을 위한 스크립트를 작성하는 데 사용할 수 있는 클래스와 메서드가 포함되어 있습니다. 자세한 내용은 IIS 7.0: WMI를 참조하십시오.

IIS 7.0의 모듈식 아키텍처를 사용하면 웹 서버의 기능을 구성하는 모듈을 지정할 수 있습니다. IIS 7.0을 설치하는 경우 기본적으로 대부분의 모듈을 사용할 수 없습니다. ASP.NET 웹 사이트를 사용할 때는 다음과 같은 모듈을 활성화할 수 있습니다.

  • IIS 6 관리 호환성 모듈 - Visual Studio에서 메타베이스 호출을 사용하여 IIS 7.0 구성 저장소와 상호 작용하도록 할 수 있습니다.

  • Windows 인증 모듈 - Visual Studio에서 웹 응용 프로그램을 디버깅할 수 있습니다.

자세한 내용은 IIS 7.0 및 Visual Studio가 설치된 Windows Vista에서 웹 응용 프로그램 실행IIS 7.0 및 Visual Studio가 설치된 Windows Server 2008에서 웹 응용 프로그램 실행을 참조하십시오.

이 연습에서는 IIS 관리자를 사용하여 구성을 설정한 다음 이 설정이 웹 응용 프로그램의 Web.config 파일에 어떻게 반영되었는지 확인합니다. 이 연습에서 수행할 작업은 다음과 같습니다.

  • 사용자 지정 관리 코드 모듈을 만들고 이 모듈을 웹 응용 프로그램의 App_Code 디렉터리에 저장합니다.

  • IIS 관리자를 사용하여 사용자 지정 모듈을 등록합니다.

  • IIS 관리자를 사용하여 사용자 지정 HTTP 헤더를 추가합니다.

모듈의 기능은 이 연습에서 중요하지 않습니다. 대신 이 연습에서는 모듈이 요청 파이프라인으로 통합되는 방식과 IIS 관리자를 사용하여 응용 프로그램을 구성하면 Web.config 파일에 어떤 영향을 미치는지에 대해 설명합니다.

사전 요구 사항

이 연습을 완료하려면 다음과 같은 요건을 갖추어야 합니다.

  • Windows Vista 또는 Windows Server 2008에 설치되어 실행되고 있는 IIS 7.0

  • IIS 7.0 통합 모드에서 실행되고 있는 하나 이상의 응용 프로그램 풀

  • IIS 7.0에서 사용하도록 설정된 IIS 6 관리 호환성 모듈

  • Visual Studio 2008.

  • .NET Framework 버전 3.0 이상

  • 컴퓨터에 대한 관리자 권한

  • 컴퓨터와 웹 서버 사이의 HTTP 요청 및 응답을 검사하는 도구(예: Fiddler Web Debugging Proxy 웹 사이트에서 사용할 수 있는 수 있는 Fiddler 도구)

    참고:

    Fiddler는 Microsoft에서 지원하지 않는 타사 도구입니다.

사용자 지정 HTTP 모듈 만들기

먼저 새로운 웹 사이트를 만듭니다.

새 웹 사이트를 만들려면

  1. Visual Studio에서 WalkthroughIIS7이라는 새 로컬 HTTP 웹 사이트를 만듭니다.

    로컬 IIS 웹 사이트를 만드는 방법에 대한 자세한 내용은 연습: Visual Web Developer에서 로컬 IIS 웹 사이트 만들기를 참조하십시오.

  2. 시작 메뉴에서 모든 프로그램, 보조프로그램, 실행을 차례로 클릭합니다.

  3. 열기 상자에 inetmgr를 입력한 다음 확인을 클릭합니다.

    참고:

    UAC(사용자 계정 컨트롤)를 사용하는 경우에는 IIS 관리자에 액세스하려고 할 때 메시지가 표시될 수 있습니다. 그럴 경우에는 계속을 클릭합니다. 자세한 내용은 User Account Control을 참조하십시오.

  4. 웹 사이트가 통합 모두에서 실행되는 응용 프로그램 풀에 있는지 확인합니다.

    웹 응용 프로그램의 모드를 설정하는 방법에 대한 자세한 내용은 Configure the Request-Processing Mode for an Application Pool을 참조하십시오.

이제 사용자 지정 HTTP 모듈을 만들 수 있습니다.

사용자 지정 HTTP 모듈을 만들려면

  1. Visual Studio의 솔루션 탐색기에서 웹 프로젝트 노를 마우스 오른쪽 단추로 클릭한 다음 새 항목 추가를 클릭합니다.

    새 항목 추가 대화 상자가 표시됩니다.

  2. Visual Studio에 설치되어 있는 템플릿에서 클래스를 선택합니다.

  3. 사용할 프로그래밍 언어를 선택합니다.

  4. 클래스의 이름에 CustomModule을 입력하고 추가를 클릭합니다.

    웹 사이트에 아직 App_Code 폴더가 없으면 클래스를 App_Code 폴더에 저장할지 묻는 메시지가 표시됩니다. 그렇게 하려면 를 클릭합니다.

  5. 클래스 파일에서 기존 코드를 제거하고 다음 코드로 바꿉니다.

    Imports System
    Imports System.Configuration
    Imports System.Web
    Imports System.Web.Security
    Imports System.Web.UI
    
    Public Class CustomModule
        Implements IHttpModule
    
        Public Sub New()
            ' Constructor
        End Sub
    
        Public Sub Init(ByVal app As HttpApplication) Implements IHttpModule.Init
            AddHandler app.BeginRequest, AddressOf Me.BeginRequest
        End Sub
    
    
        Public Sub BeginRequest(ByVal source As Object, ByVal e As EventArgs)
            Dim app As HttpApplication = CType(source, HttpApplication)
            Dim cont As HttpContext = app.Context
            Dim notification As String = cont.CurrentNotification.ToString()
            Dim postNotification As String = cont.IsPostNotification.ToString()
            cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " & notification & _
                    ", PostNotification = " & postNotification + _
                    ", DateTime = " & DateTime.Now.ToString())
    
        End Sub
    
        Public Sub Dispose() Implements IHttpModule.Dispose
        End Sub
    End Class
    
    using System;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    
    public class CustomModule : IHttpModule
    {
        public CustomModule()
        {
            // Constructor
        }
        public void Init(HttpApplication app)
        {
            app.BeginRequest += new EventHandler(BeginRequest);
        }
        public void BeginRequest(object source, EventArgs e)
        {
    
            HttpApplication app = (HttpApplication)source;
            HttpContext cont = app.Context;
            string notification = cont.CurrentNotification.ToString();
            string postNotification = cont.IsPostNotification.ToString();
            cont.Response.Headers.Set("CustomHeader2", "ASPX, Event = " + notification +
                    ", PostNotification = " + postNotification +
                    ", DateTime = " + DateTime.Now.ToString());
    
        }
        public void Dispose()
        {
        }
    }
    

    이 코드는 다음 작업을 수행합니다.

    • IHttpModule 인터페이스를 구현하는 사용자 지정 관리 코드 모듈을 정의합니다.

    • HttpApplication 인터페이스의 BeginRequest 이벤트에 대한 이벤트 처리기를 정의합니다. 이 이벤트 처리기에서는 응답 헤더 컬렉션에 추가할 사용자 지정 헤더를 정의합니다.

    • 모듈의 Init 메서드에서 알림을 위해 처리기를 요청 파이프라인에 추가합니다.

    이 클래스에서는 IHttpModule 인터페이스를 구현하므로 Init 메서드와 Dispose 메서드를 구현해야 합니다 . 이 모듈의 Dispose 메서드는 아무 기능도 제공하지 않지만 필요한 경우 삭제 논리를 구현하는 데 사용할 수 있습니다.

  6. 빌드 메뉴에서 웹 사이트 빌드를 클릭하여 모듈에 오류가 없는지 확인합니다.

이 단원의 마지막 작업으로 연습의 뒷부분에서 사용자 지정 모듈을 테스트하는 데 사용할 ASP.NET 및 HTML 페이지를 만듭니다.

ASP.NET 및 HTML 테스트 페이지를 만들려면

  1. ASPXpage.aspx라는 새로운 단일 파일 ASP.NET 웹 페이지를 응용 프로그램의 루트 폴더에 추가합니다.

  2. 기존 태그를 제거하고 다음 태그로 바꿉니다.

    <%@ Page Language="VB" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
        <title>ASPX Module Test Page</title>
    </head>
    <body>
        <form id="form1" >
        <div>
        <%= Response.Headers.Get("CustomHeader2").ToString() %>
        </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script >
    
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head >
        <title>ASPX Module Test Page</title>
    </head>
    <body>
        <form id="form1" >
        <div>
        <%= Response.Headers.Get("CustomHeader2").ToString() %>
        </div>
        </form>
    </body>
    </html>
    
  3. HTMLPage.htm이라는 새 HTML 페이지를 응용 프로그램의 루트 폴더에 추가합니다.

  4. HTML 페이지에 다음 태그를 추가합니다.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>HTML Module Test Page</title>
    </head>
    <body>
        <div>
           HTML page.
           <br />
        </div>
    </body>
    </html>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>HTML Module Test Page</title>
    </head>
    <body>
        <div>
           HTML page.
           <br />
        </div>
    </body>
    </html>
    
  5. 모든 변경 내용을 저장합니다.

  6. ASPXpage.aspx 페이지와 HTMLpage.htm 페이지를 각각 실행하여 브라우저에 표시되는지 확인합니다.

    참고:

    Visual Studio 응용 프로그램을 그대로 열어 둡니다. 이 응용 프로그램으로 돌아와서 IIS 관리자를 사용하여 변경할 구성 변경 내용을 확인합니다.

지금은 페이지가 실행되지만 사용자 지정 모듈을 호출하지 않습니다. 다음 절차에서는 요청 파이프라인에 사용자 지정 모듈을 추가합니다.

IIS 관리자를 사용하여 구성 변경

이 단원에서는 IIS 관리자를 사용하여 IIS 응용 프로그램에 대한 몇 가지 구성을 설정합니다. 즉, 사용자 지정 모듈을 등록하고 사용자 지정 헤더를 추가하며 정적 압축을 해제합니다

사용자 지정 관리 코드 모듈을 등록하려면

  1. 시작 메뉴에서 모든 프로그램, 보조프로그램, 실행을 차례로 클릭합니다.

  2. 열기 상자에 inetmgr를 입력한 다음 확인을 클릭합니다.

    참고:

    UAC(사용자 계정 컨트롤)를 사용하는 경우에는 IIS 관리자에 액세스하려고 할 때 메시지가 표시될 수 있습니다. 그럴 경우에는 계속을 클릭합니다. 자세한 내용은 User Account Control을 참조하십시오.

  3. 연결 창에서 웹 사이트를 호스팅하는 컴퓨터나 서버의 이름을 확장합니다.

  4. 사이트 폴더를 확장합니다.

  5. 웹 사이트 WalkthroughIIS7을 선택합니다. Windows Server 2008에서 웹 응용 프로그램이 웹 사이트의 응용 프로그램인 경우 먼저 웹 사이트를 확장한 다음 WalkthroughIIS7을 선택합니다.

    기본적으로 IIS 관리자의 가운데 창에서는 웹 서버 구성 옵션을 영역별로 표시합니다. WalkthroughIIS7 웹 응용 프로그램의 경우 ASP.NETIIS라는 두 개의 영역이 있습니다.

  6. 가운데 창의 IIS 섹션에서 모듈 아이콘을 두 번 클릭합니다.

    가운데 창의 모듈 정보에는 ISS에 대해 현재 구성되어 있는 모듈이 모두 표시됩니다.

  7. 작업 창에서 관리되는 모듈 추가를 클릭합니다.

    관리되는 모듈 추가 대화 상자가 표시됩니다.

  8. 이름 상자에 CustomModule을 입력합니다.

    모듈을 설명하는 아무 단어나 구를 이름으로 사용할 수 있습니다. 이 연습에서는 그냥 모듈 이름을 사용합니다.

  9. 형식 목록에서 모듈의 관리되는 형식에 대한 정규화된 이름을 선택하거나 입력합니다.

    IIS 구성에는 IHttpModule을 구현하는 App_Code 폴더의 모든 클래스가 포함되어 있으므로 CustomModule 형식에 목록에 나타납니다.

  10. ASP.NET 응용 프로그램 또는 관리되는 처리기에 대한 요청인 경우에만 호출 확인란이 선택되어 있지 않은지 확인합니다.

    이 연습에서는 모듈을 ASP.NET 요청뿐 아니라 파이프라인의 모든 요청에 적용합니다.

  11. 확인을 클릭합니다.

    관리 코드 모듈이 모듈 목록에 추가됩니다. 목록을 스크롤하거나 다시 정렬하여 추가된 모듈을 확인할 수 있습니다.

사용자 지정 응답 헤더를 추가하려면

  1. IIS 관리자의 왼쪽 창에서 WalkthroughIIS7 노드의 이름을 클릭하여 사이트의 기본 구성 창을 표시합니다.

  2. 가운데 창의 IIS 설정 섹션에서 HTTP 응답 헤더 아이콘을 두 번 클릭합니다.

    HTTP 응답 헤더 기능 정보가 가운데 창에 표시됩니다. 여기에는 현재 정의되어 있는 모든 HTTP 응답 헤더가 표시됩니다.

  3. 작업 창에서 추가를 클릭합니다.

    사용자 지정 HTTP 응답 헤더 추가 대화 상자가 표시됩니다.

  4. 이름 텍스트 상자에 CustomHeader1을 입력합니다.

    헤더를 설명하는 아무 단어나 구를 이름으로 사용할 수 있습니다.

  5. 텍스트 상자에 값 SampleHeader를 입력합니다.

이제 정적 압축을 해제할 수 있습니다. 이렇게 하면 HTML 페이지와 같은 정적 콘텐츠가 압축되는 것을 방지할 수 있습니다.

정적 압축을 해제하려면

  1. 왼쪽 창에서 WalkthroughIIS7 노드의 이름을 클릭하여 사이트의 기본 구성 창을 가운데 창에 표시합니다.

  2. IIS 관리자 가운데 창의 에서 IIS 설정 섹션에서 압축 아이콘을 두 번 클릭합니다.

    압축 기능 정보가 가운데 창에 표시됩니다.

  3. 정적 콘텐츠 압축 사용 확인란의 선택을 취소합니다.

Visual Studio에서 구성 변경 내용 확인

이 연습에서는 IIS 관리자를 사용하여 구성 작업을 수행했습니다. 다음 절차에서는 응용 프로그램의 Web.config 파일에서 변경 내용을 확인합니다.

Web.config 파일에서 모듈 등록을 확인하려면

  1. Visual Studio 응용 프로그램과 WalkthroughIIS7 응용 프로그램으로 차례로 돌아옵니다.

  2. 솔루션 탐색기에서 웹 사이트 이름을 마우스 오른쪽 단추로 클릭하고 폴더 새로 고침을 클릭합니다.

    그러면 Visual Studio에서 웹 사이트 폴더 보기를 디스크의 폴더 및 파일과 동기화합니다.

    처음에 응응 프로그램에 Web.config 파일이 포함되어 있지 않았더라도 이제 웹 응용 프로그램에 Web.config 파일이 있습니다. 응용 프로그램에 Web.config 파일이 이미 있는 경우에는 파일이 변경됩니다.

  3. 솔루션 탐색기에서 Web.config 파일을 두 번 클릭하여 내용을 표시합니다.

    system.webServer 섹션에는 IIS 관리자를 사용하여 변경한 구성 변경 내용이 포함됩니다. system.webServer 섹션에는 다음과 같은 자식 요소가 있습니다.

    • 사용자 지정 모듈을 요청 처리 파이프라인에 등록하는 modules 요소

    • 사용자 지정 응답 헤더를 정의하는 httpProtocol 요소

    • 정적 압축을 해제하는 urlCompression 요소

    system.webServer 섹션은 다음 예제와 유사합니다.

    <system.webServer>
      <modules>
        <add name="CustomModule" type="CustomModule" preCondition="" />
      </modules>
      <httpProtocol>
        <customHeaders>
          <add name="CustomHeader1" value="SampleHeader" />
        </customHeaders>
      </httpProtocol>
      <urlCompression doStaticCompression="false" />
    </system.webServer>
    

    system.webServer 섹션에 대한 자세한 내용은 ASP.NET 구성 사용IIS 7.0: system.webServer Section Group (IIS Settings Schema)을 참조하십시오.

사용자 지정 모듈 테스트

IIS 7.0에서는 통합 요청 파이프라인을 제공합니다. .aspx 페이지 또는 .htm 페이지와 같은 모든 응용 프로그램 리소스에 대한 요청은 이 연습에서 만든 사용자 지정 모듈과 같은 관리 코드 모듈에서 파이프라인 알림을 발생시킬 수 있습니다.

참고:

IIS 관리자에서 관리 코드 모듈을 구성할 때 ASP.NET 응용 프로그램 또는 관리되는 처리기에 대한 요청인 경우에만 호출 옵션을 선택하지 않았습니다. 이 옵션을 선택한 경우에는 사용자 지정 모듈에서 파이프라인 알림을 ASP.NET 리소스에 대해서만 받고 HTML 파일과 같은 정적 리소스에 대해서는 받지 않습니다.

사용자 지정 모듈이 모든 리소스에 적용되는지 확인하려면

  1. Visual Studio에서 ASPXpage.aspx 페이지를 열고 Ctrl+F5를 눌러 브라우저에서 페이지를 표시합니다.

    모듈에서 정의한 사용자 지정 헤더가 브라우저에 표시됩니다. ASP.NET 페이지에서는 IIS에서 정의한 사용자 지정 헤더에 액세스할 수 없습니다. 이 헤더 정보는 페이지 콘텐츠가 스트림에 렌더링된 후에 추가되기 때문입니다. 그러나 HTTP 트래픽을 모니터링하는 Fiddler와 같은 도구를 사용하여 헤더가 설정되어 있는지 확인할 수는 있습니다.

  2. HTTP 트래픽 모니터링 도구를 열고 브라우저에서 ASPXpage.aspx 페이지를 새로 고칩니다.

    참고:

    ASPXpage.aspx 페이지의 URL에서 localhost를 사용하는 경우 localhost를 IIS 7.0이 설치된 컴퓨터의 이름으로 변경합니다. 일반적인 개발 시나리오에서는 Visual Studio가 실행되고 있는 컴퓨터 이름을 사용할 수도 있습니다.

  3. 응답의 헤더 컬렉션에 CustomHeader1 및 CustomHeader2가 표시되는지 확인합니다.

  4. 브라우저에서 HTMLPage.htm을 봅니다.

  5. 응답의 헤더 컬렉션에 CustomHeader1 및 CustomHeader2가 표시되는지 확인합니다.

다음 단계

이 연습에서는 IIS 7.0에서 ASP.NET의 구성에 대해 소개했습니다. IIS 7.0 웹 서비 및 ASP.NET에 대한 구성 설정은 하나의 구성 파일로 통합되어 있어서 단일 관리 인터페이스를 통해 편집할 수 있습니다.

또한 IIS 관리자의 추가 설정과 변경 내용이 구성 파일에 어떻게 반영되는지 탐색할 수 있습니다. 자세한 내용은 Internet Information Services (IIS)를 참조하십시오.

참고 항목

작업

연습: IIS 6.0에서 MMC를 사용하여 ASP.NET 응용 프로그램 구성

개념

ASP.NET 응용 프로그램을 IIS 6.0에서 IIS 7.0으로 이동

기타 리소스

Configuring Modules in IIS 7.0

Configuring HTTP Response Headers in IIS 7.0