웹 페이지에서 가져오는 데이터가 많거나 데이터베이스의 접근량이 많을수록 데이터베이스는 많은 요청을 받게 되고 그로 인해 DB는 많은 부하를 받게 됩니다. 특히나 , 포털사이트의 메인페이지 같은경우 이러한 요청으로 인해 문제가 많이 발생하게 되는데요 , 대부분의 경우 이러한 문제를 캐싱을 통해서 해결하게 됩니다. 캐싱은 크게 클라이언트 캐싱과 서버측 캐싱이 있는데 , 서버쪽 캐싱은 서버에 데이터베이스에서 가져온 객체를 저장하는 방식으로 , MVC뿐 아니라 많은 ASP.NET 솔루션에서 구현이 가능합니다. 그에 비해 클라이언트 캐싱은 주로 header 값에 cashing 을 추가하는 형태로 구현을 하게 되는데요 이번장에서는 클라이언트 캐싱을 ActionFilter 로 구현하는 예제를 소개해 드리도록 하겠습니다.

 

 

public class CacheAttribute : ActionFilterAttribute

{

    /// <summary>

    /// Gets or sets the cache duration in seconds. The default is 10 seconds.

    /// </summary>

    /// <value>The cache duration in seconds.</value>

    public int Duration

    {

        get;

        set;

    }

 

    public CacheAttribute()

    {

        Duration = 10;

    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)

    {

        if (Duration <= 0) return;

 

        HttpCachePolicyBase cache = filterContext.HttpContext.Response.Cache;

        TimeSpan cacheDuration = TimeSpan.FromSeconds(Duration);

 

        cache.SetCacheability(HttpCacheability.Public);

        cache.SetExpires(DateTime.Now.Add(cacheDuration));

        cache.SetMaxAge(cacheDuration);

        cache.AppendCacheExtension("must-revalidate, proxy-revalidate");

    }

}

 

  

ActionFilter 는 ActionFilterAttribute 를 상속받아 구현되게 됩니다. 이 또한 Attribute이기 기존 C#에서 구현할수 있는 모든 Attribute 의 기능이 사용 가능 합니다. 이번 캐싱 예제에서는 Duration을 이용해서, 최대 캐싱될수 있는 초 범위를 설정을 하였습니다.
이제 예제를 위한 Action을 생성해 보도록 하겠습니다.

 

 

public ActionResult TestView()

{

    ViewBag.Test = DateTime.Now.ToString();

    return View();

}

 

 

간단하게 ViewBag.Test 값에 id를 넘겨주는 예제입니다.


 20_1.png
현재 캐시가 설정되어 있지 않은 화면입니다.

이제 ActionFilter를 적용해보도록 하겠습니다.

 

 

[Cache(Duration=50)]

public ActionResult TestView()

{

    ViewBag.Test = DateTime.Now.ToString();

    return View();

}

 


Attribute 에서 Duration 을 설정할수 있습니다. 이번 예제에서는 50초로 설정하도록 하겠습니다.

 

20_2.png
헤더에서 정상적으로 캐싱이 반영된 것을 확인할수 있습니다.

 

Summary
MVC는 언뜻 보면 허술하고 할 것이 많이 보이는 프레임워크로 치부될 수 있습니다. 그러나 이곳에 있는 기능을 속속들이 살펴보게 되면 , 기존 ASP.NET Classic 보다 더 쉽게 개발이 가능하며 또한 유동적 프레임워크라는 것을 발견 하실 수 있을 것 입니다.

 

 제가 준비한 강좌는 여기까지지만 , MVC의 유용한 기능은 아직도 많이 있다는 것을 기억하시기 바랍니다. 게다가 아직도 계속 발전하고 있습니다. 앞으로의 트렌드 에도 계속 발맞추고 있는 MVC와 함께 새로운 웹 개발의 즐거움에 빠져보시기 바랍니다.




ASP.NET MVC3 시리즈 강좌 리스트
[ASP.NET MVC3강좌] 1. MVC(Model- View – Controller) 란 무엇인가.
[ASP.NET MVC3강좌] 2. MVC 환경 세팅
[ASP.NET MVC3강좌] 3. HelloWorld MVC
[ASP.NET MVC3강좌] 4. Layout , Partial Page
[ASP.NET MVC3강좌] 5. Model 을 View에서 표현하기
[ASP.NET MVC3강좌] 6. MVC의 매력적인 기능 스캐폴딩!(With EF)
[ASP.NET MVC3강좌] 7. 유효성 검사
[ASP.NET MVC3강좌] 8. ModelBinder
[ASP.NET MVC3강좌] 9. MVC ActionResult 종류 살펴보기
[ASP.NET MVC3강좌] 10. MVC 처리 프로세스 & ActionFilter
[ASP.NET MVC3강좌] 11. Global.asax
[ASP.NET MVC3강좌] 12. (번외편) Repository Pattern
[ASP.NET MVC3강좌] 13. MEF(Managed Extensibility Framework) in MVC
[ASP.NET MVC3강좌] 14. Javascript in MVC
[ASP.NET MVC3강좌] 15. Javascript Intellicense in Visual Studio
[ASP.NET MVC3강좌] 16. JSON in MVC - 1
[ASP.NET MVC3강좌] 17. JSON in MVC - 2
[ASP.NET MVC3강좌] 18. HTML5 in MVC
[ASP.NET MVC3강좌] 19. MVC Tips 1 - HandleUnknownAction
[ASP.NET MVC3강좌] 20. MVC Tips 2 - Cache ActionFilter





profile

ASP.NET MVP 2009~2011