로깅 및 API 호출 전 사용자 권한 필터 등 다양한 곳에서 로직이 호출되기 이전, 이후에 공통적으로 처리해야 할 기능들이 존재한다.
대표적인 예로 Logging, 인증, 인가, 인코딩 변환 등등이 있다.
공통적인 기능의 코드를 모든 모듈 및 페이지에서 작성하게 되면 코드의 중복이 발생하게 되고 MSA 기반에서는 각 모듈마다 다른 코드가 작성되어 관리가 힘들 수 있다.
이럴 때 filter, Interceptor, AOP를 사용할 수 있다.
🍎 Filter, Interceptor, AOP 차이 - 호출 시기

1. Filter
Filter는 Spring이 실행 되기 전에 실행되며 WAS (Tomcat) 에서 처리를 해주게 된다.
Request / Response 즉, HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 처리 한다.
따라서 아래와 같은 처리에 적합하다.
- 공통된 보안 및 인증/인가 관련 작업(XSS방어)
- 이미지/데이터 압축 및 문자열 인코딩 변환 처리
- Spring과 분리되어야 하는 기능
- 모든 요청에 대한 로깅
즉, 스프링과 무관하게 전역적으로 처리해야 하는 작업들을 처리할때 사용.
2. Interceptor
Interceptor는 Dispatcher Servlet에 N개 등록 될 수 있다. -> DS가 해당 요청을 처리 가능한 Intercepter에게 할당
(Ex. 로그인 체크, 권한 체크, 프로그램 실행시간 계산작업, 로그 확인 Interceptor)
스프링의 모든 빈 객체에 접근 할 수 있기에 아래와 같은 처리에 적합하다.
- 세부적인 보안 및 인증/인가 공통 작업 (특정 사용자는 특정 기능을 사용 못하게 막음)
- API 호출에 대한 로깅
- Controller로 넘겨주는 정보(데이터)의 가공
- 필터와 다르게 HttpServletRequest나 HttpServletResponse 등과 같은 객체를 제공받으므로 객체 자체를 조작할 수는 없다
- 대신 해당 객체가 내부적으로 갖는 값은 조작할 수 있으므로 컨트롤러로 넘겨주기 위한 정보를 가공 가능
- ex> JWT 토큰 정보를 파싱해서 컨트롤러에게 사용자의 정보를 제공하도록 가공
즉, 로그인 체크, 권한체크, 프로그램 실행시간, 계산 작업 로그 확인 등의 작업에 사용된다.
3. AOP
Interceptor와 Filter는 주소(URL)로 대상을 구분해서 걸러내야하는 반면,
AOP는 주소, 파라미터, 애노테이션 등 PointCut이 지원하는 다양한 방법으로 대상을 지정할 수 있다.
즉 URL 기반이 아닌 PointCut 단위로 동작한다.
이 때문에 비즈니스 로직의 메서드 실행 전, 후 단위까지 핸들링 할 수 있다.
참고
'Back-end > Spring' 카테고리의 다른 글
[Spring] React에서 Set-Cookie가 보이지 않아요 (0) | 2025.04.23 |
---|---|
[Spring] Docker-Compose를 활용한 CI / CD 구축 (1) | 2025.03.18 |
[Spring] com.auth0 vs jsonwebtoken.jjwt (1) | 2025.02.16 |
[Spring] JPA 벌크 연산이란? (0) | 2025.02.01 |
[Spring] Spring Batch를 활용한 배치 프로세싱 (2) | 2025.01.20 |