[ASP.NET MVC5] Action Filter의 개념과 활용
ASP.NET MVC에서 Action Filter는 컨트롤러의 액션 메서드 실행 전후에 특정 작업을 수행할 수 있는 강력한 기능이다.
이번 포스팅에서는 Action Filter의 개념, 주요 기능, 그리고 활용 방법을 간단한 예제와 함께 알아보고자 한다.
1. Action Filter란?
Action Filter는 컨트롤러의 액션 메서드 실행 전후에 동작하는 로직을 캡슐화하여 제공하는 특수한 클래스이다.
이를 통해 공통 작업을 중앙에서 관리하고 코드의 재사용성을 높일 수 있다.
2. 주요 특징
2.1 액션 메서드 실행 전후 작업 관리
Action Filter는 다음과 같은 단계에서 작업을 수행할 수 있다:
- OnActionExecuting: 액션 메서드가 실행되기 전에 호출된다. (예: 사용자 인증, 요청 데이터 검증)
- OnActionExecuted: 액션 메서드가 실행된 후 호출된다.(예: 로깅, 에러처리)
2.2 결과(Result) 처리 전후 작업
결과 반환 단계에서도 작업을 처리할 수 있다.
- OnResultExecuting: 결과(ViewResult 등)가 반환되기 전에 호출된다. (예: 응답 데이터 수정)
- OnResultExetued: 결과 반환 이후 호출된다.(예: 캐싱, 최종 로깅)
2.3 재사용성
여러 컨트롤러와 액션에서 공통적으로 필요한 로직(예: 인증, 로깅 등)을 필터로 구현하여 코드 중복을 줄일 수 있다.
3. Action Filter의 주요 사용 사례
1. 사용자 인증 및 권한 확인: 요청이 들어오기 전에 사용자의 권한을 확인하고, 접근이 불가한 경우 리다이렉트 처리
2. 로깅: 모든 액션 호출 시 요청 및 응답 데이터를 기록
3. 캐싱: 결과 데이터를 캐싱하여 성능 최적화
4. 간단한 예제
4.1 필터 구현
아래는 로깅을 처리하는 간단한 Action Filter의 예제이다.
public class LogginFilterAttribute: ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// 액션 실행 전에 로그 기록
var controller = filterContext.Controller.ToString();
var action = filterContext.ActionDescriptor.ActionName;
Console.WriteLine($"Executing: {controller} -> {action}");
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// 액셜 실행 후 로그 기록
Console.WriteLine("Action executed successfully.");
base.OnActionExecuted(filterContext);
}
}
4.2 필터 적용 방법
컨트롤러 전체에 적용
컨트롤러의 모든 액션에 필터를 적용하려면 클래스에 어트리뷰트를 추가한다.
[LogginFilter]
public class HomeController: Controller
{
public ActionResult Index()
{
return View();
}
}
특정 액션에만 적용
특정 액션에만 필터를 적용할 수도 있다.
public class HomeController: Controller
{
[LogginFilter]
public ActionResult Details()
{
return View();
}
}
5. 결론
Action Filter는 ASP.NET MVC의 핵심 기능으로, 다음과 같은 이점을 제공한다.
- 공통 로직 관리: 컨트롤러와 액션에 반복적으로 사용되는 로직을 중앙화한다.
- 유지보수성 향상: 코드 중복을 제거하고 변경 사항을 쉽게 관리한다.
- 보안과 성능 최적화: 인증, 권한 확인, 캐싱 등을 손쉽게 구현한다.
이러한 이유로 Action Filter는 ASP.NET MVC 프로젝트에서 필수적으로 활용되는 기술 중 하나이다. 필요에 따라 커스텀 필터를 작성해 보안을 강화하고 애플리케이션의 가독성과 유지보수성을 높일 수 있다.
#References