요청흐름
인터셉터와 필터의 차이점은 무엇일까?
Filter
ServletContainer에서 가장 먼저 실행됨
정적 자원(CSS, JS 등)도 다 지나감
목적: 보안 필터, 토큰 검사, 요청 로깅, GZIP 압축 등 전역 처리
단점: Spring MVC 예외 처리와 연동 어려움, 실수 시 모든 요청 차단 위험
Interceptor
DispatcherServlet 내부에서만 작동함
정적 자원은 자동 제외됨
목적: 로그인 체크, 권한 검사, API 로깅 등 MVC 구조와 맞는 처리
장점: Spring의 예외 처리, 세션, 모델 등과 잘 연동됨
요점비교
항목 | Filter | Interceptor |
실행위치 | DispatcherServlet 이전 | DispatcherServlet 내부 |
정적 자원 통과 여부 | 직접 걸러야 함 | 자동 제외 |
예외 핸들로 연동 | 불편함 | 잘 연동됨 |
일반적인 접근제어 | 불편 | 적합 |
사용 목적 | 보안/로깅/헤더 검사 | 인증/접근제어/요청 후 처리 |
권한이나 로그인 체크 같은곳에선 왜 인터셉터가 더 나을까?
이유 | 설명 |
DispatcherServlet 이후 실행됨 | 즉, 정적 리소스 같은 거 자동으로 제외됨 (개발자가 걸러낼 필요 없음) |
MVC 구조에 잘 맞음 | 컨트롤러 앞/뒤에 붙어서 ModelAndView, request, session 활용에 최적 |
에러 핸들링 연동이 잘 됨 | 예외 발생 시 @ExceptionHandler, @ControllerAdvice와 궁합 좋음 |
Spring Boot는 기본적으로 필터보다 인터셉터에 최적화됨 | 대부분 구조가 @Controller, @RestController 기반이기 때문에 |
어떤 사용자가 어떤 URL에 접근 가능한지 제어하는 건
Spring MVC 컨트롤러 기준으로 동작하는 구조니까 당연히 Interceptor가 맞는 도구다.
'🍃Spring' 카테고리의 다른 글
# spring boot프로젝트 웹에서 생성하기 (spring initializer) (0) | 2025.07.07 |
---|---|
# Spring boot(maven) - Swagger로 내가 만든 API 관리를 편하게 해보자. (1) | 2025.05.28 |
# 자바 객체 읽기전용, 쓰기전용 만들기 (1) | 2025.05.28 |
# @Autowired 보단 생성자 주입 방식? @RequiredArgsConstructor란? (0) | 2025.05.28 |
# @ConfigurationPropertiesScan, @ConfigurationProperties (0) | 2025.03.06 |