[스프링] 스프링 인터셉터

스프링 프레임워크에서 인터셉터(Interceptor)는 컨트롤러의 호출 전, 후에 특정 작업을 수행하는데 사용되는 메커니즘입니다. 인터셉터는 스프링 MVC 애플리케이션에서 요청 처리 주기 중에 여러 가지 작업을 수행하도록 도와줍니다.

인터셉터의 활용

인터셉터는 보안 검사, 로깅, XSS 방어, 인증 및 권한 검사 등과 같은 여러 작업을 처리할 수 있습니다. 또한, 공통적으로 적용되는 비즈니스 로직이나 프로그램의 흐름을 제어할 때에도 사용됩니다.

인터셉터 구현 방법

스프링에서는 인터셉터를 구현하기 위해 HandlerInterceptor 인터페이스를 제공합니다. 이 인터페이스를 구현하여 preHandle, postHandle, afterCompletion과 같은 메서드를 재정의하여 각각의 단계에서 필요한 작업을 수행할 수 있습니다.

public class CustomInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 호출 전 작업 수행
        return true; // 또는 false
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 호출 후 작업 수행
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 요청 완료 후 작업 수행
    }
}

인터셉터 등록

구현한 인터셉터를 등록하기 위해서는 WebMvcConfigurer 인터페이스를 구현한 설정 클래스에서 addInterceptors 메서드를 오버라이드하여 인터셉터를 추가합니다.

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**");
    }
}

이렇게 등록된 인터셉터는 모든 요청에 대해 적용됩니다.

결론

스프링 인터셉터를 통해 애플리케이션의 요청 처리 과정에서 공통적인 작업을 처리하고, 효율적으로 중복되는 코드를 줄일 수 있습니다. 이를 통해 유지 보수가 쉬우며, 애플리케이션의 확장성을 향상시킬 수 있습니다.

Reference:
Spring Framework - HandlerInterceptor