본문 바로가기
웹 & 앱 개발/Backend 개발

[Spring] Interceptor (feat. Servlet의 Filter 비교)

by newstellar 2023. 10. 15.
반응형
Spring Interceptor 깊게 알아보기

오늘은 Spring Interceptor에 대해 깊게 알아보도록 하겠습니다. 이 포스팅은  @dev.pedia 인스타그램 게시물을 기반으로 작성되었습니다.

 

Spring Interceptor란?

Spring Interceptor는 Controller에 들어오는 요청(HttpRequest)과 응답(HttpResponse)를 ‘가로채는’ 역할을 하는 객체입니다. Interceptor를 활용하면 Controller의 로직을 수정하지 않더라도, 요청-응답의 사전/사후에 제어가 가능합니다. 예를 들어, 요청 전 Session에서 로그인 여부를 확인 후 로그인 페이지로 redirect 하는 등의 작업이 가능합니다.

 

 

Spring MVC Request Lifecycle

Spring MVC는 사용자의 요청을 받아 적절한 Controller와 Bean을 찾습니다. 이 과정에서 Spring의 Interceptor와 Servlet의 Filter는 특정 URI에 접근할 때 제어하는 용도로 사용됩니다.

 

 

Interceptor vs Filter

Filter는 DispatcherServlet 앞단에서 url 패턴에 맞는 경우 부가 작업을 할 수 있습니다. 이는 Interceptor에서 불가능한 요청 및 응답 조작이 가능합니다. 이는 Spring 범위 밖인 Servlet Container(Tomcat)에서 관리되며, doFilter 메서드를 사용합니다. 여기서 Servlet이란, Thread에서 Client의 HTTP Handshake 과정에서 doGet 및 doPost 메서드를 사용하여 HttpSevlet 객체를 처리하는 것을 의미합니다.

 

 

Interceptor 예제 - HandlerInterceptor 상속

이제 실제로 Interceptor를 어떻게 사용하는지에 대한 예제를 살펴보겠습니다. Interceptor를 사용하기 위해서는 우선 HandlerInterceptor를 상속받아야 합니다.

 

 

 

Interceptor 예제 - Interceptor를 스프링에 등록

또한 Interceptor를 스프링에 등록하는 과정이 필요합니다. 

 

 

Interceptor 예제 - Controller 전/후의 Console log

Case 1) Interceptor 적용 O

GET /example/hello 경로로 요청을 보내면, Interceptor가 적용된 것을 확인할 수 있습니다.

 

Case 2) Interceptor 적용 X

다른 경로로 HTTP 요청을 보내면, Interceptor가 적용되지 않는 것을 확인할 수 있습니다.

 

반응형

댓글