개발자 키우기

AOP - 용어 정리 본문

Back-end/Springboot

AOP - 용어 정리

개발자 키우기 2023. 10. 18. 08:44

AOP는 소프트웨어 개발에서 횡단 관심사 (cross-cutting concern) 를 다루기 위한 프로그래밍 패러다임이다.

 

여러 부분에서 반복적으로 나타나는 관심사를 분리하여 모듈화 하고, 그 관심사를 효과적으로 캡슐화 및 관리한다.

 

 

Proxy ( 중개인 )

 

AOP가 적용된 객체를 감싸는 중간 객체로, 실제 객체에 대한 호출을 가로채거나 변경할 수 있게 해 준다.

 

프락시를 사용하여 Aspect가 조인 포인트에서 동작할 수 있도록 한다

 

 

Aspect ( 클래스 - 모듈화 시킨 부가기능 )

 

 횡단 관심사를 정의한 모듈 또는 클래스이다. 트랜잭션이나 로깅, 성능 체크 등을 정의한다.

 

 

JoinPoint ( 전후 - 부가기능 실행 위치 지정 )

 

애플리케이션의 실행 중에 횡단 관심사가 적용될 수 있는 특정한 지점을 나타낸다.

 

 

PointCut ( 범위 - 부가기능 실행 위치 )

 

JoinPoint의 부분집합으로 실제 Advice가 적용되는 JoinPoint를 나타낸다.

 

 

Advice ( 메서드 - 부가기능 구현체 )

 

조인 포인트에서 수행할 동작 또는 코드이다. ( @Aspect 클래스에서 작성함 )

 

@Around (전후) : 어드바이스가 타깃 메서드를 감싸서 호출 전과 후에 기능을 수행


@Before (이전) : 어드바이스 타겟 메서드가 호출되기 전에 어드바이스 기능을 수행


@After(이후) : 타겟 메서드의 결과에 상관없이 완료되면 어드바이스 기능을 수행


@AfterReturning(정상적 반환 이후) : 어드바이스 타겟 메서드가 성공적으로 리턴 후에 기능을 수행


@AfterThrowing(예외 발생 이후) : 어드바이스 타겟 메서드 수행 중 예외를 던지면 기능을 수행

 

 

@Aspect 
@Component
public class LoggingAspect {

    @Before("execution(* com.example.service.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().toShortString();
        String className = joinPoint.getTarget().getClass().getName();
        Object[] args = joinPoint.getArgs();

        System.out.println("Before method: " + methodName);
        System.out.println("Class: " + className);
        System.out.println("Arguments: " + Arrays.toString(args));
    }
}

JDK Dynamic Proxy와 CGLIB의 차이점

 

https://gmoon92.github.io/spring/aop/2019/04/20/jdk-dynamic-proxy-and-cglib.html

'Back-end > Springboot' 카테고리의 다른 글

PropertyEditor / Converter/ Formatter  (1) 2023.11.13
dispatcherservlet doDispatch 어뎁터 동작 파  (0) 2023.11.11
Spring의 주요 특징  (0) 2023.10.16
ThreadLocal 사용하기  (0) 2023.07.19
스프링 Formatter 사용  (0) 2023.07.12