2022/12/12-13 TIL | AOP

    반응형

    💭 오늘의 학습 전략

    # AOP

    필요한 이유

     용어

     ◻ Aspect

     ◻ JoinPoint

     ◻ Advice

     ◻ Pointcut

     ◻ Advisor

     ◻ Weaving

     ◻ Target

     ◻ AOP Proxy

     타입별 Advice

     Pointcut 표현식

     JoinPoint

    ◽ 애너테이션을 이용한 AOP

     실습

    🌼 학습한 것들

    ◾ AOP 필요한 이유

     - 비즈니스 클래스에 공존하는 핵심 관심사 + 횡단 관심사 분리

    => 보다 객체지향적으로

    ◾ AOP 용어

     - Aspect: 여러 Advice + Pointcut. 앱에 포함되는 모듈화된 횡단 기능

     - JoinPoint: 앱 실행 흐름에서 AOP 적용 가능한 특정 포인트(Spring은 프록시 방식으로 메서드 실행 지점으로 제한)

     - Advice: JoinPoint에서 수행되는 코드

     - Pointcut: JoinPoint 중 Advice가 적용될 위치 선별, AspectJ 표현식 사용

     - Advisor: 하나의 Advice + Pointcut (Spring AOP에서만 사용)

     - Target: 핵심 기능 모듈 ==> 부가기능을 부여할 대상. Advice 받는 객체

     - Weaving: Advice를 핵심코드에 적용하는 것(Pointcut으로 결정한 Target의 JoinPoint에)

     - AOP Proxy: AOP 기능을 구현하기 위해 만든 프록시 객체, 대상 객체 원본을 대체

     타입별 Advice

     - Before: JoinPoint 실행 이전. 예외 발생 시 대상 객체 메서드 호출 불가

     - AfterReturning: JoinPoint 실행 완료 이후.

     - AfterThrowing: 대상 객체 메서드가 예외 던진 경우

     - After: JoinPoint 동작 결과와 상관없이 실행 (finally 느낌)

     - Around: 대상 객체 메서드 전후에 수행, 가장 강력. try-catch-finally 처리 가능.

           Advice 첫번째 파라미터 타입은 ProceedingJoinPoint

     Pointcut 표현식

     - AspectJ가 제공하는 포인트컷 표현식을 줄여서 표현

     - ex) @Pointcut("execution(* hello.aop.order..*(..))")

        @Pointcut("execution(* hello.aop.service.*.*(..))

        @Pointcut(public * *(..))

     - 포인트컷 지시자: execution, whthin, args 등등 보통 execution. 추후에 필요할 때 찾아보기

     JoinPoint

     - 추상적 개념. AOP 적용 가능 지점

     - Spring AOP는 프록시 방식 => JoinPoint는 메서드 실행 지점으로 제한

     - JoinPoint 인터페이스: getArgs(), getThis(), getTarget(), getSignature() ...

                        * Signature 객체: getName(), toLongString(), toShortString() ...

     - ProceedingJoinPoint 인터페이스: proceed()

    🔥 보충이 필요한 것들

    ◽ 애너테이션을 이용한 AOP

     

     

    💨 하루를 마치며

    1. 제일 처음 컨텐츠를 읽을 때는 너무 복잡한 용어들 때문에 헷갈렸고, 개념은 알아도 실행되는 방식에 대한 이해가 전혀 되지 않았다.

    2. 실습과 테스트를 거치면서 동작 방식을 이해할 수 있어서 좋았다. Pointcut을 따로 빼서 사용하거나, 이름으로 다른 Pointcut의 참조식을 포함하는 등 여러가지 방식으로 Pointcut을 설정해가면서 실습해보면서 이해가 빠르게 됐다.

    3. 어제는 조금 답답한 기분이 있었지만 오늘 마무리세션에서 한 번 더 그림과 함께 설명을 들으니까 처음보다 확실히 와닿아서 기뻤다!!

    4. 그나저나 예전에 로깅을 어떻게 했던 건지 궁금하다.ㅠㅠ AOP를 사용하지는 않았는데,, 알 수 있는 방법이 없담

    반응형

    댓글