Spring/응용

[코드 개선 과제] Interceptor vs AOP, 어떤 방식이 더 적합할까?

가지코딩 2025. 6. 11. 23:33

이번 코드 개선 과제에서

"어드민 사용자만 접근할 수 있는 특정 API에 접근할 때마다 접근 로그를 기록해야 한다"는 요구사항이 주어졌다.

 

구현 가능 방식은 두가지인데

  1. Interceptor
  2. AOP(Aspect-Oriented Programming)

두 방식 모두 공통 관심사를 분리할 수 있는 기술이지만, 적용 범위와 방식에는 명확한 차이가 있다.

 

두 기술 중 어떤 방식이 이번 과제 더 적합한지 분석하여 정리해보고자 한다.

 

참고: https://gajicoding.tistory.com/374

 

Interceptor vs AOP(Aspect Oriented Programming)

Spring에서는 공통 기능을 모듈화하기 위한 여러 방법을 제공한다.그 중 많이 사용되는 두 가지가 바로 Interceptor와 AOP(Aspect-Oriented Programming)이다.이 글에서는 두 개념의 차이점과 사용 목적을 명확

gajicoding.tistory.com


과제 요구사항

 

 

요구사항 분석

  • "어드민 사용자만" → 사용자 인증 정보 기반 조건
  • "특정 API" → 지정된 컨트롤러 메서드에만 적용
  • "접근할 때마다 로그 기록" → 메서드 실행 시점에서 로그 필요

Interceptor vs AOP 판단 기준

판단 기준 Interceptor AOP
1. 사용자 인증 정보 활용  HttpServletRequest, HttpSession 직접 사용 가능 ✅ 기본 메서드 실행 중심, 별도 처리 필요 ⚠️
2. 특정 API(메서드 단위)
필터링
URL 패턴 기반, 메서드 단위 제어 어려움 ❌ 포인트컷으로 메서드·어노테이션 단위 정밀 제어 가능 ✅
3. 로그 기록 시점 요청 전후 모두 가능 ✅ 실행 전후 및 예외 시점 모두 가능 ✅
4. 유지보수 및 확장성 간단한 공통처리에 적합, 복잡해지면 어려움 ⚠️ 공통 관심사 분리 우수, 확장성 높음 ✅

✅ 결론

"어드민 사용자만 접근할 수 있는 특정 API에 접근할 때마다 접근 로그를 기록해야 한다"

→ 이 경우 AOP가 더 적합하다.

 

  • 특정 API에만 로그 → AOP의 포인트컷으로 정확히 메서드 지정 가능
  • 어노테이션 기반 조건 (@AdminLog) 도입 가능
  • JoinPoint를 통해 메서드명, 파라미터, 리턴값, 예외 등 로그 가능

 

+ JWT Filter에서 이미 인증 처리 중인 상황

  • 인증과 권한 검증은 JWT Filter가 HTTP 요청 단계에서 완료한다.
  • 따라서 AOP는 인증 없이, 이미 인증된 사용자 정보를 활용해 접근 로그 기록에만 집중할 수 있어 역할 분리가 명확하다.

 

 

Interceptor 사용 시 단점

  • 특정 API만 골라내기 어렵다 (패턴 매칭은 URI 단위뿐)
  • @RestController, 메서드명 등 세밀한 필터링 불가
  • JWT Filter에서 이미 인증 처리 중인데 Interceptor에서 또 인증/권한 검사 로직이 섞이면 책임이 모호해진다.

 

 

'Spring > 응용' 카테고리의 다른 글

Spring 로그 레벨(Log Level)  (1) 2025.06.18
Spring Boot 프로젝트에서 Redis 연동 하기  (0) 2025.06.04