Spring에선 웹을 개발할 때, 요청들을 반복적으로 처리해야하는 경우가 존재한다.
예를 들어,
하지만, 이를 각각 컨트롤러와 서비스 내에 구현하는것은 복잡하고 가시성도 떨어지고 한번 수정하면 해당 로직이 적용된 모든 코드를 바꿔야 하므로 효율이 굉장히 떨어지게 된다.
이럴때 사용하는것이 Filter, Interceptor, AOP 이다
이 3가지 제어기술의 공통 관심사는
인증, 인가, 로깅, 트랜잭션, 예외처리 등이 있다.
| Filter | Interceptor | AOP | |
|---|---|---|---|
| 처리위치 | DispatcherServlet 이전 | 컨트롤러 실행 전후 | Spring Bean 메서드 전후 |
| 사용대상 | 서블릿 요청 | 핸들러 | 모든 Bean 메서드 |
| 사용목적 | 인증, 로깅, CORS 등 | 세션 체크, 권한 검사 등 | 로깅, 트랜잭션, 예외처리 등 |
| 사용방법 | Filter 구현 | HandlerInterceptor 구현 | @Aspect사용 |
기본 개념은 다음과 같지만, 실무에서는 이런 개념이 딱딱 맞아 떨어지지는 않는다.