본문 바로가기

Spring

Spring) Filter, Interceptor, AOP 차이


Filter

// 요청과 응답을 거른 뒤 정제하는 역할

 

일반적으로 Spring과 무관하게 전역적으로 처리해야되는 작업을 처리할 때 사용

Filter는 Spring이 실행 되기전 실행되며 톰캣과 같은 웹 컨테이너에서 처리를 해주게 된다.

- 공통된 보안 및 인증/인가 작업

- 이미지/데이터 압축 및 문자열 인코딩 변환 처리

- Spring과 분리되는 기능

등의 처리에 적합하다.

또한 자원의 처리가 끝난 후 응답내용에 대홰서도 변경하는 처리를 할 수 있다.

보통 web.xml 에 등록하여 인코딩 변환 처리, xss 방어 등의 요청에 대한 처리로 사용된다.

 

필터 실행 메서드

- init() - 필터 인스턴스 초기화

- doFilter() - 전/후 처리

- destroy() - 필터 인스턴스 종료


Interceptor

//요청에 대한 작업 전/후에 가로채는 역할

 

필터는 스프링 컨텍스트 외부에 존재하여 스프링과 무관한 자원에 대해 동작

인터셉터는 스프리으이 DispatcherServlet 이전에 실행되는데 필터가 동작하도록 지정된 자원 앞단에서 요청내용을 변경하거나 여러가지 체크를 수행할 수 있다.

-로그인, 권한 체크

-프로그램 실행 시간 계산 작업 로그 확인

등의 작업을 처리에 적합하다.

인터셉터는 여러 개를 사용할 수 있다.

 

인터셉트 실행 메서드

preHandler() - 컨트롤러 메서드가 실행되기 전

postHanler() - 컨트롤러 메서드 실행직 후 view페이지 렌더링 되기 전

afterCompletion() - view페이지가 렌더링 되고 난 후

 


AOP

객체지향 프로그래밍을 했을 때 중복을 줄이기 위해 종단면(관점)에서 바라보고 처리

Interceptor와 filter는 URL로 대상을 구분하여 걸러내야되지만 AOP는 URL, 파라미터, 어노테이션등 PointCut이 지원하는 다양한 방법으로 대상을 지정 할 수 있다.

이 때문에 비지니스 로직의 메서드 실행 전, 후 단위까지 핸들링 할 수 있다.

로깅, 트랜잭션, 에러처리 등의 비지니스 단의 메서드에서 좀더 세밀하게 조정하고 싶을 때 사용

AOP는 Filter나 인터셉터와는 달리 메소드 전후의 지점에 자유롭게 설정이 가능하다.

 

AOP의 PointCut

@Before - 대상 메서드의 수행 전

@After - 대상 메서드의 수행 후

@After-returning - 대상 메서드의 정상적인 수행 후

@After-throwing - 예외 발생 후 

@Around : 대상 메서드의 수행 전/후


세 가지 방식 모두 공통 업무를 프로그램 흐름에 추가하여 자동으로 처리하는 방법으로 공통처리를 위해 활용된다.

 

 

Filter는 Spring Context 외부에 존재하여 스프링과 무관한 자원에 대해 동작하지만 인터셉터는 스프링의 DispatcherServlet이 컨트롤러를 호출하기 전,후로 끼어들기 때문에 스프링 컨텍스트 내부에서 컨트롤러에 관한 요청과 응답에 대해 처리한다.

 

인터셉터와 필터는 HttpServletRequest,HttpServletResponse를 파라미터로 사용하지만

AOP는 joinpoint나 ProceedingJoinPoint 등을 활용하여 호출한다.

AOP는 Joinpoint를 이용하여 메소드의 매개변수에만 접근 할 수 있지만 컨트롤러의 메소드가 HttpServletRequest를 사용한다면 HandlerInterceptor와 동일할 수 있다.

따라서 요청과 응답에 항상 무엇인가를 수행해야 된다면  AOP보단 HandlerInterceptor를 사용하는것이 더 좋다.

 


참고자료

 

https://kimhyeong.tistory.com/61

https://velog.io/@miot2j/Spring-Filter-Interceptor-AOP-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-AOP%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC-Logging%EC%9D%84-%EA%B5%AC%ED%98%84%ED%95%9C-%EC%9D%B4%EC%9C%A0



Calendar
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
더보기
Archives
Visits
Today
Yesterday