오늘이라도

[VII. AOP] 25. AOP 적용 본문

인프런/스프링 입문 (김영한)

[VII. AOP] 25. AOP 적용

upcake_ 2022. 1. 13. 16:39
반응형

https://github.com/upcake/hello-spring

강의 링크

 

* 오늘의 단축키 & 기능


1. AOP 적용

- AOP : Aspect Oriented Programming

- 공통 관심 사항 (cross-cutting concern) vs 핵심 관리 사항 (core concern) 분리

 

- 시간 측정 AOP 등록

//AOP로 사용할 때 붙는 어노테이션
@Aspect
//component-scan으로 사용해도 되나 config에 등록해서 사용하는 것을 더 선호한다
@Component
public class TimeTraceAop {

    //실행 대상 등록 : 모든 패키지에 적용한다
    //* 패키지명..밑에있는거클래스명등등에게(파라미터타입)
    @Around("execution(* com.upcake.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");
        }
    }
}

 

- 스프링 설정에 빈 등록해서 사용해도 되고 컴포넌트 스캔으로 사용해도 된다

//    이런 식으로 설정에 등록해서 사용해도 된다.
//    @Bean
//    public TimeTraceAop timeTraceAop() {
//        return new TimeTraceAop();
//    }

 

- 적용된 로그

 

- 해결

  ① 회원가입, 회원 조회 등 핵심 관심사항과 시간을 측정하는 공통 관심 사항을 분리한다.

  ② 시간을 측정하는 로직을 별도의 공통 로직으로 만들었다.

  ③ 핵심 관심 사항을 말끔하게 유지할 수 있다.

  ④ 변경이 필요하면 이 로직만 변경하면 된다.

  ⑤ 원하는 적용 대상을 선택할 수 있다.

 

2. 스프링의 AOP 동작 방식 설명

- 프록시 : 가짜 스프링 Bean 이라고 생각하면 된다

반응형