🕊️ Spring AOP 사용하기

메서드 실행 시간을 측정하는 다음과 같은 코드가 있다고 가정해 봅시다.


long startTime = (System.currentTimeMillis());
//YOUR LOGICAL CODE
long executionTime = (System.currentTimeMillis() - startTime) / 1000;
LOGGER.info("Time taken for calculation is : {} seconds", executionTime);


이 반복되는 코드를 모든 메서드에 추가하는 것은 매우 비효율적인 방법입니다. 그럼, 메서드 위에 어노테이션을 다는 것만으로도 이 코드를 모두 포함할 수 있다고 말씀드리면 어떨까요?


먼저, Spring AOP가 가능하게 다음과 같은 라이브러리를 추가해 주세요.


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>


이제 ExecutionTimeLogger라는 이름으로 스프링 부트에서 커스텀 어노테이션을 작성해 보겠습니다. 보시다시피 어노테이션은 런타임에 작동하며 메서드 수준에서 적용할 수 있습니다.


@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExecutionTimeLogger {
}


이제 Aspect로 동작하는 클래스를 만들어 보겠습니다. 이 클래스는 메서드 실행 시간을 계산할 수 있는 로직을 갖고 있습니다. Aspect를 사용하는 방법에는 여러가지가 있고, @Before, @After, @Around, @Pointcut 등의 어노테이션을 상황에 따라 사용할 수 있습니다.


아래 코드와 같이 클래스 ExecutionTimeLoggerAspect를 생성하고 @Aspect로 어노테이션을 달았습니다.


@Aspect
@Component
public class ExecutionTimeLoggerAspect {

@Around("@annotation(ExecutionTimeLogger)")
public Object executionTimeLogger(ProceedingJoinPoint joinPoint) {

// 실행 시간 계산하는 로직
}
}


필요한 구성은 모두 완료 되었습니다. 이제 우리가 할 일은 메서드 실행 시간을 캡처하고 싶은 곳이면 어디든지 이 어노테이션을 사용하는 것입니다. 메서드의 실행 시간을 측정하고 싶다면, 아래 코드와 같이 메서드 위에 어노테이션을 추가해 주세요!


public class CustomLoggingService {


@ExecutionTimeLogger
public void myMethod() {

//YOUR LOGICAL CODE
}
}


쉽지 않나요? 얼마나 많은 시간과 노력이 절약되는지 상상해 봅시다. 요약하자면, 우리가 한 일은 다음과 같습니다.


  1. 커스텀 어노테이션 작성

  2. @Aspect 클래스 생성 후 실행 시간을 계산하는 메서드 포함하기

  3. 이 메서드를 @Around로 선언

  4. 실행 시간을 기록할 메서드에 이 어노테이션 달기

Capture Method Execution time in Spring Boot

Medium

Capture Method Execution time in Spring Boot

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 12월 4일 오후 1:26

 • 

저장 31조회 4,806

댓글 0

    함께 읽은 게시물

    🎙️NotebookLM 해설 - 진격의 AI, 개발자는 자멸할까?

    G

    ... 더 보기

    - YouTube

    youtu.be

     - YouTube

    <👩🏻‍💻 신규 개발자가 입사 첫 달에 해야 할 7가지>

    어느 환경에서든 첫인상은 중요합니다. 첫인상으로 인해 생긴 이미지는 추후에 쉽게 바뀌지 않는데요, 회사에서도 예외는 아닙니다. 입사 초기에 보이는 모습에 따라 ‘실력자’라는 인상을 줄 수도, ‘일 못하는 사람’으로 낙인찍힐 수도 있죠. 입사 첫 달은 이러한 첫인상을 결정짓는 중요한 시기입니다. 더 나아가서는 이 시기가 앞으로 이 회사에서의 성공을 좌우할 수도 있어요. 신규 개발자가 새 직장에서 첫 시작을 잘 끊기 위해서 해야 할 7가지 일을 선정해 보았습니다! 1️⃣ 상사의 기대치 파악하기 입사 초반에는 ... 더 보기

    신규 개발자가 입사 첫 달에 해야 할 7가지

    Brunch Story

    신규 개발자가 입사 첫 달에 해야 할 7가지

     • 

    댓글 5 • 저장 621 • 조회 18,140



    < 💡 Spring Rest Docs 로 Swagger API 문서 관리 자동화 > 💬 Spring Rest Docs 란? Spring REST Docs 는 RESTful 서비스의 문서화를 도와주는 도구이다. 문서 작성 도구로 Asciidoctor 를 기본적으로 사용하며, 이것을 통해 HTML 문서를 생성한다. 필요한 경우 Markdown 문법을 사용하도록 변경할 수 있다. RESTful API를 문서화 할때 중요한 포인트는 API 에서 필요한 HTTP 요청과 응답의 리소스를 설명하는 것인데 Spring REST Docs 를 사용할 경우 테스트 코드를 작성하여 이러한 리소스와 HTTP 요청/응답에 대한 세부 내용을 문서화하는데 편리한 기능을 제공한다. 💬 Swagger 란? RESTful API 를 약속된 규칙에 따라 json 이나 yaml 형식으로 문서화한 Open API Specification(OAS) 라는게 있는데 이 문서를 관리하기위한 목적으로 만들어진 프레임워크다. API 문서 자동화 도구로 Spring REST Docs 의 비교군으로 자주 등장하는데 Spring 을 사용할 경우 서비스 코드에 어노테이션... 더 보기

    [NHN FORWARD 2020] MSA 환경에서 API 문서 관리하기: 생성부터 배포까지

    www.youtube.com

    [NHN FORWARD 2020] MSA 환경에서 API 문서 관리하기: 생성부터 배포까지


    여러분 PostgreSQL 프로시저는 Python, JavaScript은 물론 Perl, Java, Lua 등도 사용할 수 있답니다~* 대부분 구식🤭 MySQL만 쓰셔서 모르시겠지만.. (도망간다)