Interceptor 의 기본 형태

HadlerInterceptor 를 구현한 Interceptor 의 모습

 

  • HandlerInterceptor 를 구현해 필수 메서드들을 재정의 한다.
    • preHandle 는 반환 값이 boolean 이다.
      • 실제 요청 전에 검증을 위한 메서드로 검증 실패시 false 를 반환해 다음 Interceptor 로 연결이 되지 못한다.
      • true 를 반환 할 경우, 다음 Interceptor 로 연결 되거나 해당 요청을 처리 해줄 Handler (MVC 에서의 Controller) 로 연결 해준다.

addInterceptor

WebConfig 클래스에 WebMvcConfigurer 를 구현 한다.

  • WebMvcConfigurer 를 구현
    • addInterceptores 를 재정의 한다.
    • 위와 같이 정의 해놓은 커스텀 Interceptor(현재는 LogInterceptor) 를 추가 해준다.

doFilter 메서드

 

FIlter의 사용 예제

 

  • 필터는 FilterChain 인터페이스가 사용 된다.
    • FilterChain 인터페이스는 doFilter 메서드를 담고 있다.
      • doFilter 메서드는 현재 필터가 다음 필터로 제어를 전달하는 역할을 해준다. 따라서 현재 필터가 끝나면 다음 필터로 제어를 전달 하며, 다음 필터가 존재하지 않는다면 요청을 처리하는 서블릿으로 제어를 전달 한다.

때문에 Filter 를 사용 한다면 doFIlter 메서드는 필히 구현 해줘야 한다.

 


커스텀 핸들러를 통한 Filter 운용

Filter 를 핸들러를 통해 이용하는 모습

  • 필터는 개별적으로 사용되기 보다 이 처럼 커스텀 핸들러를 통해 한 곳에서 운용 되는 것이 컨벤션적이다.
    • 여러 필터를 한 곳에서 운용해 보다 유연한 구성이 가능하다.

자바 웹 개발 중 공통적으로 처리 해야하는 부분이 생긴다.

 

이 때 각 페이지에서 같은 처리를 지속적으로 해주는 소모 행위를 줄여줄 수 있는 요소가

Filter, Interceptor, AOP 의 개념이다.

 

1. Filter(필터):

  • Servlet에서 요청과 응답을 가로채는 역할
  • 주로 웹 애플리케이션의 보안, 인증, 로깅 등과 같은 전반적인 관심사를 처리하는 데 사용
  • 일반적으로 Servlet API에서 제공하는 javax.servlet.Filter 인터페이스를 구현하여 사용

2. Interceptor(인터셉터):

  • Spring MVC와 같은 프레임워크에서 제공하는 기능 중 하나로, 컨트롤러의 처리 전/후에 특정 로직을 추가하고자 할 때 사용
  • 주로 로깅, 트랜잭션 관리, 권한 검사 등에 활용
  • Spring MVC에서는 HandlerInterceptor 인터페이스를 구현하여 사용

3. AOP(관점 지향 프로그래밍):

  • 관심사를 분리하기 위한 프로그래밍 패러다임 중 하나로, 메소드 실행이나 객체 생성 등과 같은 런타임에 발생하는 특정 시점에 관심 있는 기능을 삽입하는 것을 의미
  • 주로 로깅, 트랜잭션 관리, 보안 등의 관심사를 분리하여 코드 중복을 줄이고 모듈성을 향상시키는 데 사용
  • Spring 프레임워크에서는 AOP를 구현하기 위해 AspectJ와 같은 라이브러리를 사용하거나, Spring AOP 모듈을 통해 구현 가능

Filter, Interceptor, AOP는 모두 애플리케이션의 다양한 부분에 관심사를 적용하고 중복을 줄이며, 유연성을 높이는 데 사용된다. 

+ Recent posts