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가 적용되지 않는 것을 확인할 수 있습니다.
'웹 & 앱 개발 > Backend 개발' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 환경에서의 JVM 동작/배포/성능 최적화 (0) | 2023.03.20 |
---|---|
[JPA] 생성자와 기본 생성자, AllArgsConstructor와 NoArgsConstructor (0) | 2023.03.14 |
댓글