Home /Spring/ AOP, Interceptor, Filter
Post
Cancel

/Spring/ AOP, Interceptor, Filter



AOP, Interceptor, Filter


웹 개발을 하다 보면 실제 비즈니스 로직이 호출되기 이전, 이후에 공통적으로 처리해야 할 기능들이 존재하는데
대표적인 예로 Logging, 인증, 인가, 인코딩 변환 등등이 있다.

공통적인 기능의 코드를 모든 모듈 및 페이지에서 작성하게 되면
코드의 중복이 발생하게 되고 MSA 기반에서는 각 모듈마다 다른 코드가 작성되어 관리가 힘들 수 있다.

따라서 공통 기능을 모아서 처리 할 수 있는 방법으로 이 세가지가 사용된다.

하지만 이 세가지는 약간의 차이점이 존재하는데 우선 호출되는 시기가 다르다.



  • Filter
    • 일반적으로 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할때 사용
    • Spring이 실행 되기전 실행되며, 톰캣과 같은 웹컨테이너(WAS)에서 처리 해줌
    • Request / Response에 대한 조작이 가능
    • HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 처리
    • (사용)
      • 공통된 보안 및 인증/인가 관련 작업(XSS방어)
      • 이미지/데이터 압축 및 문자열 인코딩 변환 처리
      • Spring과 분리되어야 하는 기능
      • 모든 요청에 대한 로깅


  • Interceptor
    • 로그인 체크, 권한체크, 프로그램 실행시간 계산작업 로그확인 등의 작업
    • Dispatcher Servlet에 N개 등록 될 수 있음(DS가 해당 요청을 처리 가능한 Intercepter에게 할당)
    • 스프링의 모든 빈 객체에 접근 가능
    • (사용)
      • 세부적인 보안 및 인증/인가 공통 작업( 특정 사용자는 특정 기능을 사용 못하게 막음)
      • API 호출에 대한 로깅
      • Controller로 넘겨주는 정보(데이터)의 가공 (필터와 다르게 HttpServletRequest나 HttpServletResponse 등과 같은 객체를 제공받으므로 객체 자체를 조작할 수는 없음, 대신 해당 객체가 내부적으로 갖는 값은 조작할 수 있으므로 컨트롤러로 넘겨주기 위한 정보를 가공 가능 EX) JWT 토큰 정보를 파싱해서 컨트롤러에게 사용자의 정보를 제공하도록 가공)


  • Aop
    • 주로 ‘로깅’, ‘트랜잭션’, ‘에러 처리’등 비즈니스단의 메서드에서 조금 더 세밀하게 조정하고 싶을 때 사용
    • 메소드 전후의 지점에 자유롭게 설정이 가능
      (Interceptor나 Filter와는 달리)
    • AOP는 주소, 파라미터, 애노테이션 등 PointCut이 지원하는 다양한 방법으로 대상을 지정 가능 (Interceptor와 Filter: 주소(URL)로 대상을 구분해서 걸러내야함)
    • URL 기반이 아닌 PointCut 단위로 동작
    • 비즈니스 로직의 메서드 실행 전, 후 단위까지 핸들링 가능



  • Interceptor, Filter : Servlet 단위에서 실행됨
  • AOP : 메소드 앞에 Proxy패턴의 형태로 실행된다.



Request가 들어올때 거치는 순서


요청이 들어오면

Filter → Interceptor → AOP → Interceptor → Filter

순으로 실행됩니다.


스크린샷


  1. 서버를 실행시켜 서블릿이 올라오는 동안에 init이 실행되고, 그 후 doFilter가 실행된다.

  2. 컨트롤러에 들어가기 전 preHandler가 실행된다

  3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이 된다.

  4. 서블릿 종료 시 destroy가 실행된다.




(참고링크)



공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.

This post is licensed under CC BY 4.0 by the author.