• 티스토리 홈
starryeye
  • 프로필사진
    starryeye
    • 분류 전체보기 (189)
      • C++ (17)
      • Java (24)
      • OOP (5)
      • Spring Reactive Stack (12)
        • Reactive Streams (3)
        • Netty (4)
        • Reactor (1)
        • Webflux (3)
        • DB, Cache 연동 (1)
      • Spring (90)
        • Core (17)
        • MVC (33)
        • Client (2)
        • Security (4)
        • DB, Cache 연동 (33)
      • DataBase (12)
        • RDBMS (2)
        • NoSQL (10)
      • Message Broker (6)
      • Web (4)
      • Network (4)
      • 대규모 시스템 설계 (15)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Spring에서 프록시 사용 3
        2022년 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
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바