AOP(Aspect Oriented Programming) 심화

이정연·2023년 2월 12일
0

기본지식

목록 보기
8/10

애플리케이션 로직은 크게 핵심기능과 부가기능으로 나뉜다.
AOP는 그 중 부가기능으로 핵심기능을 보조하기위해 사용된다.

AOP가 필요한 이유

  • 소프트웨어 개발에서 변경 지점은 하나가 될 수 있도록 잘 모듈화 되야 함.
  • 일반적인 OOP 방식으로는 해결이 어렵기 때문에 핵심 기능과 부가 기능을 분리하는 AOP 방식이 필요함.

애스펙트 = 포인트 컷 + 어드바이스

조인포인트

  • 애플리케이션의 실행흐름에서의 특정 포인트
  • 새로운 동작의 추가를위해 조인포인트에 관심코드 추가 가능.
  • 스프링 AOP는 프록시 방식을 사용하므로 조인포인트는 항상 메소드 실행시점으로 제한
  • 어드바이스 적용이 필요한 곳은 애플리케이션 내에 메서드를 갖는다.
  • 적용 가능 지점 : 생성자, 필드 값 접근, static 메서드 접근, 메서드 실행
  • 생성자, 필드값 접근, static 메서드 접근에는 프록시 개념이 적용될 수 없다.

joinpoint 인터페이스의 주요 기능

  • JoinPoint.getArgs() : JoinPoint에 전달된 인자를 배열로 반환합니다.
  • JoinPoint.getThis() : AOP 프록시 객체를 반환합니다.
  • JoinPoint.getTarget() : AOP가 적용된 대상 객체를 반환합니다.
  • JoinPoint.getSignature() : 조언되는 메서드에 대한 설명을 반환합니다.
  • JoinPoint.toString() : 조언되는 방법에 대한 유용한 설명을 인쇄합니다.
@Slf4j
@Aspect
public class Aspect1 {

    @Around("execution(* start.aop.order..*(..))")
    public Object logging(ProceedingJoinPoint joinPoint) throws Throwable { <----------
        log.info("log -> {}", joinPoint.getSignature());
        return joinPoint.proceed();
    }
}

@Around를 썼으니까 이 메서드는 어드바이스임
그리고 @Around를 썼기 때문에 첫 파라미더는 ProceedingJoinPoint이어야함!
joinpoint는 인자로써 설정해준다.

어드바이스

  • 조인포인트에서 수행되는 코드
  • Aspect를 언제 핵심 코드에 적용할 지를 정의함
  • 시스템 전체 에스펙트에 API호출을 제공함
  • 모든 메소드를 로그로 남기기 위해서 메소드를 호출하기전 메소드 시작전을 조인포인트로 설정함
  • 부가기능

포인트 컷

  • 조인포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능
  • AspectJ 표현식 사용
  • 프록시를 사용하는 스프링 AOP는 메서드 실행 지점만 포인트컷으로 선별
  • 메서드 반환 타입은 void여야 한다.

위빙

  • 포인트컷으로 결정한 타겟의 조인 포인트에 어드바이스를 적용하는 것
  • 핵심기능 코드에 영향을 주지 않고 부가기능을 추가할 수 있음

RTW(Run-Time Weaving)

  • spring AOP의 기본 설정임, proxy사용 방법으로 Runtime시 핵심코드와 Advice를 호출한다.

CTW(Compile-Time Weaving)

  • AspectJ 모듈에서 지원되는 방식으로 핵심코드와 Advice를 Compile시에 병합(Merge)한다.

LTW(Load-Time Weaving)

  • AspectJ 모듈에서 지원되는 방식으로 프로세스가 시작될 때 핵심코드와 Advice를 조합한다.

AOP 프록시

  • AOP기능을 구현하기 위해 만든 프록시 객체
  • 스프링에서 AOp 프록시는 JDK 동적 프록시 또는 CGLIB프록시입니다.

타겟

  • 핵심기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 된다.
  • Advice를 받는 객체이고 포인트컷으로 결정

어드바이저(Advisor)

  • 하나의 어드바이스와 하나의 포인트 컷으로 구성됨.
  • 스프링 AOP에서만 사용되는 특별한 용어임
profile
반갑습니다.

0개의 댓글