AOP는 정말 다양한 횡단 관심사(Cross-Cutting Concerns) 처리에 활용될 수 있어요. 우리가 흔히 떠올리는 로깅 외에도, 성능 측정, 트랜잭션, 보안, 감사(Audit), 캐싱, 리트라이, 데이터 암호화/복호화까지도 다뤄요. 💥
✅ Spring AOP를 활용할 수 있는 대표적인 시나리오들
1. 메서드 실행 시간 측정 (Performance Monitoring)
- 특정 메서드들의 성능 병목 측정
- 슬로우 쿼리 잡기
- @LogExecutionTime 커스텀 어노테이션과 함께 자주 씀
2. 트랜잭션 관리 (@Transactional은 AOP 기반)
- 선언적 트랜잭션 처리
- 메서드 진입 시 트랜잭션 시작 → 정상 반환 시 커밋, 예외 발생 시 롤백
java
복사편집
@Transactional public void saveData() { ... }
3. 보안 처리 (접근 제어, 권한 체크 등)
- 특정 권한이 있는 유저만 메서드 접근 허용
- Spring Security도 내부적으로 AOP 사용
java
복사편집
@PreAuthorize("hasRole('ADMIN')") public void adminOnlyOperation() { ... }
4. 감사 로그(Audit Trail)
- 중요한 메서드 호출이나 데이터 변경을 로그로 남김
- 사용자 ID, 요청 시간, 변경 내용 기록
5. 입력값 검증 / 자동 암호화 & 복호화
- 민감한 필드에 대한 사전/사후 처리
- 예: 주민번호, 전화번호 마스킹 처리
java
복사편집
@Around("@annotation(EncryptSensitiveData)") public Object encryptHandler(ProceedingJoinPoint joinPoint) { // 복호화 → proceed → 암호화 }
6. 리트라이 로직 (Retry)
- 실패한 외부 API 재시도
- Spring Retry + AOP 조합
java
복사편집
@Retryable(value = RemoteApiException.class, maxAttempts = 3) public String callExternalApi() { ... }
7. 멀티 테넌시 (Multi-Tenancy)
- 각 요청의 테넌트 정보를 컨텍스트에 세팅
- AOP로 모든 DAO/Repository 호출 전에 처리 가능
8. 커스텀 애노테이션 기반 공통 로직
예: @Loggable, @Sensitive, @TrackUserAction
java
복사편집
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface TrackUserAction { String value(); }
✨ 보너스: AOP + Annotation 활용 예
java
복사편집
@LogExecutionTime @TrackUserAction("게시물 조회") public PostDto getPost(Long id) { ... }
→ 각각의 애노테이션을 인식해서 실행 시간 + 사용자 활동을 자동 추적하게 할 수 있어요 💪
결론 🧠
"AOP = 공통 관심사를 깔끔하게 분리하는 힘"
복잡한 코드에서 비즈니스 로직과 인프라성 코드(로그, 트랜잭션 등)를 분리해서 유지보수성과 재사용성을 극대화할 수 있어요.
'Spring - Spring Boot' 카테고리의 다른 글
스프링 초기 데이터 세팅하는 방법 정리 (0) | 2025.03.07 |
---|---|
GlobalException으로 예외처리하기 (0) | 2025.02.17 |
Spring 과 톰캣 (1) | 2025.01.08 |
@PrePersist에 대하여 (0) | 2025.01.07 |
Spring - Spring Boot - Swagger 설정하기 (0) | 2024.12.12 |