1. Filter vs Interceptor vs AOP
1️⃣ Filter
1) 개념
- Servlet 스펙에 포함된 웹 컴포넌트
- HTTP 요청/응답을 서블릿 진입 전·후에 가로챔
- Spring과 무관하게 컨테이너(Tomcat 등) 레벨에서 동작
2) 동작 위치
Client
↓
Filter
↓
DispatcherServlet
↓
Controller3) 주요 특징
- 모든 요청에 대해 동작 (정적 리소스 포함 가능)
HttpServletRequest / Response직접 접근 가능
- Spring Bean이 아님 (단, DelegatingFilterProxy로 연동 가능)
4) 대표 사용 사례
- 인증/인가 (JWT, 세션 검사)
- CORS 처리
- 인코딩 설정
- XSS 필터링
- 공통 Request/Response 래핑
5) 핵심 인터페이스
javax.servlet.Filter
2️⃣ Interceptor
1) 개념
- Spring MVC에서 제공하는 요청 가로채기 기술
- Controller 실행 전·후, View 렌더링 이후에 개입 가능
2) 동작 위치
Client
↓
Filter
↓
DispatcherServlet
↓
Interceptor
↓
Controller3) 주요 특징
- Spring Context 내부에서 동작 (Spring Bean)
- Controller 단위로 세밀한 제어 가능
HandlerMethod정보 접근 가능
- 정적 리소스는 기본적으로 제외
4) 주요 메서드
preHandle() // Controller 실행 전
postHandle() // Controller 실행 후
afterCompletion() // View 렌더링 후5) 대표 사용 사례
- 로그인 체크
- 권한 검사 (Role 기반)
- 요청별 로깅
- Locale, TimeZone 처리
- 공통 모델 데이터 주입
3️⃣ AOP (Aspect Oriented Programming)
1) 개념
- 비즈니스 로직과 공통 관심사(Cross-cutting Concern) 분리
- 메서드 실행을 프록시 기반으로 가로챔
2) 동작 위치
Controller / Service / Repository
↳ Proxy
↳ Aspect3) 주요 특징
- HTTP 개념과 무관
- 메서드 호출 단위로 동작
- Spring Bean에만 적용 가능
- Pointcut 표현식으로 매우 정밀한 대상 지정 가능
4) 대표 사용 사례
- 트랜잭션 관리 (
@Transactional)
- 로깅
- 성능 측정
- 예외 처리
- 보안 체크
5) 주요 어노테이션
@Aspect
@Before
@After
@Around4️⃣ 핵심 차이점 비교
구분 | Filter | Interceptor | AOP |
표준 | Servlet Spec | Spring MVC | Spring AOP |
동작 레벨 | 웹 컨테이너 | DispatcherServlet | 메서드 |
HTTP 의존성 | O | O | X |
적용 대상 | 모든 요청 | Controller | Spring Bean |
정적 리소스 | 포함 | 기본 제외 | 해당 없음 |
실행 시점 | 가장 앞단 | Controller 전/후 | 메서드 호출 시 |
접근 정보 | Request/Response | Handler, Model | Method, Args |
주요 용도 | 공통 웹 처리 | 요청 흐름 제어 | 비즈니스 관심사 |
5️⃣ 언제 무엇을 써야 할까?
✔ Filter가 적합한 경우
- Spring 진입 이전에 처리해야 할 로직
- 인증 토큰 파싱
- CORS / Encoding / 보안 헤더
✔ Interceptor가 적합한 경우
- Controller 기준 공통 처리
- 로그인 여부 검사
- 권한/메뉴 접근 제어
- 요청 단위 로깅
✔ AOP가 적합한 경우
- 비즈니스 로직 공통화
- 트랜잭션, 로깅, 성능 측정
- 서비스/레포지토리 계층 관심사 분리
Share article