빈 후처리기에 프록시 객체 질문 있습니다.
135
작성자 없음
작성한 질문수 0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
[질문 내용]
안녕하세요 강사님
훌륭한 강의 항상 잘 보고 있습니다.
다름이 아니라, 이번에 빈 후처리기와 프록시 패턴에 대해 질문이 있습니다.
아래와 같이 빈 후처리기에서 A 객체를 A 프록시로 바꿔치기 해서 스프링 빈에 저장하고, A 프록시를 싱글톤으로 관리한다라고 이해했습니다.
이때, 궁금한 부분이
A 프록시가 A 객체를 상속받아서, 부가기능인 advisor 기능을 추가한 A 프록시라는 객체를 새롭게 생성해서 스프링 빈으로 등록을 한다라고 이해하면 되는건가요?
예를 들어, A 클래스가 A 메소드만 구현한 클래스라면
A 프록시 객체는 A메소드와 A advisor라는 부가기능이 추가된 클래스같은 형태로 구현되고, 스프링 빈으로 등록된다고 이해를 하면 되는건가요??

왜냐하면, 제가 이해한게 맞다면, 아래와 같이
proxy가 advisors를 호출한 뒤에, target을 호출한다는 개념이 잘 이해가 되질 않습니다.
proxy가 target의 비지니스 로직도 가지고 있고, advisor도 가지고 있는 객체라서 proxy에서 내부적으로 로직을 다 처리하면 되는 것 아닌가요??
설명 부탁드립니다 감사합니다

답변 1
0
안녕하세요, 인프런 AI 인턴입니다. blackhole124님께서 질문 주신 내용은 스프링에서의 프록시 객체가 빈 후처리기를 통해 어떻게 생성되고, 그것이 어떤 식으로 동작하는지에 관한 것입니다.
빈 후처리기와 프록시 생성
빈 후처리기는 스프링 컨테이너에서 빈을 등록할 때 그 객체를 가로채고 새로운 프록시 객체로 대체할 수 있는 메커니즘을 제공합니다. 이렇게 생성된 프록시 객체는 원래 객체(A 객체)의 메서드를 호출하기 전후로 부가적인 로직을 추가하여 실행할 수 있습니다. 이를 통해 AOP(Aspect-Oriented Programming)의 다양한 기능들을 구현할 수 있습니다.
Proxy와 Advisor의 동작
실제 프록시는 원래의 타겟 객체를 감싸고 있어서, 클라이언트가 요청을 할 때 이 프록시를 통해 타겟 객체의 메서드가 호출됩니다. 프록시는 리턴하기 전에 주어진 어드바이스(advice)를 처리할 수 있는 역할을 담당합니다.
프록시의 역할: 프록시는 스프링 컨테이너에 의해 생성되고, 클라이언트 요청을 받아서 어드바이스를 실행한 후 실제 비즈니스 로직인 타겟 객체의 메서드를 호출합니다. 이는 지정된 포인트컷(pointcut)이 매칭될 때만 실행됩니다.
프록시 구조 이해: 프록시는 타겟의 비즈니스 로직을 포함하고 있을 뿐 아니라, 어드바이저(advisor)를 통해 추가적인 로직(advice)을 실행할 수 있습니다. 이는 프록시가 실제 타겟 메서드가 호출되기 전후에 해당 조언을 실행함으로써 가능합니다.
여러분의 이해를 돕기 위한 추천 게시물
프록시와 빈 후처리기의 작동 방식에 대한 보다 깊이 있는 이해를 돕기 위해 다음의 유사 질문들을 참고하세요:
- ### 빈 후처리기 질문
- ### 프록시 관련해서 질문이 있습니다.
이 질문들을 통해 프록시의 생성 시기, 방법, 그리고 이는 어떻게 빈으로 등록되는지를 보다 자세히 알게 되실 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
어드바이스 순서 디폴트 기준이 궁금합니다.
0
52
1
AspectV1 예제를 @Configuration 수동 등록으로도 가능한가요?
0
78
2
구체 클래스를 상속받아 확장한 형태도 클래스패턴/데코레이터 패턴이라고 칭하나요?
0
52
1
TraceTemplate 을 미리 빈으로 등록해서 사용할때 이렇게 설정하는게 맞는건가요?
0
53
1
Decorator 에서 추상메서드로 뺄때 질문 있습니다.
0
56
1
대상 클래스에 기본 생성자가 없을 때
0
74
1
스프링 부트 버전 4.0 aop 의존성 명칭 변경
1
350
2
final 키워드 사용 관련 질문
0
76
1
안녕하세요
0
64
1
ThradLocal 실무 사례
0
97
2
실무에서의 동시성 문제
0
62
1
로그 등 부가 기능에 대한 테스트코드
0
50
1
ProceedingJoinPoint와 MethodInvocation에 대하여
0
67
1
실무 멀티스레딩에 대한 궁금증
0
69
1
안녕하세요 질문있습니다
0
44
1
AspectV3 aop 실행 순서 문의 드립니다
0
38
1
MDC vs AOP 중에 고민중입니다.
0
74
1
순환참조
0
158
2
this를 단독으로 사용할때랑 파라미터 바인딩 할때 차이
0
77
1
빈 후처리에 등록 질문 있습니다.
0
75
1
AppConfig 설정하는 설명중에 이해가 안되는게 있습니다.
0
88
1
ThreadLocal을 지역변수로 선언하면 remove가 필요할까요?
0
117
2
@Aspect 어노테이션으로 생성된 Advisor의 Bean 저장 여부
0
67
1
ThreadLocal 사용시 부작용이 있을수 있을까요? (ThreadLocal.remove()를 잘한다고 해도..)
0
73
2





