스프링에서는 filter,aop,interceptor가 존재하는데 다 쓰임이 다르다.
filter는 서블릿에서 관리를 하는 필터이기때문에 dispacherServlet에 받기 전에 처리하기 때문에,
aop,interceptor보다 먼저 그 전에 앞단에서 처리를 해준다.
aop와interceptor와는 dispacherServlet 후에 처리를 하기 때문에 비슷은 하지만 사용하는 용도와 로직이 좀 다르다.
일단 스프링을 하면 기본적으로 다들 알겠지만.. 또 까먹을까봐 그림을 머리속에 기억하자..
기본적으로 filter,aop,interceptor와 대해 어느정도 안다는 전제하에 글을 쓴다...
이 글은 위에 3개에 대해 다루는 것은 아니고 interceptor의 예외처리 범위에 대해 알아볼려고 하는 것이다..
개발을 하면서 의문점이 들었다..
@ExceptionHandler를 사용을 하여서 @controller @RestController단에 예외를 터트릴 경우 내가 설정한 예외를 터트릴 수가 있다
하지만 등록하지 않았을경우에는 400이든 500이든 에러가 터트리면서 스프링단에서 처리가 되는게 아니라 was에게 그대로 전달이 되면서 /error로 이동하여 에러페이지가 나온다.(필자는 따로 CustomError페이지를 구현함..)
근데 인터넷에 돌아다니는걸 보았는데... interceptor에서는 @ExceptionHandler,@controllerAdvice등이 적용이 안된다고 하였다.. 이유는 범위 때문인데 interceptor에서는 @controller단이 아니기 때문에(?)라고 하는 거 같은데.. 그리고 @controller @RestController단에서만 적용이 된다고 하는데.. 나는 서비스단까지 다 사용을 할 수 있다..
뭐지...? 이유는 잘 모르겠다... 그냥 예상하는걸로는 아무래도 @controllerAdvice 및 restControllerAdvice를 등록하여 @exceptionHadler를 관리를 하는데 그때 빈으로 다 올라가고 controller service 의존성 주입을 하니까...
service layer에서도 적용이 되는거 아닐까싶다....
혹시 이유를 알고 계시면 답글 부탁드립니다....
'Spring' 카테고리의 다른 글
스프링-시큐리티 UsernamePasswordAuthenticationFilter (0) | 2022.12.18 |
---|---|
스프링 aop (0) | 2022.12.13 |
스프링 배치 (0) | 2022.11.23 |
세션관리 (0) | 2022.11.15 |
DispatcherServlet (1) | 2022.11.11 |