AOP란?
AOP란 Aspect-Oriented Programming의 약자로, 횡단 관심사를 모듈화하여 코드의 가독성을 높이고, 유지보수를 용이하게 하는 프로그래밍 기법이다. 주로 로깅, 보안, 트랜잭션 관리와 같은 기능에 사용된다.
AOP와 어노테이션
@Aspect
@Aspect 어노테이션은 AOP의 핵심 요소인 Aspect를 정의한다. Aspect는 공통 관심사를 포함하는 모듈로, 메서드 실행 전후에 특정 동작을 정의할 수 있다.
@Aspect
public class MyAspect {
// Advice 메서드 정의
}
@Pointcut
@Pointcut 어노테이션은 특정 Join Point를 정의한다.
Join Point는 Advice가 적용될 수 있는 지점을 의미하며, 포인트컷 표현식을 통해 정의할 수 있다.
@Pointcut("execution(* com.yn.app.biz..*Impl.*(..))")
public void logPointcut() {} // 참조 메서드
@Before
@Before 어노테이션은 지정한 포인트컷 이전에 실행될 Advice를 정의한다.
이 어노테이션을 사용하여 메서드 호출 전에 특정 동작을 수행할 수 있다.
@Before("PointcutCommon.serviceMethods() && !PointcutCommon.selectAllMethods()")
public void DBaccess() {
System.out.println("DB 접근 발생!");
}
@After
@After 어노테이션은 지정한 포인트컷 이후에 실행될 Advice를 정의한다.
메서드 실행 후에 동작을 수행해야 할 때 사용한다.
@After("PointcutCommon.cudMethods()")
public void DBupdate() {
System.out.println("DB 변경 완료!");
}
@Around
@Around 어노테이션은 메서드 실행 전후에 동작을 정의할 수 있는 Advice이다. 이 어노테이션을 사용하면 메서드를 직접 호출하고, 그 결과를 조작할 수 있다.
@Around("serviceLayer()")
public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
System.out.println("메서드 실행 전");
Object result = joinPoint.proceed(); // 실제 메서드 호출
System.out.println("메서드 실행 후");
return result;
}
@AfterReturning
@Around 어노테이션은 메서드 실행 전후에 동작을 정의할 수 있는 Advice이다. 이 어노테이션을 사용하면 메서드를 직접 호출하고, 그 결과를 조작할 수 있다.
@AfterReturning(pointcut = "PointcutCommon.selectReturnDTO()", returning = "returnObj")
public void logDTO(JoinPoint jp, Object returnObj) {
System.out.println("서비스 기능 반환 발생!");
System.out.println("메서드명: " + jp.getSignature().getName());
if (returnObj != null) {
System.out.println("반환된 DTO: " + returnObj.toString());
} else {
System.out.println("반환된 DTO가 없습니다.");
}
}
@AfterThrowing
@AfterThrowing 어노테이션은 메서드 실행 중 예외가 발생했을 때 호출되는 Advice이다. 예외 처리 로직을 작성할 때 유용하다.
@AfterThrowing(pointcut = "serviceLayer()", throwing = "error")
public void afterThrowingAdvice(JoinPoint joinPoint, Throwable error) {
System.out.println("메서드 실행 중 오류 발생: " + error.getMessage());
}
'Spring' 카테고리의 다른 글
[Spring] Multipart & 파일 업로드 (1) | 2024.10.23 |
---|---|
[Spring] 커스텀 어노테이션 (1) | 2024.10.23 |
[Spring] AOP 관점지향 프로그래밍 (1) | 2024.10.15 |
[Spring] Ajax를 이용한 비동기 처리와 아이디 중복검사 구현 (0) | 2024.10.14 |
[Spring] Tomcat Server 기동 시 Listener와 Spring IoC Container의 초기화 과정 (0) | 2024.10.10 |