From 0af9f8047489471450b983b3a764bab8d34c8ff1 Mon Sep 17 00:00:00 2001 From: rumos Date: Thu, 5 Sep 2024 20:55:26 +0900 Subject: [PATCH] =?UTF-8?q?[test]=20=EB=A9=94=EC=84=9C=EB=93=9C=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EC=8B=9C=EA=B0=84=20=EC=B8=A1=EC=A0=95=20?= =?UTF-8?q?AOP=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../puangbe/common/annotation/ExeTimer.java | 11 ++++++ .../puangbe/common/util/ExecutionTimer.java | 37 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 src/main/java/gdsc/cau/puangbe/common/annotation/ExeTimer.java create mode 100644 src/main/java/gdsc/cau/puangbe/common/util/ExecutionTimer.java diff --git a/src/main/java/gdsc/cau/puangbe/common/annotation/ExeTimer.java b/src/main/java/gdsc/cau/puangbe/common/annotation/ExeTimer.java new file mode 100644 index 0000000..60c4d4b --- /dev/null +++ b/src/main/java/gdsc/cau/puangbe/common/annotation/ExeTimer.java @@ -0,0 +1,11 @@ +package gdsc.cau.puangbe.common.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ExeTimer { +} diff --git a/src/main/java/gdsc/cau/puangbe/common/util/ExecutionTimer.java b/src/main/java/gdsc/cau/puangbe/common/util/ExecutionTimer.java new file mode 100644 index 0000000..f758df6 --- /dev/null +++ b/src/main/java/gdsc/cau/puangbe/common/util/ExecutionTimer.java @@ -0,0 +1,37 @@ +package gdsc.cau.puangbe.common.util; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; +import org.springframework.util.StopWatch; + +@Slf4j +@Aspect +@Component +public class ExecutionTimer { + // 조인포인트를 어노테이션으로 설정 + @Pointcut("@annotation(gdsc.cau.puangbe.common.annotation.ExeTimer)") + private void timer(){}; + + // 메서드 실행 전,후로 시간을 공유해야 하기 때문 + @Around("timer()") + public void AssumeExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { + + StopWatch stopWatch = new StopWatch(); + + stopWatch.start(); + joinPoint.proceed(); // 조인포인트의 메서드 실행 + stopWatch.stop(); + + long totalTimeMillis = stopWatch.getTotalTimeMillis(); + + MethodSignature signature = (MethodSignature) joinPoint.getSignature(); + String methodName = signature.getMethod().getName(); + + log.info("실행 메서드: {}, 실행시간 = {}ms", methodName, totalTimeMillis); + } +}