← 질문 목록
#46깊이 0

스프링 AOP의 프록시 자기 호출 시 무엇이 문제인가?

프레임워크심화설계 원칙

대상 객체가 자기 메서드를 부르면 프록시를 거치지 않는다. 이 호출에는 AOP 부가 기능이 동작하지 않는다.

  1. 1. 외부 호출에서 프록시로: AOP 부가 기능 적용
  2. 2. 프록시에서 대상 객체로: 실제 로직 호출
  3. 3. 대상 객체에서 대상 객체로: **자기 호출**. this로 내부 메서드를 직접 불러 AOP 누락

스프링은 기본적으로 CGLIB이나 JDK Dynamic Proxy를 사용해 대상 객체를 감싸는 프록시를 만든다. 외부에서 호출할 때만 이 프록시로 진입하며, 클래스 내부에서 다른 메서드 호출 시에는 this로 직접 호출한다.

이로 인해 @Transactional이나 @Cacheable이 붙은 내부 메서드를 this로 호출하면 프록시의 가로채기(intercept)를 건너뛰어, 그 호출에는 트랜잭션 전파나 캐시 부가기능이 적용되지 않는다.

해결책은 로직을 별도 서비스로 빼서 프록시를 거치게 하는 것이다. 자기 자신을 다시 주입하는 방식도 있지만 결합도가 높아진다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

스프링 AOP의 프록시 자기 호출 시 무엇이 문제인가?