AOP

현민·2022년 1월 6일
0

스프링 공부

목록 보기
4/9

인프런 김영한님의 스프링 강의를 듣고 정리한 내용입니다. 출처


AOP가 필요한 상황

핵심 비지니스 로직을 가지는 핵심 관심 사항이 아닌 모든 메소드의 호출 시간 측정 같은 공통 관심 사항을 추가해야하는 경우
모든 메서드의 시작과 끝에 시간측정코드를 추가해줘야하는데 너무 많은 시간이 소요된다. 이런 경우 AOP가 필요하다.

AOP 적용

AOP는 핵심 관심 사항과 공통 관리 사항을 분리해서 개발하는 기술이다.

위 사진처럼 시간측정같은 공통 관심 사항 같은 경우 각 메서드의 시작과 끝에 시간측정코드를 추가해주는 대신 AOP를 적용해서 시간측정코드를 분리해서 개발 할 수 있다.

예제

@Component
@Aspect
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");
        }
    }
}

@Aspect AOP 기능 사용하기위해서 필요
@Component 스프링 빈 등록 (보통 실무에서는 Config를 통해 등록하는방식을 사용)
@Around 공통 관심사항을 적용할곳 지정

AOP 동작방식

AOP 적용 전 의존관계

AOP 적용 후 의존관계

AOP 적용시 memberController 에서 memberService를 호출할때 프록시 memberService가 호출되고 joinPoint.proceed()가 호출되면 실제 memberService가 호출된다.

AOP 적용 전 전체 그림

AOP 적용 후 전체 그림

0개의 댓글