Interceptor, Filter, AOP의 차이

유수민·2022년 7월 11일
0

지식창고

목록 보기
38/60

📌Interceptor, Filter, AOP의 차이

공통 기능을 모아서 처리 할 수 있는 방법으로 Interceptor, Filter, AOP가 사용된다. 하지만 이 세가지는 약간의 차이점이 존재하는데 가장 큰 특징은 호출되는 시기이다.

요청이 들어오면 Filter → Interceptor → AOP → Interceptor → Filter 순으로,

  • Filter는 Dispatcher Servlet 영역에 들어가기 전 Front Controller 앞 범위에서
  • Interceptor는 스프링의DispatcherServlet이 Controller를 호출하기 전
  • AOP는 Controller 처리 이후 주로 비지니스 로직에서 실행된다.

📖1. Filter

  • 스프링 컨텍스트 외부에 존재하여 스프링에 무관한 자원에 대해 동작
  • HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 처리 함
  • Dispatcher Servlet 영역에 들어가기 전 Front Controller 앞 범위에서 수행
  • 필터 적용시 필터가 호출된 후에 서블릿이 호출된다.

💡 Dispatcher Servlet

스프링의 가장 앞단에 존재하는 프론트 컨트롤러
HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)

📚메서드

  • doFilter() : 요청이 들어올때마다 해당 메서드가 호출된다. HTTP 요청이 오면 작동
  • init(), destroy(): 따로 구현 안해도 된다.

📚사용

1) 보안검사 (XSS 방어) - 스프링 컨테이너까지 요청 전달이 안되고 차단되어 보안성이 높아진다.

2) 인증/인가 공통작업 (ex. Spring Security : Spring MVC에 종속적이지 않아 필터 기반으로 인증/인가 처리)

3) 암/복호화 등 인코딩 변환처리

4) 이미지/데이터 압축

📖2. Interceptor

  • 요청을 가로채기 (작업 전/후)
  • 스프링 컨텍스트 영역 내부에서 Controller에 관한 요청과 응답에 대해 처리
  • Interceptor는 Dispatcher Servlet에 N개 등록 될 수 있다.
  • 스프링의 모든 @Bean에 접근이 가능하다

📚메서드

  • preHandler() : 컨트롤러 메서드가 실행되기 전
    • 전처리 작업이나 요청 정보를 가공하거나 추가하는 경우
  • postHandler() : 컨트롤러 메서드 실행 직후 view페이지 렌더링 되기 전 (후처리 작업)
  • afterCompletion() : view페이지가 렌더링 되고 난 후 (모든 뷰에서 최종 결과를 생성하는 일을 포함해 모든 작업이 완료된 후)
    • 요청 처리 중에 사용한 리소스를 반환할 때

📚사용

1) 세부적인 보안 및 인증/인가 공통 작업
ex) 권한 체크, 로그인 체크 : Controller에 제공하는 경로에 접근하기 전에 권한 체크하기 (특정 사용자는 특정 기능을 사용 못하게 막음)

2) API 호출에 대한 로깅 또는 감사

3) Controller로 넘겨주는 정보(데이터)의 가공

📖3. AOP

  • Controller 처리 이후 주로 비지니스 로직에서 실행됨

📚사용

1) 로그 처리
ex. Service에서 수행하는 메서드가 각각 얼마나 걸리는지 시간을 측정하는 로그 뿌리기

2) 트랜잭션

3) 에러처리

📖4. 차이 비교

profile
배우는 것이 즐겁다!

0개의 댓글