반응형

비슷한 처리 작업 하지만 각자 다른?

 

어제 filter 와 AOP 를 활용하여 로그 처리 작업을 하였는데 문득 이들의 차이가 명확하게 뭔지 내가 알고 작업을 하는건가 하는 생각이 들었다. 그래서 기드르이 차이 점으 알아보려고 한다.

 

  • 필터 (filter)

정의 : Java Servlet API 에 포함된 부분으로, 요청과 응답을 가로채서 특정 처리를 수행하는데 사용되는 컴포넌트.

      일반적으로 HTTP 요청을 필터링하거나 보안검사, 로깅, 인코딩 등의 목적으로 사용된다. Dispatcher Servlet 에 요청 되기 전 / 후에 url 패턴에 맞는 모든 요청에 대해 부가적인 작업을 처리할 수 있는 기능을 제공한다. 즉 어플리케이션에서의 컨테이너가 아니라 WAS 같은 서버 컨테이너에의해 관리가 된다고 볼 수 있다. 

작동방식 : doFilter 메서드를 상속받아 구현하여 필터링 로직을 작성한다. 

filter 메서드의 종류

 

1. init() : 필터 객체를 초기화하고 서비스에 추가하기 위한 메서드, 웹 컨테이너가 최초 init() 을 호출하여 필터 객체를 초기화하면 이후 요청들은 doFilter() 메서드를 통해 처리된다.

 

2. doFilter() : url 패턴에 맞는 모든 HTTP 요청이 Dispatcher Servlet 으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메서드.

 

3. destroy() : 필터 객체를 제거하고 사용하는 자원을 반환하기 위한 메서드

 

 

 

  • 인터셉터 (interceptor)

정의 : 요청에 대한 작업 전 / 후 로 가로챈다. 

Dispatcher Servlet 이 Controller 메서드를 호출하기 전 / 후 에 인터셉터가 끼어들어 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다. 

 

필터와의 가장 큰 차이점은 Spring Context 에서 동작한다는 것이다. 

Dispatcher Servlet 이 Handler Mapping 을 통해 컨트롤러를 찾도록 요청하는데, 그 결롸로 실행체인 (HandlerExecutionChain) 을 반환한다. 여기서 1개 이상의 인터셉터가 등록되어 있다면 순차적으로 인터셉터들을 거쳐 컨트롤러가 실행되도록 하고, 인터셉터가 없다면 바로 컨트롤러를 실행한다.

 

intercepter 메서드의 종류

 

1. preHandle() : Controller 가 호출되기 전에 실행, 컨트롤러 이전에 처리해야 하는 전처리 작업이나 요청 정보를 가공하거나 추가하는 경우에 사용할 수 있다.

 

2. postHandle() : Controller 가 호출된 이후에 실행된다. 컨트롤러 이후에 처리해야 하는 후처리 작업이 있을 떄 사용한다. 이 메서디는 컨트롤러가 반환하는 ModelAndView 타입의 정보가 제공되는데 나는 json 상하차를 위한 RestAPI 기반의 @RestController 를 이용하기에 사용할 일이 없다고 볼 수 있다. 

 

3. afterCompletion() : 모든 작업이 완료된 후에 실행. 요청 처리중에 사용한 리소스를 반환할 때 사용 가능하다.

 

따라서 Filter 는 response 와 reqeust 를 조작 할 수 있지만 Intercepter 는 처리과정이 필터와 달라서 request 와 response 객체를 넘겨 줄 수가 없다. 

 

  • AOP 

AOP 에 관한 설명은 이전 포스팅으로 대체한다

2025.04.16 - [BE/Java] - Filter 와 AOP 를 활용하여 로그 패턴 만들기

 

 

Filter 와 AOP 를 활용하여 로그 패턴 만들기

Problem솔루션 초기 설정 중에 중구난방으로 남기던 로그 체계를 통합하여 만들고자 하였다. 로그 템플릿을 만들어 놓고 그때 그때 메서드에 붙여 사용하는게 아니라 Request Method > URL 정보를 출력

goorme-green.tistory.com

 

  • 인터셉터 사용 시기:
    • HTTP 요청과 관련된 정보를 다루거나, 요청이나 응답을 조작해야 할 때
    • 인증 및 권한 검사를 수행해야 할 때
  • AOP 사용 시기:
    • 특정 메서드 호출과 관련된 공통 로직(예: 로깅, 트랜잭션 관리, 성능 측정 등)을 처리해야 할 때
    • 비즈니스 로직을 전반적으로 문서화하거나 관리할 필요가 있을 때

결론

요약하면, 인터셉터는 HTTP 요청을 처리할 때 유용하며, 요청 및 응답의 간단한 전처리를 위해 적합하다. 반면에, AOP는 비즈니스 로직에 보다 깊이 있게 개입하여 공통 관심사를 효과적으로 관리할 수 있게 한다.

상황에 따라 적절한 도구를 사용하여 구현하면 된다.

반응형