본문 바로가기

CS study/spring

인터셉터(Interceptor)란?

목차

    인터셉터. 수업을 수강하며 들었었던 개념이지만, 문득 어디에 쓰이고 어떻게 사용하는지는 알아야 될 것 같아 찾아보고 글을 쓴다.

     

    이게 뭔데요?

    인터셉터는 스프링 프레임워크에서 HTTP 요청을 가로채거나 수정, 추가 작업을 할 수 있는 구성 요소다.

    이 얘기는 해당 스프링 서버로 들어오는 HTTP 요청에서 로직보다 앞세워 무언가 선행 조치를 취할 수 있다는 말이다.

    내가 짠 코드보다 앞서서 전처리를 하거나.. 그렇기에 관리자 인증 등의 예시가 나왔던 것이 이해가 된다.

     

    인터셉터는 MVC 패턴에서 Controller로 가기 전, 후에 작동해서 웹 애플리케이션의 전반적인 동작을 관리한다.

    유저 HTTP 요청이 진행되는 모습

     

     

    Filter랑 뭐가 달라요?

     

     

    필터 역시도 앞서 말했던 것처럼, 유사한 역할을 수행한다. 다만 가장 큰 차이점은 생성 위치와 동작이라고 할 수 있을 것이다.

    필터는 서블릿 컨테이너에서 동작하고, 인터셉터는 스프링 컨텍스트 내에서 동작한다. 그렇기에 호출 시점이 다르다! 

     

    필터 : Dispatcher Servlet의 요청 동작 전/후 동작.

    스프링과 독립적이며, 별개로 운용한다.
    필터는 서블릿 스펙에 정의되어 있어 J2EE, Jakarta EE 등 다른 환경에서도 사용할 수 있다

     

    - 필터(Filter)는 클라이언트와 서버 사이에 위치해 있어 요청과 응답을 가로채는 역할을 한다.

    - 필터는 스프링 밖에서 동작하기에 스프링과 독립적인 로직을 처리할 수 있다. 

    - 필터는 HTTP 요청/응답에 대한 초기 처리를 담당한다.

    인터셉터 : Dispatcher Servlet 이후 동작

    스프링 내부에 속해 디스패처 서블릿이 컨트롤러에 라우팅 하기 전과 후에 작동.
    스프링의 기능(예: 모델과 뷰 조작)을 활용할 수 있다.

    - 인터셉터는 서버 내부의 스프링 컨텍스트에 포함되어 이로 들어오는 요청과 응답을 가로채 역할을 수행한다.

    - 즉, 인터셉터는 스프링 환경이기에 인터셉터를 쉽게 설정하고 관리할 수 있으며, 스프링의 기능(Autowired)을 사용할 수 있다고 한다.

    - 이는 DispatcherServlet이 컨트롤러를 호출하기 전과 후에 작동하여 스프링의 기능(예: 모델과 뷰 조작)을 활용할 수 있다는 말과 같다.

     

     

    참조 :

    https://docs.spring.io/spring-framework/reference/web/webmvc/mvc-config/interceptors.html

    https://mangkyu.tistory.com/173

    https://victorydntmd.tistory.com/176

    https://goodteacher.tistory.com/412