오봉이와 함께하는 개발 블로그
스프링 핵심 원리 - 고급편 > 프록시 팩토리 소개 본문
스프링 핵심 원리 - 고급편 > 프록시 팩토리 소개
- 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?
- 두 기술을 함께 사용할 때 부가 기능을 제공하기 위해 JDK 동적 프록시가 제공하는
InvocationHandler
와 CGLIB가 제공하는MethodInterceptor
를 각각 중복으로 만들어서 관리해야 할까? - 특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 공통으로 제공되었으면?
Q. 인터페이스가 있는 경우 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게 해야할까?
스프링은 유사한 구체적인 기술들이 있을 때 그것들을 통합해서 일관성 있게 접근할 수 있고, 더욱 편리하게 사용할 수 있는 추상화된 기술을 제공한다.
스프링은 동적 프록시를 통합해서 편리하게 만들어주는 프록시 팩토리(ProxyFactory
)라는 기능을 제공한다. 이전에는 상황에 따라서 JDK 동적 프록시를 사용하거나 CGLIB를 사용해야 했다면, 이제는 이 프록시 팩토리 하나로 편리하게 동적 프록시를 생성할 수 있다.
프록시 팩토리는 인터페이스가 있으면 JDK 동적 프록시를 사용하고, 구체 클래스만 있다면 CGLIB를 사용한다. 그리고 이 설정을 변경할 수도 있다.
Q. 두 기술을 함께 사용할 때 부가 기능을 적용하기 위해 JDK 동적 프록시가 제공하는 InvocationHandler와 CGLIB가 제공하는 MethodInterceptor를 각각 중복으로 따로 만들어야 할까?
스프링은 이 문제를 해결하기 위해 부가 기능을 적용할 때 Advice
라는 새로운 개념을 도입했다.
개발자는InvocationHandler
나 MethodInterceptor
를 신경쓰지 않고, Advice
만 만들면 된다.
결과적으로 InvocationHandler
나 MethodInterceptor
는 Advice
를 호출하게 된다.
프록시 팩토리를 사용하면 Advice
를 호출하는 전용 InvocationHandler
, MethodInterceptor
를 내부에서 사용한다.
Q: 특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 공통으로 제공되었으면?
앞서 특정 메서드 이름의 조건에 맞을 때만 프록시 부가 기능이 적용되는 코드를 직접 만들었다.
스프링은 Pointcut
이라는 개념을 도입해서 이 문제를 일관성 있게 해결한다.
출처: 김영한 지식공유자의 스프링 핵심 원리 고급편
'BE > Spring' 카테고리의 다른 글
스프링 핵심 원리 - 고급편 > 포인트컷, 어드바이스, 어드바이저 소개 (0) | 2024.09.07 |
---|---|
스프링 핵심 원리 - 고급편 > 프록시 팩토리 예제 (0) | 2024.09.07 |
스프링 핵심 원리 - 고급편 > CGLIB (0) | 2024.09.04 |
스프링 핵심 원리 - 고급편 > JDK 동적 프록시 적용 1 (0) | 2024.08.31 |
스프링 핵심 원리 - 고급편 > JDK 동적 프록시 예제 코드 (5) | 2024.08.29 |