ASP.NET MVC의 라우팅(Routing) 모듈은 브라우저에서 들어오는 요청을 특정 MVC 컨트롤러 액션에 매핑하는 역할을 담당합니다. ASP.NET MVC 애플리케이션이 시작되면 프레임워크의 라우트 테이블(Route Table)에 하나 이상의 패턴을 등록하여, 해당 패턴과 일치하는 요청이 들어왔을 때 라우팅 엔진이 어떻게 처리해야 하는지 알려줍니다. 런타임 시 라우팅 엔진은 요청을 받으면 해당 요청의 URL을 등록된 URL 패턴과 비교하고, 일치하는 패턴에 따라 적절한 응답을 반환합니다.
라우팅(Routing)의 등장 배경
ASP.NET에 라우팅이 도입된 목적은 각 URL을 물리적인 파일에 일일이 매핑해야 하는 번거로움을 없애기 위함입니다. 라우팅을 사용하면 요청 핸들러에 매핑되는 URL 패턴을 자유롭게 정의할 수 있습니다. System.Web.Routing은 MVC 프레임워크에서 사용될 뿐만 아니라 ASP.NET Dynamic Data에서도 활용됩니다. MVC 프레임워크는 라우팅을 활용해 들어온 요청을 컨트롤러로 전달하며, 라우트 정의는 애플리케이션의 Global.asax 파일에서 작성합니다.
MVC 애플리케이션의 기본 라우트 설정 코드
public class RouteConfig{
public static void RegisterRoutes(RouteCollection routes){
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}위 코드에서 볼 수 있듯이, 기본 라우트는 {controller}/{action}/{id} 형태의 URL 패턴을 사용하며, 세그먼트가 생략될 경우를 대비해 기본값(defaults)도 함께 지정합니다. 그렇다면 이 기본 라우트를 구성하는 세 가지 핵심 요소는 무엇일까요?
1. 라우트 이름(Route Name)
라우트는 핸들러에 매핑되는 URL 패턴입니다. 여기서 핸들러란 MVC 애플리케이션에서 요청을 처리하는 컨트롤러를 의미합니다. 라우트 이름은 특정 라우트를 참조할 때 사용하는 고유 식별자 역할을 하며, URL 생성이나 특정 라우트 지정 시 유용하게 활용됩니다.
2. 제약 조건(Constraints)
제약 조건은 URL 패턴에 적용되는 규칙들의 집합으로, 라우트가 매칭할 URL의 범위를 더욱 구체적으로 한정합니다. 예를 들어 id 매개변수가 숫자여야 한다는 제약을 걸면, 숫자가 아닌 값이 포함된 URL은 해당 라우트와 매칭되지 않습니다.
3. URL 패턴(URL Pattern)
URL 패턴에는 리터럴 값(literal values)과 변수 자리 표시자(variable placeholders)가 포함될 수 있으며, 슬래시(/) 문자로 구분된 URL의 각 세그먼트에 배치됩니다.
요청이 발생하면 URL은 세그먼트와 자리 표시자 단위로 파싱되고, 추출된 변수 값들은 요청 핸들러에 전달됩니다. 이 과정은 쿼리 스트링(query string)의 데이터를 파싱해서 핸들러로 넘기는 방식과 유사합니다. 두 경우 모두 변수 정보가 URL에 포함되어 키-값 쌍(key-value pair) 형태로 핸들러에 전달되지만, 차이점도 있습니다. 쿼리 스트링은 키와 값이 모두 URL에 노출되는 반면, 라우트에서는 키가 URL 패턴에 정의된 자리 표시자 이름이고 URL에는 값만 포함됩니다.
기본값(Defaults)
라우트를 정의할 때 각 매개변수에 대한 기본값을 지정할 수 있습니다. 기본값(defaults)은 기본 라우트 값을 담고 있는 객체로, Controller(컨트롤러), Action(액션), Id(식별자)라는 세 가지 세그먼트로 구성됩니다.
URL에 컨트롤러와 액션 메서드가 명시적으로 포함되어 있다면 해당 컨트롤러와 액션이 매칭됩니다. 반대로 URL에서 컨트롤러와 액션 정보가 생략된 경우에는 기본 라우트에 설정된 값에 따라, 즉 Home 컨트롤러의 Index 액션 메서드가 자동으로 호출됩니다. 덕분에 사용자는 https://example.com/처럼 최상위 URL만 입력해도 정상적으로 홈 페이지에 접근할 수 있습니다.