이번 코드 개선 과제에서
"어드민 사용자만 접근할 수 있는 특정 API에 접근할 때마다 접근 로그를 기록해야 한다"는 요구사항이 주어졌다.
구현 가능 방식은 두가지인데
- Interceptor
- 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 |