Interceptor 0 스프링 MVC의 HTTP 요청 처리에 특화됨.

  • 요청이 컨트롤러에 도달하기 전(preHandle), 컨트롤러 처리 후(postHandle), 뷰 렌더링 후(afterCompletion) 등 HTTP 요청 생명주기에 맞춰 동작.
  • 웹 계층에서만 동작하며, 주로 URL 패턴 기반으로 특정 요청에 적용(예: /api/**).
  • 스프링 컨텍스트 내의 컨트롤러 호출과 관련된 작업에 국한.

AOP

  • 스프링 전반에 걸쳐 모든 빈의 메서드 호출에 적용 가능.
  • 특정 클래스, 메서드, 패키지, 어노테이션 등 다양한 포인트컷(Pointcut)을 정의해 세밀한 적용 가능.
  • 웹 계층뿐만 아니라 서비스, 리포지토리 계층 등 스프링 빈이 동작하는 모든 곳에서 사용 가능.

Interceptor

  • HandlerInterceptor 인터페이스를 구현하고, WebMvcConfigurer를 통해 URL 패턴에 등록.
  • preHandle, postHandle, afterCompletion 메서드를 통해 요청/응답 처리 시점에 개입.

AOP

  • @Aspect 어노테이션을 사용해 Aspect를 정의하고, 포인트컷(Pointcut)어드바이스(Advice)를 설정.
  • @Before, @After, @Around 등 다양한 시점에서 메서드 실행 전/후/주변에 로직 적용.

Interceptor:

  • 웹 요청 관련 공통 로직: 인증/인가, 로깅, 요청/응답 헤더 수정, CORS 처리.
  • 예: API 요청마다 JWT 토큰 검증, 요청 처리 시간 로깅, 응답에 공통 메타데이터 추가.
  • /api/admin/** 경로에 대해 관리자 권한 체크.
  • 모든 API 요청에 X-Request-Id 헤더 추가.

AOP:

  • 비즈니스 로직 관련 공통 로직: 서비스/리포지토리 계층의 메서드에 대한 로깅, 트랜잭션 관리, 예외 처리, 성능 모니터링.
  • 예: 모든 서비스 메서드 실행 시간 측정, 특정 어노테이션이 붙은 메서드에 트랜잭션 적용.
  • @Transactional 대신 AOP로 커스텀 트랜잭션 로직 적용.
  • UserService의 모든 메서드 호출 시 입력/출력 데이터 로깅.

Interceptor: 스프링 MVC의 웹 요청 처리에 특화, HTTP 요청/응답과 관련된 공통 로직(인증, 로깅, 헤더 수정)에 적합. AOP: 스프링 애플리케이션 전반의 비즈니스 로직 관련 공통 관심사(트랜잭션, 로깅, 예외 처리)에 적합, 더 유연하고 세밀한 적용 가능. 실무 선택 기준: 웹 요청 처리는 Interceptor, 서비스/리포지토리 계층의 공통 로직은 AOP. 두 기능을 조합해 사용하는 경우도 많음.