개발/Spring

스프링(Spring) 인터셉터(Interceptor)

피터JK 2025. 10. 3. 10:11
728x90

스프링에서 인터셉터(Interceptor)는 주로 프레젠테이션 계층(Presentation Layer), 즉 웹 계층(Web Layer)에 위치하며, 클라이언트의 요청이 컨트롤러(Controller)에 도달하기 전과 후의 처리를 담당합니다.

이는 서블릿 컨테이너 레벨에서 동작하는 필터(Filter)와 달리, 스프링 MVC 컨텍스트 내부에서 동작하여 Dispatcher Servlet이 컨트롤러를 호출하기 전후에 특정 작업을 수행할 수 있도록 해줍니다.


1. 인터셉터의 위치 및 역할

인터셉터는 스프링 MVC 요청 처리 흐름에서 Dispatcher ServletController 사이의 세밀한 지점을 가로채는 역할을 합니다.

인터셉터는 세 가지 주요 메서드를 통해 요청 생명 주기(Lifecycle)의 세 단계에 관여합니다.

  1. preHandle(): 컨트롤러 메서드 실행 (요청을 가로채서 사전 검사)
  2. postHandle(): 컨트롤러 메서드 실행 , 뷰 렌더링 (모델이나 뷰 정보 조작)
  3. afterCompletion(): 모든 처리가 완료된 (응답이 클라이언트에게 전달된 후 최종 작업)

2. 인터셉터를 사용하는 경우 (주요 활용 사례)

인터셉터는 웹 요청 처리 전반에 걸쳐 공통적이고 횡단적인 관심사(Cross-Cutting Concerns)를 처리할 때 주로 사용됩니다.

활용 사례 설명
인증 및 권한 검사 (Authentication & Authorization) 가장 흔한 사용처입니다. 사용자가 로그인했는지, 또는 특정 리소스에 접근할 권한이 있는지 preHandle() 단계에서 확인하고, 권한이 없을 경우 요청을 차단하고 로그인 페이지로 리다이렉션합니다.
로깅 및 감사
(Logging & Auditing)
모든 요청에 대해 누가, 언제, 어떤 요청을 했는지 로그를 남기거나, 요청 처리 시간을 측정하여 postHandle() 또는 afterCompletion()에서 기록할 때 사용합니다.
데이터 전처리
(Request Pre-processing)
요청 파라미터를 가공하거나, 특정 포맷에 맞게 정제(Sanitization)하는 등의 작업을 컨트롤러 실행 전에 수행합니다.
다국어 처리
(Internationalization - i18n)
요청 정보(예: Accept-Language 헤더)를 기반으로 사용자에게 맞는 언어/지역(Locale) 정보를 설정할 때 사용합니다.
세션/캐시 처리 특정 조건에서 세션 정보를 검사하거나 캐시를 무효화하는 로직을 공통적으로 적용할 때 사용됩니다.
728x90