- Spring에서 프록시 사용 32022년 11월 14일
- starryeye
- 작성자
- 2022.11.14.:40
반응형이번 포스팅에서는 CGLIB를 통한 동적 프록시 기술에 대해 알아보겠다.
JDK 동적 프록시 기술에서는 인터페이스가 있어야 동적으로 프록시를 만들 수 있는
제약 사항이 있었다..
이를 위한..
CGLIB 동적 프록시 기술!!
-> 구체 클래스를 상속해서 프록시를 만든다.
CGLIB는 바이트 코드를 조작하여 동적으로 클래스를 생성하는 기술을 제공하는 라이브러리이다.
CGLIB는 원래 외부 라이브러리 이지만..
스프링 프레임워크가 스프링 내부 소스 코드에 포함하여.. 따로 라이브러리 추가 없이 사용 가능 하다.

JDK 동적 프록시의 InvocationHandler 인터페이스와 비슷하게..
CGLIB 동적 프록시는 MethodInterceptor 인터페이스를 제공한다.
역시.. reflection 기술을 사용하는 것을 볼 수 있다.
기본 사용법은 JDK 동적 프록시와 동일하다.
파라미터..
Object var1 : CGLIB가 적용된 객체
Method var2 : 호출된 메서드
Object[] var3 : 메서드를 호출하면서 전달된 인수
MethodProxy var4 : 메서드 호출에 사용
실제 사용 예시를 통해 알아보자..

MethodInterceptor 구현은 InvocationHandler와 비슷하다.
특이점은..
method 파라미터와 methodProxy 파라미터 중..
methodProxy를 사용하는 것이다.
(methodProxy는 내부에서 최적화 하는 코드가 있다. 성능상 우월하다.)

이제.. 프록시를 직접 생성해보는 부분이다.
14 line, 인터페이스가 없는 실제 target 구현체를 생성해주고 있다.
16 line, CGLIB에서 프록시를 생성해주는 객체이며 생성하였다.
17 line, 어떤 클래스 대상인지.. 지정한다.
18 line, 프록시 클래스의 실제 target 객체 지정
19 line, 프록시 객체 생성
24 line, 프록시의 메서드를 호출한다.
(ConcreteService의 프록시 적용 메서드의 이름이다.)
-> MethodInterceptor의 intercept 메서드가 호출 될 것이다..
제약 사항..
Spring에서 프록시 사용 1 포스팅에서.. 알아본..
"2. 등록될 스프링 빈의 인터페이스가 없고.. 그냥 그 객체 자체가 수동 등록 되어 있을 경우"
의 제약사항을 그대로 받는다.
-> 부모 클래스에 기본 생성자가 필요하다.
-> 부모의 클래스에 final 키워드 -> 예외 발생
-> 부모 클래스의 메서드에 final 키워드 -> 프록시 적용안됨.
그리고..
JDK 동적 프록시 때와 동일하게..
현재 프록시를 만들때 여전히.. 뭔가 복잡하다..
(@Configuration에서 수동 빈 등록을 해주면서 프록시를 직접 만들어내는 코드를 작성 해줘야함)
반응형'Spring > Core' 카테고리의 다른 글
Spring에서 프록시 사용 5 (0) 2022.11.20 Spring에서 프록시 사용 4 (0) 2022.11.19 Spring에서 프록시 사용 2 (0) 2022.11.14 Spring에서 프록시 사용 1 (0) 2022.11.05 Spring에서 자주 쓰이는 디자인 패턴 5 (0) 2022.11.05 다음글이전글이전 글이 없습니다.댓글