본문 바로가기

좋아하는 것_매직IT/1.spring

13.Spring, 스프링MVC의 핵심개념 중 인터셉터(Interceptor)와 핸들러매핑(HandlerMapping)에 대해서 알아볼께요.

반응형
  • 인터셉터 / 핸들러매핑에 대해서알아보자.

    • 인터셉터란 무엇일까?
      • 인터셉터란, 웹브라우저에서 특정 URI로 요청할 경우,  핸들러(Controller)로 가는 요청을 가로채는 역할하며,
        • 아래 플로우를 따름
          • preHandle -> (Handler call) -> postHandle -> (요청처리완료) -> afterCompletion  
          • 즉, 해당 preHandle / postHandle / afterCompletion 메소드 를 구현하여 특정 로직을 수행하게 만들 수 있음.
      • (참고)Spring MVC request life cycle
    • 인터셉터(HandlerInterceptor)는 어느 경우에 사용할까?
      • 핸들러에 대한 요청을 인터셉트하는 데 사용함.
      • 또한, 요청 전후에 일부 처리를 할때 사용함.
      • 그리고, 요청 / 응답의 내용을 기록하거나 소요된 시간을 알아낼 때 사용함.
      • 그럼, HandlerInterceptor를 만드는 단계를 알아보자.
        • 아래 2단계가 필요함
          • 첫째, HandlerInterceptor를 정의해야 함.
          • 둘째, HandlerInterceptor를 인터셉트할 특정 핸들러에 매핑함.
    • 핸들러매핑(HandlerMapping)이란?
      • URL / 컨트롤러간의 매핑이 핸들러 매핑이라는 것을 사용해 표현함.
        • 스프링 2.3 이전 버전(즉, 어노테이션이 지원되기 전을 말함)
      • but, 지금 처럼 어노테이션을 사용하면 명시적인 핸들러 매핑이 필요하지 않음.
  • 그럼, HandlerInterceptor의 정의에 대해서 알아보자.

    • 우선, HandlerInterceptorAdapter 에서 재정의 할 수 있는 메소드는 아래와 같음.
      • preHandle
      • postHandle
      • afterCompletion
    • 첫째, preHandle 에 대해서 알아보자.

  • 설명
    • 핸들러 메소드가 호출되기 전에 호출되는 메소드
  • 둘째, postHandle 에 대해서 알아보자

  • 설명
    • 핸들러 메소드가 호출된 후 호출되는 메소드
  • 셋째, afterCompletion에 대해서 알아보자

  • 설명
    • 요청 처리가 완료된 후 호출되는 메소드
  • HandlerInterceptor 생성 예시
    • 핸들러가 실행되는 시간을 계산해서 로깅하는 인터셉터(HandlerTimerLogInterceptor)를 생성해보자.
      •  첫째, HandlerInterceptorAdapter를 상속하는 클래스 생성

  • 둘째,  preHandle메소드 생성

  • 셋째,  postHandle메소드 생성

  • 마지막으로, AfterCompletion 메소드 생성

  • 여기까지, 메소드를 생성하면, 아래의 플로우를 따르는 생성 작업을 완료하게 된다.
    • preHandle -> (Handler call) -> postHandle -> (요청처리완료) -> afterCompletion  
    • 그럼, 이어서, 위에서 생성한 HandlerInterceptor 를 핸들러에 매핑하는 작업을 해보자.

그럼, HandlerInterceptor를 핸들러에 매핑하는 것에 대해서 알아보자.

  • HandlerInterceptor 는 인터셉터하고자 하는 특정 URL에 매핑가능함.
  • 그리고, 인터셉터는 디폴트로, 모든 컨트롤러를 인터셉트함.
  • 그럼 실제 예시를 통해서 알아보자.
    • 아래는, XML 컨텍스트 구성 예제임

아래는, 정확한 URI를 인터셉트할 수 있도록 구성하는 예제임

  • 설명
    • "/thub/"로 시작하는 URI 매핑이 있는 핸들러를 제외한 모든 핸들러를 인터셉트함.

결론

  • 인터셉터란, 웹브라우저에서 특정 URI로 요청할 경우,  핸들러(Controller)로 가는 요청을 가로채는 역할함.
  • 인터셉터를 통해서 핸들러 호출 전/후/완료 시 특정 로직을 수행하도록 활용할 수 있음.
  • 오늘도 인터셉터에 대한 지식 마술(?) 한가지 획득완료! 감사합니다. ^^
300x250