Spring - AOP

iseon_u·2022년 6월 18일
0

Spring

목록 보기
14/31
post-thumbnail

AOP


AOP 가 필요한 상황

  • 모든 메서드의 호출 시간을 측정하고 싶다면?
  • 공통 관심 사항 (cross-cutting concern) vs 핵심 관심 사항 (core concern)
public Long join(Member member) {
	long start = System.currentTimeMillis();
	try {
			testMethod();
	} finally {
			long finish = System.currentTimeMillis();
			long timeMs = finish - start;
			System.out.println(timeMs);
	}
}

문제

  • 시간 측정 기능은 핵심 관심 사항이 아니다.
  • 시간을 측정하는 로직은 공통 관심 사항
  • 시간 측정 로직과 핵심 비즈니스 로직이 섞여서 유지보수가 어렵다.
  • 시간을 측정하는 로직을 변경할 때 모든 로직을 찾아서 변경해야 한다.

AOP 적용

AOP Aspect Oriented Programming

  • 공통 관심 사항 (cross-cutting concern) vs 핵심 관심 사항 (core concern) 분리
@Aspect
@Component
public class TimeTraceAop {
    @Around("execution(* nosleepcoders.holeinonejdbc..*(..))")
    public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
        long start = System.currentTimeMillis();
        System.out.println("START: " + joinPoint.toString());
        try {
            return joinPoint.proceed();
        } finally {
            long finish = System.currentTimeMillis();
            long timeMs = finish - start;
            System.out.println("END: " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}
profile
🧑🏻‍💻 Hello World!

0개의 댓글