ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring Interceptor 사용 및 동작 정리
    spring/core 2021. 5. 14. 10:59

    배경

    인터셉터가 서블릿에서 어떻게 동작하는지 실습해보자

     

     

    인터셉터란?

    필터, 인터셉터, AOP 모두 어떤 작업을 기준으로 전과 후에 부가기능을 추가해주는 작업을 한다. 필터는 서블릿 작업 전과후, 인터셉터는 핸들러매핑 작업 전과후, AOP는 메서드 처리 전과후에 부가기능을 추가한다. 핸들러매핑은 요청의 URL과 메서드로 구분되니 인터셉터도 비슷한 메카니즘으로 적용할 핸들러매핑을 정할 수 있다는 걸 알 수 있다.

     

    실습

    일단 /hello라는 GET 요청에 대해 "middle print!"를 출력해주는 핸들러매핑을 만들었다. 다음으로 HandlerInterceptor를 구현한 HelloInterceptor클래스를 만들고 preHandle()과 postHandle()를 오버라이딩했다. 한가지 특이한 점은 HelloInterceptor를 빈으로 등록하지 않았다는 점인데 이는 빈으로 등록해서 컨텍스트가 자동으로 인터셉터를 추가해주는 과정이 없고 수동으로 직접 등록해줘야 한다는 점이다. 

     

     

     

    정상적으로 인터셉터를 수행한 걸 확인할 수 있다.

     

     

    동작원리

     

    preHandle()과 postHandle()의 동작시점

    DispatcherServlet의 doDispatch() 메서드 내부다. 코드로도 직관적인 이해가 가능해보인다. 우선 핸들러매핑에 등록한 인터셉터로 preHandle()을 작업해주고 전부 true를 반환한 경우 ha(핸들러어댑터)를 이용한 로직수행에 들어간다. 이후 postHandle()을 호출해주는 모습을 볼 수 있다.

     

    인터셉터를 핸들러에 등록하는 시점

    핸들러매핑을 매칭하는 과정에서 동적으로 인터셉터를 등록한다. 반복문으로 볼 수 있듯이 등록한 모든 인터셉터를 요청의 URL과 mathes해서 일일이 추가해준다. (별거없다)

     

    마치며

    더 깊은 내용이 있겠지만 이정도 보면 사용할 정도는 다 본게 아닌가 싶다. 아직 인터셉터를 적극적으로 사용할 일은 없긴 하지만 나중에 필요하면 손쉽게 등록하고 사용할 수 있을 것 같다^^.

    'spring > core' 카테고리의 다른 글

    Spring 에러 핸들링  (0) 2021.10.02
    Spring @Scheduled 사용 및 동작원리  (1) 2021.05.19
    스프링 DI 방법  (0) 2021.05.06
    스프링 부트 자동설정 과정  (0) 2021.04.06
    DispatcherServlet에서 요청을 처리하는 과정  (0) 2021.04.05

    댓글

Designed by Tistory.