처음부터 시작하는 Java
  • 시간 측정하는 간단한 aop
    2022년 12월 22일 12시 01분 26초에 업로드 된 글입니다.
    작성자: 원2
    728x90
    반응형

    시스템이 느리거나 각 로직별 시간 측정이 필요한 경우

    aop 를 사용하여 측정 가능

    노가다 안해도 됌

    package com.example.whystd.aop;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.springframework.stereotype.Component;
    
    // Aspect 를 적어줘야 aop로 사용가능
    // Component 사용하면 Component 스캔되어 빈 등록
    @Aspect
    @Component
    public class TimeTraceAop {
    
        @Around("execution(* com.example.whystd..*(..))")
        public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
    
            long start = System.currentTimeMillis();
            System.out.println("START : " + joinPoint.toString());
            try {
                //joinPoint.proceed() 다음 메소드로 진행
                return joinPoint.proceed();
    
            } finally {
                long finish = System.currentTimeMillis();
                long timeMs = finish - start;
                System.out.println("END : " + joinPoint.toString() + " " + timeMs + "ms");
            }
        }
    }
    

    around 

     

    안에 있는 건 패키지 하위의 모든 것을 말함

    예를 들어 현재 상태에서 service 만 체크 하려면 

    @Around("execution(* com.example.whystd.service.*(..))")

    이런식으로 하면 된다,


     

     

    직접 빈을 등록한다면 아래처럼 하면 끝

    /*    // aop 직접등록법
        @Bean
        public TimeTraceAop timeTraceAop() {
            return new TimeTraceAop();
        }*/

     

    그 후 어떤 로직을 실행하면 아래처럼 뜬다

    시간이 오래걸리는 것을 찾아 병목현상을 해결하자ㅇㅇ

     

    728x90
    반응형

    'Spring > Spring boot' 카테고리의 다른 글

    JPA 로 데이터 액세스  (0) 2022.08.17
    mariadb로 데이터 액세스  (0) 2022.08.16
    Restful 웹 서비스 구축  (0) 2022.08.16
    스프링부트 개념정리 2  (0) 2022.07.27
    스프링부트 개념정리  (0) 2022.07.26
    댓글