본문 바로가기
개발 관련 강의 정리/10분 테코톡

[10분 테코톡] 🔥미르의 JDK Dynamic Proxy vs CGLIB Proxy 정리

by 코딩개발 2023. 5. 3.
728x90
반응형

Proxy?

클라이언트가 사용하려고 하는 대상을 실제 대상인 것처럼 위장해서 클라이언트의 요청을 받아주는 것

 

 

Proxy 기능

타깃과 같은 메서드를 구현하고 있다가 메서드가 호출되면 타깃 오브젝트로 위해준다.

지정한 요청에 대해 부가기능을 수행해준다.

 

 

Proxy 동작 과정

클라이언트 → 프록시 → 타깃

 

 

Proxy 구현 과정

클라이언트





핵심기능
인터페이스
  핵심기능
인터페이스
   ↓  ↓
  부가기능   타깃

 

 

Proxy 문제점

매번 새로운 클래스를 정의해야 한다.

타깃의 인터페이스를 구현하고 위임하는 코드를 작성하기가 번거롭다.

부가기능 코드의 중복이 생긴다.

 

 

JDK Dynamic Proxy란?

프록시 팩토리에 의해 런타임 시 다이나믹하게 만들어지는 오브젝트

프록시 팩토리에게 인터페이스 정보만 제공해주면

해당 인터페이스를 구현한 클래스 오브젝트를 자동으로 생성

인터페이스가 반드시 존재

단, 부가기능 코드는 직접 작성(InvocationHandler)

 

 

JDK Dynamic Proxy 생성 과정

 

 

CGLIB Proxy 란?

프록시 팩토리에 의해 런타임 시 다이나믹하게 만들어지는 오브젝트

클래스 상속을 이용하여 생성하기 때문에 인터페이스가 존재하지 않아도 가능

단, 부가기능 코드는 직접 작성(MethodInterceptor)

 

 

CGLIB Proxy 생성 과정

 

 

이전에 CGLIB Proxy를 사용하지 않은 이유는?

net.sf.cglib.proxy.Enhancer 의존성 추가

Default 생성자 필요

타깃의 생성자 두 번 호출

 

 

현재 CGLIB Proxy를 사용할 수 있게 된 이유는?

net.sf.cglib.proxy.Enhancer 의존성 추가

-> Spring 3.2에 Spring Core 패키지에 포함

 

Default 생성자 필요

-> Spring 4.0에 포함, Objenesis 라이브러리를 활용

 

타깃의 생성자 두 번 호출

-> Spring 4.0에 포함, Objenesis 라이브러리를 활용


참고

https://www.youtube.com/watch?v=RHxTV7qFV7M&ab_channel=%EC%9A%B0%EC%95%84%ED%95%9C%ED%85%8C%ED%81%AC

 

 

728x90
반응형

댓글