[TIL] Self-Invocation

정석·2024년 9월 6일

TIL

목록 보기
34/40

같은 클래스 내에서 Transactional 이 설정된 메서드를 호출할 때 발생

실제 오류 화면

이유가 뭘까?

먼저 해당 오류를 이해하기 위해 프록시 라는 개념을 알고 가야했다.


Proxy ?

  • Transactional 이 설정된 곳에서 작동
  • 지연로딩시 엔티티를 불러올 때 사용되는 객체 역할을 하는 대리 객체
  • 데이터가 필요할 때 데이터베이스에서 정보를 불러옴
  • 데이터 조회를 지연시켜 성능 최적화에 이점
  • 호출이 외부에서 요청됐을 때 발생

근데 같은 클래스 내에서 Transactional 이 설정된 메서드를 사용하게 되면

메서드를 호출 할 때 프록시를 거치지 않게 된다. (프록시는 외부에서 호출이 요청됐을 때 사용되므로)

따라서 아무리 Transactional 이 설정된 메서드라도 트랜잭션이나 AOP 기능이 적용되지 않는다.


해결 방법

  1. 메서드가 불려오는 최상위 클래스에 Transactional 설정을 함
  2. 문제가 되는 메서드를 같은 클래스에서 호출되지 않도록 다른 클래스로 메서드 분리

0개의 댓글