백엔드 부트캠프/TIL

[내일배움캠프Spring-46일차] 필터 vs 인터셉터 vs AOP

sintory-04 2025. 4. 22. 20:51

웹 애플리케이션에서 필터(Filter), 인터셉터(Interceptor), AOP(Aspect-Oriented Programming)는 모두 요청 처리 과정에서 특정 작업을 수행하는데 사용됩니다. 이 세 가지는 비슷한 역할을 하지만, 각각의 사용 목적과 적용 시점, 동작 방식에 차이가 있습니다. 이 글에서는 각자의 역할과 차이를 정리하여 비교해보겠습니다.


1. 필터(Filter)

역할

  • 필터(Filter)는 HTTP 요청이 서블릿 컨테이너에 도달하기 전에 요청을 처리하거나, 응답을 클라이언트에게 보내기 전에 응답을 처리하는 역할을 합니다.
  • 필터는 서블릿 API의 일부로 동작하며, 요청과 응답을 직접적으로 수정하거나 가로챌 수 있습니다.

사용 예시

  • 요청 로그 기록
  • 보안 검사 (예: 토큰 검증)
  • 캐싱 처리
  • 데이터 압축

특징

  • 서블릿 컨테이너에서 동작하며, 전체 웹 애플리케이션에 적용됩니다.
  • 요청 전/후 처리를 할 수 있으며, 순차적으로 필터들이 실행됩니다.
  • 단순한 기능을 수행하는 경우 주로 사용됩니다.

2. 인터셉터(Interceptor)

역할

  • 인터셉터(Interceptor)는 스프링 MVC의 핸들러 매핑과 핸들러 어댑터 사이에서 실행됩니다.
  • 요청이 컨트롤러에 도달하기 전에 특정 로직을 실행하고, 응답이 클라이언트로 전송되기 전에 응답을 처리합니다.
  • AOP와 유사하지만, 인터셉터는 요청/응답 전처리에 집중하는 기능을 합니다.

사용 예시

  • 로그인 여부 체크
  • 인증 및 권한 체크
  • 요청 처리 시간을 측정

특징

  • 스프링 MVC에서 사용되며, 컨트롤러의 전후 처리를 수행합니다.
  • 핸들러(Controller)에서만 동작하므로 전체 애플리케이션에 적용되지 않습니다.
  • 핸들러 실행 전/후에 로직을 수행합니다.

3. AOP(Aspect-Oriented Programming)

역할

  • AOP는 관점 지향 프로그래밍으로, 특정 기능을 핵심 비즈니스 로직과 분리하여 중복되는 코드를 재사용할 수 있게 합니다.
  • 횡단 관심사(cross-cutting concerns)를 다루는데 유용하며, 예를 들어 로깅, 트랜잭션 관리, 보안 등을 처리할 때 사용됩니다.

사용 예시

  • 트랜잭션 관리
  • 로깅
  • 권한 검사 (예: Admin 권한이 필요한 서비스 메소드에 대해 권한 체크)

특징

  • 핵심 비즈니스 로직과 분리되어 재사용 가능한 코드로 관리할 수 있습니다.
  • 핸들러(Controller)와는 달리 메소드 레벨에서 로직을 적용할 수 있습니다.
  • 주로 서비스 계층에서 사용되며, 애플리케이션 전반에 걸쳐 다양한 곳에서 적용됩니다.

필터, 인터셉터, AOP 비교

특성 필터 인터셉터 AOP
동작 시점 요청 전/후 컨트롤러 전/후 메소드 실행 전/후
주요 목적 요청/응답 전처리 요청/응답 전후 처리 횡단 관심사 처리
사용 위치 서블릿 컨테이너 스프링 MVC 서비스/컨트롤러 레벨
순서 필터 체인 순차적으로 실행 요청/응답 전후 처리 순서 메소드 호출 전/후 처리
예시 보안, 로깅, 캐싱 로그인 체크, 권한 체크 트랜잭션, 로깅, 권한 체크

결론

  • 필터는 서블릿 컨테이너에서 요청/응답을 처리하는데 사용되며, 전체 애플리케이션에서 동작합니다.
  • 인터셉터는 스프링 MVC에서 요청/응답을 처리하며, 컨트롤러에 대한 전후 처리에 주로 사용됩니다.
  • AOP는 핵심 비즈니스 로직과 분리된 횡단 관심사를 처리하는 데 사용되며, 서비스 계층에서 많이 사용됩니다.

이 세 가지를 적절히 활용하여 애플리케이션의 로직을 분리하고, 중복된 코드를 줄이며, 유지보수를 용이하게 할 수 있습니다.