스프링 고급 W7 - 스프링AOP

Sorbet·2022년 2월 23일
0

  • 이번주에는 정말 너무너무 바빠서 손글씨로 정리했습니다ㅠ

추가

프록시는 두가지 방식이 있다

  • 두가지 프록시 구현방식의 장단점을 비교하면
  • 프록시 사용예시
    • Spring data jpa 프로젝트 : spring boot 와 무관하게 repostiroy를 자체적으로 jdk 동적 프록시를 이용해서 생성하고 있습니다
  • 참고로스프링은 CGLib을 쓴다 성능때문에
    • 성능비교 JDK-Dynamic vs CGLIB (코드추가 필요 @@)

CGLIB 기반 Dynamic Proxy 구현 방식

  • 코드 생성 라이브러리(Code Generator Library), 런타임에 동적으로 자바 클래스의 프록시를 생성해주는 기능
  • 장점
    • 실제 바이트 코드를 조작하여 JDK Dynamic Proxy 보다 상대적으로 빠르다.
    • 대상 객체가 인터페이스를 가지지 않았을 경우 사용한다.
    • 인터페이스를 가져도 사용할 수 있다. aop:config의 proxy-target-class를 true로 설정.
    • 대상 객체가 정의한 모든 메서드를 프록시 하여야하는 경우 사용한다.
  • 제약
    • 버전별 호환성이 좋지 않다. (사용 라이브러리 내부에 내장시켜 제공한다.)
    • final이나 private 같이 상속된 객체에 Overriding을 제공하지 않는다면 해당 행위에 대해서 Aspect를 적용할 수 없다.
  • CGLIB Dynamic Proxy 를 사용하는 라이브러리
    • Spring Boot AOP (Proxy)
    • Hibernate

JDK Dynamic Proxy 기반 Dynamic Proxy 구현방식

  • JDK Dynamic Proxy?
    • Java 에서 지원하는 동적(런타임) Proxy 구현 방식이다.
    • 특정 인터페이스들을 구현하는 클래스나 인스턴스를 만드는 기술이다.
    • Reflection API을 사용하여 Target Class의 method를 invoke()를 통해 동작시킨다.
  • invoke?(해석 : 부르다)
    • 클래스의 이름과 인자 값을 넘겨서 객체의 메서드를 실행시키는 메서드이다.
    • 인자 값을 이용하여 메서드를 실행시키게 된다.
  • 제약
    • 인터페이스 기반의 Proxy → 모든 Target Class 는 Interface를 implement 하고 있어야 한다.
  • JDK Dynamic Proxy 단점
    • Advise 대상이든 아니든 모든 Method Call 마다 reflection API의 invoke를 실시한다.
    • 다시말해 Method invoke를 우선 진행하고 Advise 유무를 판단한다.
  • JDK Dynamic Proxy 를 사용하는 라이브러리
    • Spring AOP ProxyFactory ( JDK Dynamic Proxy 를 추상화하고 재정의한 Class)
    • Spring Data JPA RepositoryFactorySupport (BeanClassLoaderAware, BeanFactoryAware)

출처: https://lob-dev.tistory.com/entry/Java에서-구현할-수-있는-Proxy-들-Pure-JDK-CGLIB

profile
Sorbet is good...!

0개의 댓글