ASP.NET 과 같이 MVC도 내부적인 파이프라인이 존재한다. 그런데 MVC는 ASP.NET보다는 조금더 단순하다. MVC는 위와 같이 오직 4단계로된 파이프라인이 존재하며 , 이 사이에 개발자가 원하는 코드를 삽입할수 있다. 이 처리과정은 Controller 와 View의 처리 프로세스가 분리되어 있기 때문인데 이로써 코드를 더 단순화 시킬수 있고 , 사용자가 원하는 처리를 삽입하기도 더 쉬워진다.
OnActionExecuting : 컨트롤러에서 해당 액션이 호출되기 전에 호출되는 이벤트이다. 해당 이벤트에서는 사용자가 브라우저를 통해서 호출하는 명령값을 확인할수 있고, 원하지 않는 코드가 삽입되었을때에 올바른 처리를 할수 있다. 이곳에서 주로 처리가 이루어지는 부분은 , 사용자 권한 감시등이 이루어 질수 있다.
OnActionExecuted : 해당 이벤트는 Action 메서드가 처리된 이후에 호출되는 이벤트이다. 이 이후에는 View 를 렌더링 하기전에 해야할 일들을 처리할수 있다. Action 이 처리된 후 , 결과값에 대한 캐싱값을 만들거나 ACtion에서의 Error 핸들링 등을 할수 있다.
OnResultExcuting : 해당 이벤트는 View가 렌더링 되면서 발생하는 이벤트이다.
OnResultExecuted : 해당 이벤트는 View가 렌더링 되고 난 후에 발생되는 이벤트이다. 만약 에러처리나 권한 검사등을 이곳에서 실행하게 된다고 하더라도 , 이미 결과 값이 만들어 졌기 때문에 해당 페이지가 사용자에게 노출될수 있다.
그런데 이 파이프라인에서 우리가 이벤트를 가져오기는 약간 곤란한 면이 있다. Action은 Method 이기 때문에 ASP.NET 처럼 이벤트를 하나하나 삽입할수 없다는 문제가 그것인데 , 그렇기 때문에 MVC에서는 ActionFilter 를 삽입해서 해당 이벤트를 핸들링 할수 있다. 이번 예제에서는 실제 ActionFilter를 작성해보면서 실질적인 파이프라인을 살펴보도록 하겠다.
public class PipelineFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("OnActionExecuting<br/><br/>");
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("OnActionExecuted<br/><br/>");
base.OnActionExecuted(filterContext);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
filterContext.HttpContext.Response.Write("OnResultExecuting<br/><br/>");
base.OnResultExecuting(filterContext);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
filterContext.HttpContext.Response.Write("OnResultExecuted<br/><br/>");
base.OnResultExecuted(filterContext);
}
}
[코드 ActionResult 에 코드 삽입]
[PipelineFilter]
public ActionResult Index()
{
HttpContext.Response.Write("ActionResult Executing<br/><br/>");
return View();
}
[코드 Index ActionResult 작성]
위의 코드에서는 각각의 처리과정의 끝에 해당 이벤트에 대한 단계를 보여주는 String 을 삽입하였다. 마찬가지로 Index 에서도 같은 코드를 삽입하였는데 , 이로써 처리 프로세스에 대한 결과를 볼 수 있을것이다.
[그림 : 실행화면]
해당 그림과 같이 MVC 파이프라인이 정상적으로 실행된 것을 알 수 있다.
Summary
이번장에서는 MVC의 Controller 와 View 의 처리프로세스를 살펴보고 이를 핸들링 할수 있는
강력한 장치인 ActionFilter 에 대해서 알아보았다. 이 정도까지만 하더라도 MVC를 다루는데는 큰 어려움이 없을것이다. 다음장에서는 이
ActionFilter 를 좀 더 널리 사용할수 있는 방법과 다른 메서드를 전역적으로 다루기 위한 Global.asax 에 대해서 알아보도록
하겠다.