프록시 팩토리란 무엇일까?
자바 공부와 디자인 패턴을 공부하면서 깨달은 것이 한가지 있다.
공통적으로 사용되는 변수들은 대체적으로 단순하고 직관적이다.
@@팩토리 라고 붙은 변수들은 말 그대로 @@를 공장처럼 찍어내는 역할을 한다.
그렇다면 프록시 팩토리는 무슨 역할을 하겠는가?
프록시를 만들어내는 역할을 한다.
프록시 팩토리는 클라이언트로부터 요청이 왔을 때,
인터페이스 기반인 JDK 동적 프록시를 생성할지 클래스 기반인 CGLIB를 호출할 지 선택해 반환해준다.
이 로직이 어떻게 가능한가.
JDK 동적 프록시를 생성할 때와 CGLIB를 생성할 때의 이후에 동일한 로직이 호출되게 해주면 된다.
아직 이유는 정확히 모르겠지만 AOP에서는 인터페이스가 있어도 CGLIB를 주로 호출한다고 한다.
이에 대한 방법은 프록시 팩토리의 proxyTargetClass라는 옵션에 true 값을 넣으면 된다고 한다.
스프링 AOP에서 쓰는 단어 정리
- 포인트컷 (pointcut)
- 내가 이해하기로는 필터다.
- 어떤 포인트(point)에 기능을 적용(cut)할지 정하는 필터이다.
- 주로 클래스와 메서드명으로 필터링 한다.
- 해당 어드바이스를 적용할지 안할지에 대한 기준이다.
- 어드바이스 (advice)
- 프록시의 존재 이유. 부가 기능 그 자체이다.
- 프록시의 로직
- 어드바이저 (advisor)
- 1개의 포인트컷 + 1개의 어드바이저
- 세트 메뉴이다.
그림으로 보면 더 이해가 잘된다.
프록시는 여러 기능을 체인처럼 쓸 수 있다는 장점이 있다.
하지만 프록시를 계속 만들어내야해서 불편했다.
이에 대해 프록시 팩토리는 하나의 프록시에 여러 어드바이저를 적용할 수 있도록 만들어두었다.
보통 스프링 AOP는 하나의 프록시에 여러 어드바이저를 적용해 불필요한 프록시 생성을 막는다고 한다.
전체적인 내용은 끝이다. 이후 코드단을 추가하도록 하겠다.
'Spring > 이론' 카테고리의 다른 글
[스프링 고급] 빈 후처리기 (0) | 2024.01.23 |
---|---|
[스프링 기초] Bean, 의존성 주입 DI에 대한 나만의 고찰 (0) | 2024.01.23 |
프록시 형태 별 차이 (인터페이스 VS 클래스) (0) | 2024.01.04 |
[JPA] 응답 값으로 DTO를 전달해야 하는 이유 (0) | 2023.10.04 |
[JPA] 준영속 엔티티란? 더티체킹이란? (0) | 2023.09.14 |