728x90

 

인터셉터란?

컨트롤러(Controller)의 '핸들러(Handler)'를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할수 있는 일종의 필터

interceptor 란 단어는 '낚아채다'라는 의미.

해당 단어의 의미와 같이 사용자 요청에 의해 서버에 들어온

Request 객체를 컨트롤러의 핸들러(사용자가 요청한 url에 따라 실행되어야 할 메서드, 이하 핸들러)로

도달하기 전에 낚아채서 개발자가 원하는 추가적인 작업을 한후 핸들러로 보낼수 있도록 해주는것이 인터셉터

 

사용 목적

개발자는 특정 Controller의 핸들러가 실행되기 전이나 후에 추가적인 작업을 원할때 Interceptor를 사용

(추가적인 작업으로는 로그인체크, 권한 체크 등이 있다.)

 

적용해야할 핸들러가 수천개가 된다면 어떻게될까?

크게 두가지 문제가 생긴다.

1) 메모리 낭비, 서버의 부하 증가

    - 적용해야할 핸들러만 수만큼 세션체크 코드를 작성함으로써 반복되는 코드들이 매우 많아지기 때문

2) 코드의 누락

 

 

 

(Interceptor, AOP도 요청을 가로채는 녀석)

 

인터셉터가 들어갈 수 있는 시점 3가지

(인터셉터가 사용할 수 있는 메소드 3가지)

  1. preHandle()
  2. postHandle()
  3. afterCompletion()

인터셉터 수행한다 = 인터셉터가 가로챈다

 

  1. preHandle() : Servlet이 Controller를 호출하기 전에 수행
  2. postHandle() : Controller에서 Servlet으로 리턴되는 순간에 수행
  3. afterCompletion() : 최종 결과를 생성하는 일을 포함한 모든 작업이 완료 된 후

 

최종결과란 뷰까지 다 처리한 상태를 의미

(모든 View에서 최종 결과를 생성하는 일을 포함한 모든 작업이 완료된 후에 실행)

 

Q.뷰까지 다 처리됬다는게 클라이언트에 리스폰스까지 끝난거를 의미한건가요?

A.응답이 다 끝났으니까 그때 인터셉터를 실행한다는 의미

 

※ 필터(Filter)와 인터셉터(Interceptor)의 사용처 차이

필터 인코딩처리에 많이 사용

인터셉터 : 로그인처리에 많이 사용

장바구니 눌렀다가 로그인이 안되어있으면 로그인으로 가는게 인터셉터

이거는 프리핸들러로 구분될 것임. 장바구니 쓸려는 컨트롤러 수행전에 해야하는 것이기 때문

  • 적용되는 위치 차이
  • 필터 : 자바
  • 인터셉터 : 스프링
728x90
반응형

+ Recent posts