지난번에 이어서 이번에는 AOP의 주요 용어에 대해서 알아보려고 합니다. :)
 
 
1. 타겟 (Target) 
 -. 부가기능(어드바이스)을 부여할 대상 (객체를 의미함)
 -. 비즈니스 로직을 수행하는 클래수일 수도 있고, 프록시 객체가 될 수도 있음.
 -. 핵심기능을 담당하는 getBoards 혹은 getUsers를 하는 Service
 
2. 애스펙트 (Aspect) 
 -. 구현하고자 하는 횡단 관심사의 기능, 부가기능 모듈 (객체지향 모듈을 오프젝트라 부르는것과 비슷) 
 -. 핵심기능에 부가되어 의미를 갖는 특별한 모듈
 -. 어드바이스와 포인트컷을 함께 갖고 있음.
 ※ AOP(Aspect Oriented Programming)라는 뜻 자체가 어플리케이션의 핵심적인 기능에서 부가적인 기능을 분리해서
    애스팩트라는 독특한 모듈로 만들어서 설계하고 개발하는 방법을 말함.
 
3. 어드바이스 (Advice) 
-. 실질적으로 부가기능을 담은 구현체(애스펙트의 구현체 / 부가될 기능 정의)
-. 어드바이스의 경우 타겟 오프젝트에 종속되지 않기 때문에 순수하게 부가기능에만 집중 가능
-. 애스펙트가 '무엇'을 '언제' 할지를 정의
-. 어드바이스는 조인포인트와 결합하여 동작하는 시점에 따라 5개로 구분
 
Before Advice : 조인포인트 전에 실행되는 advice
After returning advice : 조인포인트에서 성공적으로 리턴 된 후 실행되는 advice
After throwing advice : 예외가 발생하였을 경우 실행되는 advice
After advice : 조인포인트에서 메서드의 실행결과에 상관없이 무조건 실행되는 advice, 자바의 finally와 비슷한 역할
Around advice : 조인포인트의 전 과정(전, 후)에 수행되는 advice
 
4. 포인트컷 (PointCut) 
-. 부가기능(어드바이스)이 적용될 대상(메소드)를 선정하는 방법
-. 어드바이스를 적용할 조인포인트를 선별하는 기능을 정의한 모듈
-. 패턴매칭을 이용하여 어떤 조인포인트를 사용할 것인지 결정
 
5. 조인포인트 (JoinPoint) 
-. 애스펙트를 삽입하여 어드바이스가 적용될 수 있는 위치
-.  Spring에서는 메소드 조인포인트만 제공 (메소드를 가리킨다고 생각해도 무방)
   (무조건 메소드 단위로만 지정)
 
6. 프록시 (Proxy) 
-. 타겟을 감싸서 타겟의 요청을 대신 받아주는 랩핑(Wrapping) 오브젝트
-. 호출자 (클라이언트)에서 타겟을 호출하게 되면 타겟이 아닌 타겟을 감싸고 있는 프록시가 호출되어,
   타겟 메소드 실행전에 선처리, 타겟 메소드 실행 후, 후처리를 실행시키도록 구성되어있음.
  (AOP에서 프록시는 호출을 가로챈 후, 어드바이스에 등록된 기능을 수행 후 타겟 메소드를 호출함.)
 
7. 인트로덕션 (Introduction) 
-. 타겟 클래스에 코드 변경없이 신규 메소드나 멤버변수를 추가하는 기능
 
8. 위빙 (Weaving) 
-. 지정된 객체에 애스팩트를 적용해서 새로운 프록시 객체를 생성하는 과정
-. 컴파일 타임, 클래스로드 타임, 런타임과 같은 시점에서 실행되지만, Spring AOP는 런타임에서 프록시 객체가 생성됨.