Spring Framework는 웹 애플리케이션 개발을 위한 강력한 기능을 제공하는 프레임워크입니다. 이 중에서도 인터셉터(Interceptor) 기능은 웹 애플리케이션의 요청과 응답을 가로채어 처리하는 데 사용됩니다. 이번 글에서는 Spring Framework에서 인터셉터를 사용하는 방법에 대해 알아보겠습니다.
1. 인터셉터란?
인터셉터는 컨트롤러(Controller)의 앞뒤에서 동작하는 객체입니다. 클라이언트의 요청을 가로채어 원하는 로직을 수행할 수 있으며, 응답을 가로채어 추가적인 처리를 할 수도 있습니다. 인터셉터를 사용하면 공통적인 기능을 한 곳에서 관리할 수 있어 코드의 중복을 줄일 수 있습니다.
2. 인터셉터 구현하기
먼저, 인터셉터를 구현하기 위해서는 HandlerInterceptorAdapter
클래스를 상속받아야 합니다. 아래의 예시 코드를 참고해보세요.
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class CustomInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 요청 전에 수행할 로직 작성
return true; // 다음 단계로 진행
}
@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 {
// 요청이 처리된 후에 수행할 로직 작성
}
}
위의 코드는 CustomInterceptor
라는 클래스를 생성하여 HandlerInterceptorAdapter
를 상속받은 것입니다. preHandle
, postHandle
, afterCompletion
메서드를 오버라이딩하여 필요한 로직을 작성할 수 있습니다.
3. 인터셉터 등록하기
인터셉터를 사용하기 위해서는 해당 인터셉터를 스프링 빈으로 등록해야 합니다. 이를 위해 스프링의 설정 파일에 아래와 같이 등록합니다.
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/> <!-- 적용 대상 URL 패턴 -->
<bean class="com.example.CustomInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
위의 코드는 CustomInterceptor
클래스를 <bean>
태그로 등록한 것입니다. <mvc:mapping>
태그에 적용 대상 URL 패턴을 설정하여 어떤 요청에 인터셉터를 적용할 것인지 지정할 수 있습니다.
4. 인터셉터 사용하기
인터셉터가 등록되면 해당 패턴의 요청이 들어올 때마다 인터셉터의 로직이 실행됩니다. 인터셉터는 주로 요청의 유효성 검사, 권한 체크, 로깅 등의 공통적인 기능을 수행하는 데 사용됩니다.
만약 preHandle
메서드에서 return false
를 하게 되면, 해당 요청은 더 이상 컨트롤러로 진행되지 않고 즉시 처리가 완료됩니다.
@Controller
public class MyController {
@RequestMapping("/hello")
public String sayHello() {
// 컨트롤러 로직 작성
return "hello"; // View 이름 반환
}
}
위의 예시는 MyController
클래스에 RequestMapping
어노테이션이 적용된 sayHello
메서드가 있는 것입니다. 이 메서드에 해당하는 URL이 요청되면 인터셉터의 로직이 먼저 수행되고, 그 다음에 컨트롤러의 로직이 실행됩니다.
결론
Spring Framework에서 인터셉터를 사용하면 웹 애플리케이션의 공통 기능을 효과적으로 관리할 수 있습니다. 컨트롤러의 앞뒤에서 동작하는 인터셉터를 구현하고 등록함으로써 공통된 작업을 간소화할 수 있습니다. 이를 통해 개발자는 보다 효율적으로 코드를 작성할 수 있으며, 유지 보수 역시 쉬워집니다.