JDK Dynamic Proxy vs CGLib 비교

이재윤·2024년 12월 4일
0

AOP

목록 보기
2/2

Spring AOP는

1) JDK Dynamic Proxy
2) CGLIB

을 활용하여 AOP를 제공합니다.
JDK Dynamic Proxy와 CGLIB은 모두 런타임 위빙 방식이며,
프록시 패턴으로 동작합니다.

각각에 대해서 좀 더 자세히 살펴보겠습니다.

1) JDK Dynamic Proxy

  • JDK Dynamic Proxy는 인터페이스를 기반으로 Proxy를
    생성해주는 방식입니다.
    따라서 타겟 클래스의 인터페이스가 필요합니다.

  • 이 때, 리플렉션의 Proxy 클래스가 동적으로 Proxy를 생성해준다하여
    JDK Dynamic Proxy라는 이름을 갖게 되었습니다.

2) CGLIB

  • CGLIB은 타겟 클래스를 상속 받아 Proxy를 구현합니다.
    따라서 타겟 클래스의 인터페이스가 따로 필요 없습니다.
  • CGLIB은 바이트 코드를 조작하여, Proxy를 생성하기 때문에,
    성능에 대한 부분이 JDK Dynamic Proxy보다 좋습니다.

3) 스프링 부트의 선택 - CGLib

  • 스프링 부트는 Spring 3.2버전부터 CGLib을 Spring Core 패키지에
    포함시켜 제공합니다.

  • 기존의 CGLib에는 다음과 같은 3가지 문제점이 있었습니다
    (1) net.sf.cglib.proxy.Enhancer 의존성 추가
    (2) default 생성자 필수
    (3) 타깃의 생성자 두 번 호출

  • 현재는 이러한 문제들이 해결되어서,
    스프링 부트의 기본 패키지에 포함되었습니다.

참고자료
1) JDK Dynamic Proxy와 CGLib를 알아보자#2 (https://velog.io/@suhongkim98/JDK-Dynamic-Proxy%EC%99%80-CGLib)
2) JDK Dynamic Proxy와 CGLIB의 차이점은 무엇일까?
(https://gmoon92.github.io/spring/aop/2019/04/20/jdk-dynamic-proxy-and-cglib.html)
3) [Spring] Spring의 AOP 프록시 구현 방법(JDK 동적 프록시, CGLib 프록시)과 @EnableAspectJAutoProxy의 proxyTargetClass - (3/3)
(https://mangkyu.tistory.com/175)

0개의 댓글