DevJong12

[기능구현] Method의 실행 시간을 확인해보자 본문

카테고리 없음

[기능구현] Method의 실행 시간을 확인해보자

Jong12 2024. 1. 27. 17:34
728x90

목차

     

    1️⃣ 개요

    회사에 입사하고 코드를 분석을 하고 있었는데, 도저히 분석만 하고 있을 수 없고 리팩토링을 진행할 수밖에 없는 환경이었다.

    회사 코드를 보여줄수 없으나, 발생하는 문제가 비즈니스 로직이 20N + 1, 15N + 1 을 로직에서 직접 구현을 하고 있었다(아니 JPA를 쓰면서, 왜 이해를 못하고 쓰는데..)

     

    그러다 보니 10개, 20개를 조회하는데도 쿼리가 200번, 400번 , 데이터가 좀 많으면 수만건의 Select절을 실행하고 있었다.

    그리 생긴 결과물은, 데이터가 거의 없음에도 API의 요청이 10초~ 15초~ 20초~ 가지각생으로 매우매우 느린상황이었다.

     

    그래서 내가 선언한 어노테이션이 달려있는 메소드들만의 실제 실행 시간을 확인해보고자 기능을 구현하게 되었다...

     

    APM등의 부가적인걸 붙여볼 수 있는 환경이면 좋겠지만 아무런 모니터링툴도 설치하지 못하고 Local을 통해 테스트만 가능한 환경이어서 AOP를 채택하게 되었다.


    2️⃣ 환경사항 

    • JDK 17
    • Spring Boot 3.2.0

    3️⃣ 필요 의존성

    AOP가 필요하나, Security, JPA등 Spring프로젝트 대부분에 AOP가 존재하여 의존해 사용해도 상관은 없다.
    하지만 직접 관리하는게 용이하니, 필자의 경우 AOP를 추가하였다.
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-aop'
    }

     


    4️⃣ 코드 구현

    다시보니 매우간단하네...ㅋㅋㅋㅋ


    5️⃣ 사용방법 및 결과물

    사용방법은 아래의 이미지처럼 실제 실행 시간을 측정하고 싶은 메소드에 위에서 생성했던 어노테이션인 @TimeCheck 어노테이션을 선언하면 된다.

     

     

    또한 실제 요청을 발송하게 될 경우 아래처럼 실제 호출한 메소드와 실행 시간을 확인해 볼 수 있게 된다.

     


    6️⃣ 글을 마치며

    이게 세네번 할 때 까지는 별로 필요성을 못느꼈는데, 로직체크하려고 매번 작성하다보니 너무 불편함을 느껴서 만든 기능인데 너무 편했었다.  기능자체가 간단해서 사실 별다르게 적을건 없는데..  이걸 만들어서까지 확인해야 할 정도로 느린걸 주구장창 만들었다면... 다시 기본적인 개념을 공부해야 할 사람이지 않을까 싶다...

     

    소스코드 레벨에서부터 자신의 코드가 얼마나 나쁜 습관의 코드인지를 모르는 것이니까... 해당 기능을 계속쓰면서 성능체크를 하면서 다시금 코드를 작성할 때는, 생각을 깊게 하면서 작성해야하는걸 체감했다...

    728x90
    Comments