ASP.NET/ASP.NET MVC2011.06.23 14:28

10_1.png

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 에서도 같은 코드를 삽입하였는데 , 이로써 처리 프로세스에 대한 결과를 볼 수 있을것이다.

 

10_2.png
[그림 : 실행화면]

 

해당 그림과 같이 MVC 파이프라인이 정상적으로 실행된 것을 알 수 있다.

 

 

Summary
이번장에서는 MVC의 Controller 와 View 의 처리프로세스를 살펴보고 이를 핸들링 할수 있는 강력한 장치인 ActionFilter 에 대해서 알아보았다. 이 정도까지만 하더라도 MVC를 다루는데는 큰 어려움이 없을것이다. 다음장에서는 이 ActionFilter 를 좀 더 널리 사용할수 있는 방법과 다른 메서드를 전역적으로 다루기 위한 Global.asax 에 대해서 알아보도록 하겠다.

저작자 표시 비영리 변경 금지
신고
Posted by Mr.Fear