Target의 기능을 수행하면서 기능을 확장하거나 추가된 실제 객체를 의미합니다.
Spring은 AOP기능을 Proxy 기반으로 제공하고 있습니다.
JDK Dynamic Proxy와 CGLIB을 활용하여 AOP를 제공하고 있습니다.

Object proxy = Proxy.newProxyInstance(
ClassLoader,
Class<?>[],
InvocationHandler
);
구체적인 class type을 몰라도 그 class의 method, type, variables에 접근할 수 있는 기능
동적으로 class를 load하고, heap에 객체를 생성하는 절차가 있어 성능 이슈가 있는듯?!
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(Target.class);
enhancer.setCallback(MethodInterceptor);
Object proxy = enchancer.create(); // proxy 생성
Enhander 의존성 추가, default 생성자 필요, target의 생성자 2번 호출의 단점으로 인해 Spring에서는 CGLIB를 권장하지 않음.
Spring 3.2버전부터 Spring Core 패키지에 cglib가 포함되었고,
4버전에는 Objensis의 도움으로 default 생성자 없이 proxy 생성할 수 있고,
생성자가 2번 호출되는 단점도 개선되었다고 합니다.
cglib의 한계들이 개선되어 Spring에서는 성능이 좋은 CGLIB로 Proxy를 생성하게 되었다고 합니다.