Spring AOP 용어 설명
언제 공통 관심 기능을 핵심 로직에 적용할 지를 정의하고 있다. 예를 들어, '메서드를 호출하기 전'(언제)에 '트랜잭션을 시작한다.'(공통기능)기능을 적용한다는 것을 정의하고 있다.
Target 클래스에 조인 포인트에 삽입되어져 동작(적용할 기능)할 수 있는 코드를 '어드바이스'라 한다.
관점으로서 분리되고 실행시 모듈에 위빙된 구체적인 처리를 AOP에서는 Advice라고 한다. Advice를 어디에서 위빙하는지는 뒤에 나오는 PointCut이라는 단위로 정의한다.
또한 Advice가 위빙되는 인스턴스를 '대상객체'라고 한다.
advice는 Pointcut에서 지정한 Jointpoint에서 실행되어야하는 코드이다.(특정 Joinpoint의 Aspect에 의한 동작, 대상 객체의 Joinpoint에 Weaving되어 동작할 수 있는 코드)
cp.) 스프링의 Advice 타입
이 중 널리 사용되는 것은 Around Advice이며, 그 이유는 대상 객체의 매서드를 실행하기 전/후, 익셉션 발생등 다양한 시점에 원하는 기능을 삽입할 수 있기 때문
Advice를 적용 가능한 지점을 의미한다. 메서드 호출, 필드 값 변경 등이 Joinpoint에 해당한다.
클래스의 인스턴스 생성 시점', '메소드 호출 시점', '예외 발생 시점'과 같이 어플리케이션을 실행할 때 특정 작업이 시작되는 시점을 '조인포인트'라고 한다
실행시의 처리 플로우에서 Advice를 위빙하는 포인트를 JointPoint라고 한다. 구체적으로는 메서드 호출이나 예외발생이라는 포인트를 Joinpoint라고 한다.
인스턴의 생성시점, 메소드를 호출하는 시점, Exception이 발생하는 시점과 같이 어플리케이션이 실행될 때 특정작업이 실행되는 시점을 의미한다
Joinpoint의 부분 집합으로서 실제로 Advice가 적용되는 Jointpoint를 나타낸다. 스프링에서는 정규 표현식이나 AspectJ 문법을 이용하여 Pointcut을 정의할 수 있다.
여러 개의 조인포인트를 하나로 결합한 것을 포인트 컷이라 한다.
하나 또는 복수의 Jointpoint를 하나로 묶은 것을 Pointcut 이라고 한다. Advice의 위빙 정의는 Pointcut을 대상으로 설정한다. 하나의 Pointcut에는 복수 Advice를 연결할 수 있다. 반대로 하나의 Advice를 복수 Pointcut에 연결하는 것도 가능하다.
Pointcut(교차점)은 JoinPoint(결합점)들을 선택하고 결합점의 환경정보를 수집하는 프로그램의 구조물이다. Target 클래스와 Advice가 결합(Weaving)될 때 둘 사이의 결합 규칙을 정의하는 것이다
Joinpoint가 pointcut에 일치할 때 마다 해당 Pointcout에 관련한 Advice가 실행
Advice를 핵심 로직 코드에 적용하는 것을 weaving 이라고 한다.(분리한 관점을 여러 차례 모률에 삽입하는 것을 AOP에서는 위빙 (Weaving: 엮기)이라고 부른다.) 즉 공통 코드를 핵심 로직 코드에 삽입하는 것이 weaving이다.
어드바이스를 핵심 로직 코드에 삽입하는 것을 위빙이라고 한다.
Aspect를 target 객체에 제공하여 새로운 프록시 객체를 생성하는 과정
Aspect를 대상 객체에 연결시켜 관점지향 객체로 만드는 과정, Advice를 비즈니스 로직 코드에 삽입하는 것
여러 객체에 공통으로 적용되는 공통 관심 사항을 Aspect라고 한다. 트랜잭션이나 보안 등이 Aspect의 좋은 예이다.
애플리케이션 내 여러 군데에 흩어져 있는 코드/기능 이며, 실제 비즈니스 로직과는 다름(트랙잭션 관리 등) 각 Aspect는 고유한 Cross-Cutting 기능에 초점을 맞추고 있다. 쉽게 말하면 여러 객체에 공통으로 적용되는 공통 관점 사항을 에스펙트라 한다.
Aspect는 AOP의 중심단위, Advice와 Pointcut을 합친 것이다.(Advisor)
핵심 로직을 구현하는 클래스를 말한다.
충고를 받는 클래스를 대상(target)이라고 한다. 대상은 여러분이 작성한 클래스는 물론, 별도의 기능을 추가하고자 하는 써드파티 클래스가 될 수 있다.
어드바이스와 포인트컷을 하나로 묶어 취급한 것을 '어드바이저'라 부른다.
advisor와 Pointcut을 하나로 묶어 다루는 것을 Advisor라고 한다. Advisor는 스프링 AOP에만 있는 것인데, 관점 지향에서 관점을 나타내는 개념이라고 할 수 있다.
대상 객체에 Advice가 적용된 후 생성된 객체
참고
프록시는 기존 코드를 수정하지 않고 코드 중복을 피할 수 있는 방법
언제,어디서,누가,무엇을,어떻게, 왜 할 때 AOP 걸어라.....
내가 원하는 메소드 실행할 때(언제)
객체(어디서)
로그를 찍는 기능(누가)
로그를(무엇을)
앞뒤로(어떻게)
대상: Target
적용할 기능: advice
대상의 어디에서 적용할지 구체적인 명시:pointcut
aspect와 advice의 관계(추상 명사와 구체 명사의 관계)
advice라는 코드를 내가 만들고 로그를 찍는 기능 자체를 aspect라고 한다.