필터(Filter)

- 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부갖가업을 처리할 수 있는 기능 제공

- 톰캣과 같은 웹 컨테이너에 의해 관리됨

- 추가 방법: javax.servlet의 Filter 인터페이스를 구현

- 스프링과 무관하게 웹 애플리케이션에 전역으로 처리해야 하는 작업들을 처리
    ex) 보안(XSS 방어), 요청에 대한 로깅 또는 감사, 이미지/데이터 압축 및 문자열 인코딩

- 다음 체인으로 넘기는 ServletRequest/ServletResponser 객체를 조작할 수 있다는 점에서 Interceptor보다 강력한 기술

 

인터셉터(Interceptor)

- 스프링이 제공하는 기술로, 디스패처 서블릿((Dispatcher Servlet)이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공하는 기능 제공

- 스프링 컨텍스트에서 동작

- 추가 방법: org.springframework.web.servlet의 HandlerInterceptor 인터페이스를 구현

- 클라이언트의 요청과 관련되어 전역적으로 처리해야 하는 작업들을 처리

    ex) 인증/인가 등의 공통 작업, API 호출에 대한 로깅 또는 감사, Controller로 넘겨주는 데이터 가공

- 인터셉터는 필터와 다르게 HttpServletRequest나 HttpServletResponse 등과 같은 객체 자체를 조작할 수는 없다
  대신 해당 객체가 내부적으로 갖는 값을 조작할 수는 있으므로 컨트롤러로 넘겨주기 위한 정보를 가공하기에 용이

- 클라이언트의 IP나 요청 정보들을 기록하기에 용이

 

AOP(Aspect Oriented Programming)

- 로깅, 트랜잭션, 예외/에러처리 등 비즈니스 레이어의 메서드에서 세밀하게 조정하고 싶을 때 사용

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

- Interceptor와 Filter는 주소로 대상을 구분해서 걸러내야하는 반면, AOP는 주소, 파라미터, 애노테이션 등 다양한 방법으로 대상을 지정할 수 있다.(=포인트컷 설정으로 적용할 메서드를 선별해야 한다)

- Spring 컨트롤러는 타입이 일정하지 않고 리턴 값이 일정하지 않으므로, AOP 적용이 번거로울 수 있다.

 

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

** Advice의 경우 JoinPoint나 ProceedingJoinPoint 등을 활용해서 호출하는 반면,

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

 

 

[참고 사이트]

https://mangkyu.tistory.com/173

'~2022 > Spring' 카테고리의 다른 글

[Spring] Dependency Injection 종류와 장단점  (0) 2021.09.14
[Spring] AOP 개념 및 요약  (0) 2021.09.08

+ Recent posts