백엔드 부트캠프/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는 핵심 비즈니스 로직과 분리된 횡단 관심사를 처리하는 데 사용되며, 서비스 계층에서 많이 사용됩니다.
이 세 가지를 적절히 활용하여 애플리케이션의 로직을 분리하고, 중복된 코드를 줄이며, 유지보수를 용이하게 할 수 있습니다.