사용자 정의 라우트(Route) 만들기
이 자습서에서는 ASP.NET MVC 어플리케이션에 사용자 정의 라우트(custom route)를 추가하는 방법을 알아봅니다. 또한, Global.asax 파일 안에 있는 기본 라우트 테이블을 수정하여 사용자 정의 라우트로 변경하는 방법에 대해서도 알아볼 예정입니다
간단한ASP.NET MVC 어플레케이션의 경우에는 기본 라우트 테이블만으로도 사용하는 데 문제가 없겠지만, 특수한 경로 처리가 필요한 상황이라면 사용자 정의 라우트를 만들어 사용할 필요가 있습니다.
자, 여러분이 블로그를 만들고 있다고 가정해 봅시다. 아마 여러분은 브라우저 요청의 일부로 (매개변수로서) 아래의 URL처럼 날짜를 고려해 볼 수있습니다.
/Archive/12-25-2009
이런 요청이 들어올 때, 여러분은 2009년 12월 25일에 해당하는 블로그 포스트를 반환하고 싶을 것입니다. 바로 이런 종류의 요청을 처리하기 위해서 사용자 정의 라우트가 필요합니다.
목록 1에 있는 Global.asax 파일은 "/Archive/entry date" 형태의 요청을 처리하는, Blog 라고 이름 붙인 새로운 사용자 정의 라우트를 보여주고 있습니다.
목록 1 - Global.asax (사용자 정의 라우트를 적용)
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(
"Blog", // 라우트 이름
"Archive/{entryDate}", // URL (매개변수 포함)
new { // 매개변수 기본값
controller = "Archive",
action = "Entry"
}
);
routes.MapRoute(
"Default", // 라우트 이름
"{controller}/{action}/{id}", // URL (매개변수 포함)
new { // 매개변수 기본값
controller = "Home",
action = "Index",
id = ""
}
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
라우트 테이블에 항목을 추가하는 순서는 대단히 중요합니다. 새로 정의한 Blog 경로는 기존에 존재하던 기본 라우트 (Default route) 보다 앞 쪽에 추가되어 있습니다. 이 순서를 거꾸로 한다면 기본 라우트가 항상 호출되어 사용자 정의 라우트 대신 사용되므로 새로 추가한 정의가 사용되는 일은 생기지 않을 겁니다.
사용자 정의 라우트인 Blog는 브라우저 요청이 /Archive/로 시작하는 경우에 매칭되어 사용됩니다. 아래와 같은 형식이 그 예입니다.
/Archive/12-25-2009
/Archive/10-6-2004
/Archive/apple
이 사용자 정의 라우트는 /Archive/로 시작되는 브라우저 요청을 Archive 컨트롤러와 연결하고 Entry() 메서드를 실행합니다. Entry() 메서드가 호출될 때, URL의 일부인 입력 날짜는 entryDate라는 이름의 매개변수로 전달됩니다.
목록 2 - ArchiveController.cs
using System;
using System.Web.Mvc;
namespace MvcApplication1.Controllers
{
public class ArchiveController : Controller
{
public string Entry(DateTime entryDate)
{
return "You requested the entry from " + entryDate.ToString();
}
}
}
목록 2에서 Entry() 메서드는 DateTime 을 매개변수로 받습니다. MVC 프레임워크는 URL의 입력 날짜를 액션에 정의된 데이터 타입(예제 경우는 DateTime)으로 자동 변환해줄 만큼 충분히 똑똑합니다. 그러나, DateTime으로 변환될 수 없는 경우라면 그림 1과 같은 에러가 발생할 것입니다.
그림 1 - 매개변수 변환 시 오류

출처 : http://i1.asp.net/asp.net/images/mvc/23/image002.jpg
요약
이 자습서의 목표는 사용자 정의 라우트를 생성하는 방법을 보여주는 것이었습니다. Global.asax 파일에 사용자 정의 라우트를 추가하였으며, 그는 블로그 엔트리를 찾는 데 사용 되었습니다. 요약하자면, 날짜를 사용하는 브라우저 요청의 형태를 정의하고 어떻게 ArchiveController와 연결해서 Entry() 액션이 실행되는지를 알아 보았습니다.
역자 류지형은 현대자동차 영국법인에서 Application Architect로 근무하고 있습니다. SAP ERP, Oracle’s Siebel CRM 등의 기업 솔루션을 운영하며 마이크로소프트 제품과의 조화를 꾀하고 있습니다. 한국에서는 인브레인에 재직하며 닷넷을 시작했고 여전히 ASP.NET을 주 기술로 사용하고 있습니다.
Nikon D7000을 사랑하는 아빠진사이며 Photoshop에 눈뜬 후 iMac을 장만하기 위해 핑계 거리를 찾다보니 사과 세계에도 관심을 갖고 있습니다. 글로서 도움 되는 일이 행복하며 아이와 함께하는 유럽여행을 iBook 으로 출판하는 것이 사추기에 정한 인생의 목표입니다.