본문 바로가기
spring/spring 기초

[spring] 스프링 입문 - > AOP

by H.초보개발자 2023. 11. 4.
반응형

이 글은 인프런의 김영한 강사님의 스프링 입문- 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술의 강의 내용을 바탕으로 작성되었습니다.

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., 스프링 학습 첫 길잡이! 개발 공부의 길을 잃지 않도록 도와드립니다. 📣 확인해주세

www.inflearn.com

 

AOP를 왜 쓰는가?

  • 각 메서드마다 공통 관심사항(예를 들어 매소드 시간 측정) 구현하고 싶을 때
  • 공통 관심 사항 vs 핵심 관심 사항

AOP를 적용 안했을 경우

package hello.hellospring.aop;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class TimeTraceAop {
    
    @Around("execution(* hello.hellospring..*(..))")
    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");
        }
    }

}

스프링 aop를 생성하기 위해 class 파일을 하나를 생성했다. 일단 메서드가 호출될 때마다 시간을 호출하려고 준비를 했다.

  • @Aspect -> 스프링 aop를 사용하겠다는 어노테이션
  • @Around -> 어떤 패키지의 클래스 파일들에게 지정을 할 것인지 정하는 어노테이션

결과

결과 메서드가 실행될 때마다 시간을 프린트한 것을 확인할 수 있다.

반응형