다음을 통해 공유


다양한 버전의 IIS에 ASP.NET MVC 사용(C#)

작성자: Microsoft

이 자습서에서는 다양한 버전의 인터넷 정보 서비스에서 ASP.NET MVC 및 URL 라우팅을 사용하는 방법을 알아봅니다. IIS 7.0(클래식 모드), IIS 6.0 및 이전 버전의 IIS에서 ASP.NET MVC를 사용하기 위한 다양한 전략을 알아봅니다.

ASP.NET MVC 프레임워크는 브라우저 요청을 컨트롤러 작업으로 라우팅하는 ASP.NET 라우팅에 따라 달라집니다. ASP.NET 라우팅을 활용하려면 웹 서버에서 추가 구성 단계를 수행해야 할 수 있습니다. 모두 IIS(인터넷 정보 서비스) 버전과 애플리케이션에 대한 요청 처리 모드에 따라 달라집니다.

IIS의 다양한 버전에 대한 요약은 다음과 같습니다.

  • IIS 7.0(통합 모드) - ASP.NET 라우팅을 사용하는 데 필요한 특별한 구성이 없습니다.
  • IIS 7.0(클래식 모드) - ASP.NET 라우팅을 사용하려면 특수 구성을 수행해야 합니다.
  • IIS 6.0 이하 - ASP.NET 라우팅을 사용하려면 특수 구성을 수행해야 합니다.

IIS의 최신 버전은 버전 7.5(Win7)입니다. IIS의 IIS 7은 Windows Server 2008 AND VISTA/SP1 이상에 포함되어 있습니다. Home Basic을 제외한 모든 버전의 Vista 운영 체제에 IIS 7.0을 설치할 수도 있습니다(참조 https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx).

IIS 7.0은 요청을 처리하기 위한 두 가지 모드를 지원합니다. 통합 모드 또는 클래식 모드를 사용할 수 있습니다. 통합 모드에서 IIS 7.0을 사용하는 경우 특별한 구성 단계를 수행할 필요가 없습니다. 그러나 클래식 모드에서 IIS 7.0을 사용하는 경우 추가 구성을 수행해야 합니다.

Microsoft Windows Server 2003에는 IIS 6.0이 포함되어 있습니다. Windows Server 2003 운영 체제를 사용하는 경우 IIS 6.0을 IIS 7.0으로 업그레이드할 수 없습니다. IIS 6.0을 사용하는 경우 추가 구성 단계를 수행해야 합니다.

Microsoft Windows XP Professional에는 IIS 5.1이 포함되어 있습니다. IIS 5.1을 사용하는 경우 추가 구성 단계를 수행해야 합니다.

마지막으로 Microsoft Windows 2000 및 Microsoft Windows 2000 Professional에는 IIS 5.0이 포함됩니다. IIS 5.0을 사용하는 경우 추가 구성 단계를 수행해야 합니다.

통합 모드 및 클래식 모드

IIS 7.0은 두 가지 요청 처리 모드인 통합 및 클래식을 사용하여 요청을 처리할 수 있습니다. 통합 모드는 더 나은 성능과 더 많은 기능을 제공합니다. 이전 버전의 IIS와의 호환성을 위해 클래식 모드가 포함됩니다.

요청 처리 모드는 애플리케이션 풀에 의해 결정됩니다. 애플리케이션과 연결된 애플리케이션 풀을 확인하여 특정 웹 애플리케이션에서 사용 중인 처리 모드를 확인할 수 있습니다. 다음 단계를 수행합니다.

  1. 인터넷 정보 서비스 관리자 시작
  2. 연결 창에서 애플리케이션을 선택합니다.
  3. 작업 창에서 기본 설정 링크를 클릭하여 애플리케이션 편집 대화 상자를 엽니다(그림 1 참조).
  4. 선택한 애플리케이션 풀을 기록해 둡다.

기본적으로 IIS는 DefaultAppPool클래식 .NET AppPool이라는 두 개의 애플리케이션 풀을 지원하도록 구성됩니다. DefaultAppPool을 선택하면 애플리케이션이 통합 요청 처리 모드에서 실행되고 있습니다. 클래식 .NET AppPool을 선택하면 애플리케이션이 클래식 요청 처리 모드에서 실행됩니다.

IIS가 통합 요청 처리 모드에서 애플리케이션을 실행하도록 구성되어 있음을 보여 주는 애플리케이션 편집 대화 상자의 스크린샷

그림 1: 요청 처리 모드 검색(전체 크기 이미지를 보려면 클릭)

애플리케이션 편집 대화 상자에서 요청 처리 모드를 수정할 수 있습니다. 선택 단추를 클릭하고 애플리케이션과 연결된 애플리케이션 풀을 변경합니다. ASP.NET 애플리케이션을 클래식 모드에서 통합 모드로 변경할 때 호환성 문제가 있음을 인식합니다. 자세한 내용은 다음 문서를 참조하세요.

ASP.NET 애플리케이션이 DefaultAppPool을 사용하는 경우 ASP.NET 라우팅(따라서 MVC ASP.NET)이 작동하도록 추가 단계를 수행할 필요가 없습니다. 그러나 ASP.NET 애플리케이션이 클래식 .NET AppPool을 사용하도록 구성된 경우 계속 읽으면 더 많은 작업을 수행할 수 있습니다.

이전 버전의 IIS에서 ASP.NET MVC 사용

IIS 7.0보다 이전 버전의 IIS에서 ASP.NET MVC를 사용해야 하거나 클래식 모드에서 IIS 7.0을 사용해야 하는 경우 두 가지 옵션이 있습니다. 먼저 경로 테이블을 수정하여 파일 확장자를 사용할 수 있습니다. 예를 들어 /Store/Details와 같은 URL을 요청하는 대신 /Store.aspx/Details와 같은 URL을 요청합니다.

두 번째 옵션은 와일드카드 스크립트 맵이라는 항목을 만드는 것입니다. 와일드카드 스크립트 맵을 사용하면 모든 요청을 ASP.NET 프레임워크에 매핑할 수 있습니다.

웹 서버에 액세스할 수 없는 경우(예: ASP.NET MVC 애플리케이션이 인터넷 서비스 공급자에 의해 호스팅되고 있는 경우) 첫 번째 옵션을 사용해야 합니다. URL의 모양을 수정하지 않고 웹 서버에 액세스할 수 있는 경우 두 번째 옵션을 사용할 수 있습니다.

다음 섹션에서 각 옵션을 자세히 살펴봅합니다.

경로 테이블에 확장 추가

이전 버전의 IIS에서 ASP.NET 라우팅을 사용하는 가장 쉬운 방법은 Global.asax 파일에서 경로 테이블을 수정하는 것입니다. 목록 1의 기본 및 수정되지 않은 Global.asax 파일은 기본 경로라는 하나의 경로를 구성합니다.

목록 1 - Global.asax(수정되지 않음)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    public class GlobalApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

목록 1에 구성된 기본 경로를 사용하면 다음과 같은 URL을 라우팅할 수 있습니다.

/Home/Index

/Product/Details/3

/Product

아쉽게도 이전 버전의 IIS는 이러한 요청을 ASP.NET 프레임워크에 전달하지 않습니다. 따라서 이러한 요청은 컨트롤러로 라우팅되지 않습니다. 예를 들어 URL /Home/Index에 대한 브라우저 요청을 하면 그림 2의 오류 페이지가 표시됩니다.

404 찾을 수 없음 오류를 보여 주는 Microsoft 인터넷 Explorer 창의 스크린샷

그림 2: 404 찾을 수 없음 오류 수신(전체 크기 이미지를 보려면 클릭)

이전 버전의 IIS는 특정 요청만 ASP.NET 프레임워크에 매핑합니다. 요청은 올바른 파일 확장자를 가진 URL에 대한 것이어야 합니다. 예를 들어 /SomePage.aspx에 대한 요청은 ASP.NET 프레임워크에 매핑됩니다. 그러나 /SomePage.htm 대한 요청은 그렇지 않습니다.

따라서 ASP.NET 라우팅이 작동하려면 기본 경로를 수정하여 ASP.NET 프레임워크에 매핑된 파일 확장자를 포함해야 합니다.

이 작업은 라는 registermvc.wsf스크립트를 사용하여 수행됩니다. 의 ASP.NET MVC 1 릴리스에 C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts포함되었지만 ASP.NET 2부터 이 스크립트는 ASP.NET 선물로 이동되었습니다.

이 스크립트를 실행하면 IIS에 새 .mvc 확장이 등록됩니다. .mvc 확장을 등록한 후에는 경로가 .mvc 확장을 사용하도록 Global.asax 파일에서 경로를 수정할 수 있습니다.

목록 2의 수정된 Global.asax 파일은 이전 버전의 IIS에서 작동합니다.

목록 2 - Global.asax(확장으로 수정됨)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",
                "{controller}.mvc/{action}/{id}",
                new { action = "Index", id = "" }
              );

            routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

중요: Global.asax 파일을 변경한 후 ASP.NET MVC 애플리케이션을 다시 빌드해야 합니다.

목록 2에는 Global.asax 파일에 두 가지 중요한 변경 내용이 있습니다. 이제 Global.asax에 정의된 두 개의 경로가 있습니다. 첫 번째 경로인 기본 경로의 URL 패턴은 이제 다음과 같습니다.

{controller}.mvc/{action}/{id}

.mvc 확장을 추가하면 ASP.NET 라우팅 모듈이 가로채는 파일의 형식이 변경됩니다. 이 변경으로 ASP.NET MVC 애플리케이션은 이제 다음과 같은 요청을 라우팅합니다.

/Home.mvc/Index/

/Product.mvc/Details/3

/Product.mvc/

두 번째 경로인 루트 경로는 새로운 경로입니다. 루트 경로에 대한 이 URL 패턴은 빈 문자열입니다. 이 경로는 애플리케이션의 루트에 대해 수행된 요청을 일치시키는 데 필요합니다. 예를 들어 루트 경로는 다음과 같은 요청과 일치합니다.

http://www.YourApplication.com/

경로 테이블을 수정한 후에는 애플리케이션의 모든 링크가 이러한 새 URL 패턴과 호환되는지 확인해야 합니다. 즉, 모든 링크에 .mvc 확장이 포함되어 있는지 확인합니다. Html.ActionLink() 도우미 메서드를 사용하여 링크를 생성하는 경우 변경할 필요가 없습니다.

registermvc.wcf 스크립트를 사용하는 대신 ASP.NET 프레임워크에 직접 매핑되는 새 확장을 IIS에 추가할 수 있습니다. 새 확장을 직접 추가할 때 파일이 있는지 확인 이라는 확인란이 선택되어 있지 않은지 확인합니다.

호스트된 서버

웹 서버에 항상 액세스할 수 있는 것은 아닙니다. 예를 들어 인터넷 호스팅 공급자를 사용하여 ASP.NET MVC 애플리케이션을 호스팅하는 경우 반드시 IIS에 액세스할 수 있는 것은 아닙니다.

이 경우 ASP.NET 프레임워크에 매핑된 기존 파일 확장명 중 하나를 사용해야 합니다. ASP.NET 매핑된 파일 확장자의 예로는 .aspx, .axd 및 .ashx 확장명 등이 있습니다.

예를 들어 목록 3에서 수정된 Global.asax 파일은 .mvc 확장명 대신 .aspx 확장을 사용합니다.

목록 3 - Global.asax(.aspx 확장으로 수정됨)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",
                "{controller}.aspx/{action}/{id}",
                new { action = "Index", id = "" }
              );

            routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );
        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

목록 3의 Global.asax 파일은 .mvc 확장명 대신 .aspx 확장을 사용한다는 사실을 제외하고 이전 Global.asax 파일과 정확히 동일합니다. .aspx 확장을 사용하려면 원격 웹 서버에서 설정을 수행할 필요가 없습니다.

와일드카드 스크립트 맵 만들기

ASP.NET MVC 애플리케이션에 대한 URL을 수정하지 않고 웹 서버에 액세스할 수 있는 경우 추가 옵션이 있습니다. 모든 요청을 웹 서버에 매핑하는 와일드카드 스크립트 맵을 ASP.NET 프레임워크에 만들 수 있습니다. 이렇게 하면 기본 ASP.NET MVC 경로 테이블을 IIS 7.0(클래식 모드) 또는 IIS 6.0과 함께 사용할 수 있습니다.

이 옵션을 사용하면 IIS가 웹 서버에 대해 수행된 모든 요청을 가로챌 수 있습니다. 여기에는 이미지, 클래식 ASP 페이지 및 HTML 페이지에 대한 요청이 포함됩니다. 따라서 와일드카드 스크립트 맵을 ASP.NET 사용하도록 설정하면 성능에 영향을 줍니다.

IIS 7.0에 와일드카드 스크립트 맵을 사용하도록 설정하는 방법은 다음과 같습니다.

  1. 연결 창에서 애플리케이션 선택
  2. 기능 보기가 선택되어 있는지 확인합니다.
  3. 처리기 매핑 단추를 두 번 클릭합니다.
  4. 와일드카드 스크립트 맵 추가 링크를 클릭합니다(그림 3 참조).
  5. aspnet_isapi.dll 파일의 경로를 입력합니다(PageHandlerFactory 스크립트 맵에서 이 경로를 복사할 수 있음).
  6. 이름 MVC를 입력합니다.
  7. 확인 단추를 클릭합니다.

와일드카드 스크립트 맵 추가 대화 상자를 보여주는 인터넷 정보 서비스 관리자 7포인트 0 창의 스크린샷

그림 3: IIS 7.0을 사용하여 와일드카드 스크립트 맵 만들기(전체 크기 이미지를 보려면 클릭)

IIS 6.0을 사용하여 와일드카드 스크립트 맵을 만들려면 다음 단계를 수행합니다.

  1. 웹 사이트를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.
  2. 홈 디렉터리 탭 선택
  3. 구성 단추를 클릭합니다.
  4. 매핑 탭 선택
  5. 삽입 단추를 클릭합니다(그림 4 참조).
  6. aspnet_isapi.dll 경로를 실행 파일 필드에 붙여넣습니다(.aspx 파일에 대한 스크립트 맵에서 이 경로를 복사할 수 있음).
  7. 파일이 있는지 확인이라는 확인란의 선택을 취소합니다.
  8. 확인 단추를 클릭합니다.

슬래시 애플리케이션 확장 매핑 추가 대화 상자를 보여주는 인터넷 정보 서비스 6포인트 0 창의 스크린샷

그림 4: IIS 6.0을 사용하여 와일드카드 스크립트 맵 만들기(전체 크기 이미지를 보려면 클릭)

와일드카드 스크립트 맵을 사용하도록 설정한 후에는 루트 경로가 포함되도록 Global.asax 파일의 경로 테이블을 수정해야 합니다. 그렇지 않으면 애플리케이션의 루트 페이지에 대한 요청을 하면 그림 5의 오류 페이지가 표시됩니다. 목록 4에서 수정된 Global.asax 파일을 사용할 수 있습니다.

누락된 루트 경로 오류를 보여주는 Microsoft 인터넷 Explorer 창의 스크린샷: 들어오는 요청이 경로와 일치하지 않습니다.

그림 5: 루트 경로 오류 누락(전체 크기 이미지를 보려면 클릭)

목록 4 - Global.asax(루트 경로로 수정됨)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1
{
 
    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { action = "Index", id = "" }
              );

            routes.MapRoute(
              "Root",
              "",
              new { controller = "Home", action = "Index", id = "" }
            );

        }

        protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }
}

IIS 7.0 또는 IIS 6.0에 대해 와일드카드 스크립트 맵을 사용하도록 설정한 후에는 다음과 같은 기본 경로 테이블로 작동하는 요청을 수행할 수 있습니다.

/

/Home/Index

/Product/Details/3

/Product

요약

이 자습서의 목표는 이전 버전의 IIS(또는 클래식 모드에서 IIS 7.0)를 사용할 때 ASP.NET MVC를 사용하는 방법을 설명하는 것이었습니다. 이전 버전의 IIS에서 작동하도록 ASP.NET 라우팅을 가져오는 두 가지 방법인 기본 경로 테이블 수정 또는 와일드카드 스크립트 맵 만들기에 대해 설명했습니다.

첫 번째 옵션을 사용하려면 ASP.NET MVC 애플리케이션에서 사용되는 URL을 수정해야 합니다. 이 첫 번째 옵션의 매우 중요한 이점 중 하나는 경로 테이블을 수정하기 위해 웹 서버에 액세스할 필요가 없다는 것입니다. 즉, 인터넷 호스팅 회사에서 ASP.NET MVC 애플리케이션을 호스팅하는 경우에도 이 첫 번째 옵션을 사용할 수 있습니다.

두 번째 옵션은 와일드카드 스크립트 맵을 만드는 것입니다. 이 두 번째 옵션의 장점은 URL을 수정할 필요가 없다는 것입니다. 이 두 번째 옵션의 단점은 ASP.NET MVC 애플리케이션의 성능에 영향을 줄 수 있다는 것입니다.