이 세 가지는 실행되는 시점과 관리되는 영역(Context)에서 가장 큰 차이가 남.

인터셉터는 DispatcherServlet과 Controller 사이에서 요청을 가로채는 역할을 함.
주요 메서드
preHandle(): 컨트롤러 실행 전. 리턴값이 false이면 요청을 중단.
postHandle(): 컨트롤러 실행 후, View 렌더링 전. 컨트롤러에서 예외 발생 시 호출되지 않음.
afterCompletion(): 모든 작업(View 렌더링 포함) 완료 후. 예외 발생 여부와 상관없이 실행되어 리소스 해제에 적합다.
핵심 포인트: 인터셉터는 스프링 빈에 접근할 수 있어, Filter보다 더 상세한 스프링 관련 로직을 처리하기 좋음.
AOP는 "관점 지향 프로그래밍"으로, 비즈니스 로직에 숨어있는 공통 관심사(Cross-cutting Concerns)를 모듈화하는 기술.
주요 용어 정리
Aspect: 공통 기능을 모듈화한 것 (Advice + Pointcut).
Advice: 실제로 수행할 기능 (로직).
JoinPoint: Advice가 적용될 수 있는 위치 (메서드 실행, 필드 값 변경 등).
Pointcut: JoinPoint 중에서 실제로 Advice를 적용할 지점을 선정하는 표현식.
Advice의 실행 시점
@Before: 대상 메서드 실행 전.
@After: 결과와 상관없이 메서드 종료 후.
@AfterReturning: 메서드가 정상적으로 반환된 후.
@AfterThrowing: 예외가 발생했을 때.
@Around: 메서드 실행 전후를 모두 제어 (가장 강력함).
Filter는 스프링 외부(웹 레이어)에서 가장 먼저 요청을 처리할 때 사용.
Interceptor는 컨트롤러와 관련된 공통 로직(로그인 여부 등)을 처리할 때 사용.
AOP는 메서드 단위의 세밀한 제어가 필요하거나 비즈니스 로직(Service 계층)의 중복을 제거할 때 사용.
세 가지 개념이 모두 '가로챈다'는 점에서 비슷해 보이지만, 각각의 목적지와 영향 범위가 명확히 다르다. 특히 보안 로직은 Filter에서, 비즈니스 로깅은 AOP에서 처리하는 것이 왜 효율적인지 배울 수 있었다.