Filter / Interceptor / AOP 이 3가지의 정의와 차이점

홍당무·2023년 2월 23일
0

공통업무

Filter, Interceptor, AOP 는 Java 웹 개발시 공통 부분을 빼서 따로 관리하기 위한 기능들이다.

  • Interceptor와 Filter는 Servlet 단위에서 실행된다. <> 반면 AOP는 메소드 앞에 Proxy패턴의 형태로 실행된다.
  • 실행순서를 보면 Filter가 가장 밖에 있고 그안에 Interceptor, 그안에 AOP가 있는 형태이다.
  • 따라서 요청이 들어오면 Filter → Interceptor → AOP → Interceptor → Filter 순으로 거치게 된다.

Filter

요청과 응답을 거른 뒤 정제하는 역할을 한다.

서블릿 필터는 dispatcherServlet 이전에 실행이 되는데 필터가 동작하도록 지정된 자원의 앞단에서 요청 내용을 변경하거나, 여러가지 체크를 수행할 수 있다.

또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수가 있다. 보통 web.xml에 등록하고, 일반적으로 인코딩 변환 처리, XSS방어 등의 요청에 대한 처리로 사용된다.

실행메서드 
 init() : 필터 인스턴스 초기화
 dofilter() : 전/후 처리
 destroy() : 필터 인스턴스 종료

Interceptor

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

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

스프링의 모든 빈 객체에 접근할 수 있으며 인터셉터는 여러 개를 사용할 수 있고 로그인 체크, 권한 체크, 프로그램 실행시간 계산작업 로그확인 등의 업무처리를 할 수 있다.

실행메서드
 preHandler() : 컨트롤러 메서드가 실행되기 전
 postHanler() : 컨트롤러 메서드 실행직 후 view페이지 렌더링 되기 전
 afterCompletion() : view페이지가 렌더링 되고 난 후

AOP

OOP를 보완하기 위해 나온 개념

기존의 OOP에서 기능별로 클래스를 분리했음에도 불구하고, 여전히 로그나 트랜잭션, 자원해제, 성능테스트 메서드처럼 공통적으로 반복되는 중복코드가 발생하는 단점이 생긴다.

이를 해결할 수 있도록 개발 코드에서는 비즈니스 로직에 집중하고, 실행 시 비즈니스 로직의 앞과 뒤에서 원하는 지점에 해당 공통 관심사를 수행할 수 있게 하면서 중복 코드를 줄일 수 있는 방식이 바로 AOP 방식이다.

AOP에 대한 설명은 이 전에 글을 참고한다.

홍당무 AOP

profile
공부하는 백엔드 개발자

0개의 댓글

관련 채용 정보