✅ Request가 들어올 때 거치는 순서
- Filter: 요청이 DispatcherServlet에 도달하기 전에 실행
- Interceptor: DispatcherServlet이 실행된 후 컨트롤러(핸들러)가 실행되기 전/후에 실행
- AOP: 메서드 호출 전/후에 적용
✅ Filter와의 차이
- Filter는 스프링 내부 기능과 관계없이 Web Container 단계에서 작동하므로 컨트롤러로부터 독립적
- Interceptor는 Spring Container 단계에서 작동하므로 스프링과 연계되어 실행됨
✅ Interceptor를 쓰는 이유
- 공통 코드 사용으로 코드의 재사용성 증가
- 메모리 낭비, 서버 부하 감소
- 코드 누락에 대한 위험성 감소
예를 들어,
모든 요청에 대해 JWT 검증을 해야하는 경우
Interceptor를 사용하지 않으면 각각의 메서드에 JWT 검증 코드를 작성해야 하지만
Interceptor 사용 시 JWT 검증 코드를 한 번 작성하고 적용할 경로를 지정하여 반복적으로 원하는 기능을 추가한다.
/admin/* 에 대한 모든 요청에 일괄적으로 Interceptor를 적용하여 코드량과 메모리 낭비를 줄이고 코드 누락의 위험성을 줄일 수 있다.
✅ Interceptor 사용법
1. servlet-context.xml 설정
2. CommonInterceptor.java
👉 Interceptor의 구현 메서드
PreHandle
- 반환값이 True이면 핸들러의 다음 동작 실행, False면 중단되어 인터셉터와 컨트롤러가 실행되지 않음
- 지정된 컨트롤러의 동작 이전에 가로채는 역할
- HttpServletRequest, HttpServletResponse, Object handler(현재 실행되는 컨트롤러 파악, 추가적인 메소드 실행 작업)
PostHandle
- 지정된 컨트롤러의 동작 이후 처리(DispatcherServlet이 화면을 처리하기 전에 동작)
- ModelAndView 파라미터를 통해 화면단에 들어가는 Data의 조작이 가능
AfterCompletion
- DispatcherServlet의 View가 정상적으로 Rendering된 상태에서 수행
AfterConcurrentHandlingStarted
- 비동기 요청 시 postHandle과 afterCompletion이 수행되지 않고 afterConcurrentHAndlingStarted가 수행
[참고자료]
[Spring] Interceptor란? 구현 예제와 함께 (HandlerInterceptor, HandlerInterceptorAdapter) (velog.io)
'+ > Spring' 카테고리의 다른 글
STS4에서 STS3 플러그인 설치 오류 (Spring Legacy Project 생성) (2) | 2024.05.16 |
---|---|
Spring Lombok @Data @Getter @Setter 인식 인식 오류 해결 (1) | 2024.05.13 |
[springboot] 명령 프롬프트(cmd) 이용하여 빌드하고 실행하기(윈도우) (0) | 2023.09.26 |
[springboot] welcome page 만들기 (0) | 2023.09.23 |
Spring - 기본 세팅하기(2) (0) | 2023.09.16 |