Spring Filter, Interceptor, AOP

MinHo·2025년 4월 21일

Spring

목록 보기
12/12

개념 정리를 해보려고 한다.


공통 부분은 따로 빼서 관리하는게 좋다.

공통 업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법이 3가지 있다.

  • Filter
  • Interceptor
  • AOP

차이점

  1. 적용시 시점이 다르다.
    Filter -> Interceptor -> AOP

  2. 적용 방식이 다르다.
    Filter : web.xml , Interceptor: servlet-context.xml

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

실행 순서
1. 서버를 실행시킨 후 서블릿이 올라오는 동안 init이 실행되고, 그 후 doFilter가 실행된다.
2. 컨트롤러에 들어가기 전 preHandler가 실행되낟.
3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.
4. 서블릿 종료시 destroy가 실행된다.


각각의 개념 정리

Spring Filter

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

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

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

보통 web.xml에 등록하고, 일반적으로 인코딩, XSS방어 등의 처리로 사용.

필터의 실행 메서드

  1. init() : 필터 인스턴스 초기화
  2. doFilter() : 전/후 처리
  3. destroy() : 필터 인스턴스 종료

특징

  1. 클라이언트 요청정보를 제공하는 객체를 정의 - ServletRequest 객체
  2. 서블릿 컨테이너는 ServletRequest 객체를 생성하고 이를 서블릿의 Service 메소드에 인수로 전달한다.
  3. ServletRequest 객체는 매개 변수 이름과 값, 속성 및 입력 스트림을 포함하는 데이터를 제공한다.
  4. 요청과 응답을 함께 다룰 수 있다.
  5. doFilter 메소드의 chain.doFilter(request,response) 를 기점으로 전/후 처리가능.

Interceptor(인터셉터)

요청에 대한 작업 전/후로 가로챈다고 보면 된다.

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

스프링의 모든 빈 객체에 접근할 수 있다.

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

인터셉터의 실행메서드

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

특징

  1. ServletRequest 인터페이스를 확장하여 HTTP 서블릿에 대한 요청 정보를 제공한다. 즉 , ServletRequest의 자식 Interface가 HttpServletRequest이다.
  2. 서블릿 컨테이너는 HttpServletRequest 객체를 생성하고 이를 서블릿의 서비스 메소드 (doGet, doPost등)에 인수로 전달
  3. 요청 파라미터, HTTP 헤더, 세션 및 쿠키 데이터, 요청에 사용된 URL 등을 가져올 수 있다.
  4. Spring에서 실행될 컨트롤러 빈 오브젝트, 컨트롤러가 돌려주는 ModelAndView, 발생한 예외 등을 제공받을수 있음.
  5. servlet-context.xml에 정의

AOP

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

객체 지향의 프로그래밍을 했을 때 중복을 줄일 수 없는 부분을 줄이기 위해 종단면(관점)에서 바라보고 처리한다.

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

Interceptor, Filter와 달리 메서드 전후의 지점에서 자유롭게 설정이 가능하다.

Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.

AOP의 Advice와 HandlerInterceptor의 가장 큰 차이는 파라미터의 차이다.

Advice의 경우 JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출한다.

반면 HandlerInterceptor는 Filter와 유사하게 HttpServletRequest, HttpServletResponse를 파라미터로 사용한다.


정리

Filter

  • 전체적인 Request에서 처리가 필요할 때

Interceptor

  • 세션 및 쿠키 체크하는 http 프로토콜 단위로 처리해야 하는 업무가 있을 때
  • 로그인 세션체크 등등

AOP

  • 비지니스 단에서 세밀하게 조정하고 싶을때
  • 로깅, 트랜잭션, 에러처리 등
profile
Keep going

0개의 댓글