스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 (7) AOP

강아람·2022년 8월 17일
0

스프링 개발 입문

목록 보기
7/7
post-thumbnail

AOP

📚 AOP가 필요한 상황

  • 모든 메소드의 호출 시간을 측정하고 싶다면?
  • 공통 관심 사항(cross-cutting concern) vs 핵심 관심 사항(core concern)
  • 회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?

공통 관심 사항과 핵심 관심 사항을 분리


공통 관심 사항 (cross-cutting concern)

  • 어플리케이션 전반에 걸쳐 적용되는 공통 기능
  • 핵심 비즈니스 로직과 구분되는 기능

핵심 관심 사항 (core concern)

  • 어플리케이션의 핵심 비즈니스 로직



📚 AOP 적용

AOP (Aspect Oriented Programming)

1. AOP code (예. 메서드 수행 소요 시간 계산)

@Aspect
public class TimeTraceAop {

    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("finish : " + joinPoint.toString() + " " + timeMs + "ms");
        }
    }
}

2. Spring bean에 등록

🔸 직접 Spring bean에 등록

@Bean
    public TimeTraceAop timeTraceAop() {
        return new TimeTraceAop();
    }

🔸 @Component 어노테이션 사용

@Aspect
@Component
public class TimeTraceAop {
	...
}

@Around 어노테이션

@Around("execution(* hello.hellospring..*(..))")
: hello.hellospring 패키지 내의 모든 메서드에 적용


main() 실행

AOP 적용

  • AOP 적용 전 의존 관계
  • AOP 적용 후 의존 관계

0개의 댓글