Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 알고리즘
- Proxy
- 자바
- 인프런
- transaction
- springdatajpa
- 그리디
- Exception
- QueryDSL
- Thymeleaf
- java
- jpa
- Greedy
- AOP
- 스프링
- SpringBoot
- Servlet
- Spring Boot
- 김영한
- JPQL
- spring
- 스프링 핵심 기능
- http
- pointcut
- db
- kotlin
- 스프링 핵심 원리
- JDBC
- 백준
- Android
Archives
- Today
- Total
개발자되기 프로젝트
[프록시 팩토리] 스프링이 지원하는 프록시 본문
1. 동적 프록시를 사용할 때의 문제점
- 인터페이스가 있는 경우에는 JDK 동적 프록시를 적용하고, 그렇지 않은 경우에는 CGLIB를 적용하려면 어떻게??
- 두 기술을 함께 사용할 때 부가 기능을 제공하기 위해
JDK 동적 프록시가 제공하는 InvocationHandler 와 CGLIB가 제공하는 MethodInterceptor 를 각각 중복으로 ?? - 특정 조건에 맞을 때 프록시 로직을 적용하는 기능도 공통으로 제공되었으면?
2. 의문??
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 이라는 개념을 도입해서 이 문제를 일관성 있게 해결한다.
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
[프록시팩토리] 프록시 팩토리-예제2, CGLIB (0) | 2021.12.31 |
---|---|
[프록시 팩토리] 프록시 팩토리 - 예제1 (0) | 2021.12.30 |
[동적 프록시] CGLIB - 구체클래스 기반 (0) | 2021.12.30 |
[동적프록시] JDK 동적프록시 - 적용2, 필터 (0) | 2021.12.30 |
[동적프록시] JDK 동적프록시 - 적용 (0) | 2021.12.30 |
Comments