2025-11-10
오늘 배운 것
Filter VS Interceptor VS AOP
Filter (서블릿 레벨)
- 개념
- Servlet Container에서 동작하는 가장 낮은 수준의 요청/응답 전처리기
- DispatcherServlet 앞단에서 작동
javax.servlet.Filter 인터페이스 구현
- 주요 목적
- 인코딩 처리, XSS/로그 필터링, 인증 토큰 검사 등
- 스프링 외부에서 서블릿 수준의 요청 전체에 개입 가능
- 실행 시점
- 요청이 DispatcherServlet에 도달하기 전/후
DispatcherServlet이란?
- 개념
- Spring MVC의 중앙 제어기(Front Controller) 역할을 하는 서블릿
- 클라이언트의 모든 요청을 받아 적절한 Controller로 전달하고, 처리 결과를 다시 응답으로 반환
- 역할
- 클라이언트 요청 수신
- 어떤 컨트롤러로 전달할지 결정 (
HandlerMapping)
- 컨트롤러 실행 (
HandlerAdapter)
- 실행 결과를 View로 반환 (
ViewResolver)
- 응답 반환
Interceptor (스프링 MVC 레벨)
- 개념
- Spring MVC의 DispatcherServlet 이후, Controller 호출 전후에서 동작
HandlerInterceptor 인터페이스 구현
- 주요 목적
- 인증/인가 체크 (예: 로그인 필요 API 접근 차단)
- Controller에 전달하기 전, ModelAndView 조작 등
- 실행 흐름
Filter -> DispatcherServlet -> Interceptor(preHandle) -> Controller -> Interceptor(postHandle, afterCompletion)
AOP (스프링 빈 레벨)
- 개념
- 메소드 실행 자체를 가로채는 기술
- 주로 Service / Repository 계층의 공통 로직 (로깅, 트랜잭션, 성능 측정 등)에 사용
- 프록시 기반으로 동작 (Spring AOP는 기본적으로 Proxy 기반)
- 주요 목적
- 중복되는 부가기능(로깅, 예외처리, 트랜잭션)을 공통 모듈로 분리
- 코드 수정 없이 매서드 전/후/예외 시점에 동작
- 실행 시점
- 스프링 컨테이너 내부 Bean 호출 시, 프록시가 대신 실행