스프링 AOP
2024. 5. 16. 12:42ㆍ스프링
반응형
AOP가 필요한 경우
- 모든 메소드의 호출 시간을 측정 하려고 한다. 근데 모든 메소드에 시간 측정 로직을 추가하려면 너무 많은 시간이 소모된다.
public List<Member> exampleMethod(){
long start = System.currentTimeMillis();
try{
//메소드 로직 ...
}finally{
long finish = System.currentTimeMillis();
long timeDiff = finish - start;
System.out.println("메소드 걸린시간 " + timeDiff);
}
}
메소드가 수천개 있으면 위와 같은 작업을 수천개 해야한다. 이때 필요한게 AOP다. 위에 메소드에서 시간 측정하는 로직은 모든 메소드의 공통 관심 사항이다. 그리고 각 메소드의 로직은 핵심 관심 사항이다.
/*
@Aspect의 어노테이션이 붙은 클래스 Advisor(어드바이저)
메서드는 Advice
@Around는 Pointcut으로 Advice를 적용할 대상
어드바이스를 사용하기 위해서는 꼭 proceed() 메소드를 호출 해줘야 한다.
*/
@Aspect // @Aspect 어노테이션을 이용하여 AOP를 적용
@Component //빈으로 등록해야한다. 컴포넌트 스캔으로 빈 등록
public class TimeTraceAop{
@Around("execution(* hello.hellospring..*(..))")//hello.hellospring 밑에 모든 메소드에 적용
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable{
long start = System.currentTimeMillis();
try{
return joinPoint.proceed();// 실제 메소드 호출
}finally{
long finish = System.currentTimeMillis();
long timeDiff = finish - start;
System.out.println("메소드 걸린시간 " + timeDiff);
}
}
위에 aop를 통해서 각 메소드가 호출되기전에 인터셉트를 하여 실제 메소드가 실행되는 시간을 측정했다. 시간을 측정하는 공통 관심사항 로직이 각 메소드 마다 추가할 필요없어서 핵심 관심사항과 분리가 되어 훨씬 깔끔해졌다.
반응형
'스프링' 카테고리의 다른 글
객체 지향 프로그래밍- SOLID (1) | 2024.05.23 |
---|---|
스프링 spring (0) | 2024.05.16 |
스프링 jdbc 템플릿 (0) | 2024.05.16 |
스프링부트 테스트 (0) | 2024.05.14 |
DI 주입 방법 (0) | 2024.05.14 |