java 배우기/TIL

self Invocation

checkuu 2024. 9. 6. 20:27

Spring이 작동은 하는데 lintellij 에서 노란줄로 오류문구를 내보내는 구간이 있었다.

self-invocation 이라고 뜨며 런타임시 transaction이 제대로 사용되지 않을수 있다라는 경고문 이었다.

 

해당 경고문이 뜨게 된 이유는 같은 클래스내에 있는 transactional 메서드를 사용하게 되면 메서드를 호출할때 Proxy를 거치지 않아 해당메서드의 transaction 이나 AOP 기능이 적용되지 않아 제대로 작동하지 않을 수 있기 때문이다.

 

Proxy는 지연로딩시 엔티티를 불러올때 사용되는 객체역할을 하는 대리 객체로써 데이터가 필요할 때 데이터베이스에서 정보를 불러온다. 데이터 조회를 지연시켜 성능 최적화.

외부에서 호출이 일어날때 프록시가 가로채서 해당 메서드를 감싸서 보내준다.

 

해결법은 간단하게 같은클래스내에 메서드를 사용하지 않으면 된다!

사용해야할 메서드를 다른클래스로 빼서 불러오면 된다.

 

의존성 주입같은 방법도 있었지만 아직 나한테는 클래스분리가 더쉽다

'java 배우기 > TIL' 카테고리의 다른 글

Test Coverage  (1) 2024.09.11
단위테스트 : 통합테스트  (0) 2024.09.09
팀프로젝트 like 기능 구현하기  (0) 2024.09.05
Spring 게시판 조회수 증가 코드 넣기  (0) 2024.09.04
Spring 좋아요 중복 방지  (1) 2024.09.03