본문 바로가기
BackEnd/spring

[Spring] AOP 테스트

by 하용권 2023. 12. 21.

이번에 회사에서 AOP에 관한 테스트 코드를 작성하다가 겪은 문제입니다.

 

로깅을 위해 AOP를 많이 이용합니다.

근데 AOP가 동작하는 지 테스트를 하려면 어떻게 해야 할까요?

 

 

이런 코드가 있고, redis에 어떤 값이 들어가거나 꺼낼 때 로깅을 하고 싶다고 가정해보겠습니다.

 

간단하게만 작성했습니다. AOP를 이용하면 이러한 코드가 나올 것 입니다.

 

근데 Redis에 관해 어떠한 설정도 없이 AOP가 작동하는 지 테스트하고 싶으면 어떻게 할까요?

 

저는 처음에 MockBean을 이용하려고 했습니다.

하지만 AOP의 부분은 동작하지 않았습니다.

 

이렇게 만든 repository가 다른 취급되는 지 궁금해서 한 번 출력해봤습니다.

이렇게 나오는데, 그러면 AOP의 Around 조건에 만족한다고 저는 생각했습니다. 하지만 AOP가 작동하지 않았죠.

 

 

 

해결책

 

일단, 해결법 부터 보겠습니다.

이렇게 하면,

작 동작하는 것을 알 수 있습니다. 왜 이러한 결과가 나왔을까요?

 

보시면, 뒤에 SpringCGLIB이라는 것이 붙은 것이 보입니다. 이는 AOP에 이용되는 proxy 객체입니다.

앞에서 봤던 거랑 다른 것을 알 수 있습니다.

 

MockBean에는 proxy 객체로 랩핑되지 않는 것을 확인할 수 있었습니다.

 

그 이유까지는 코드를 찾아봐야 하는데.... 거기까진 못하겠네요. 나중에 기회가 되면 해봐야 겠습니다.

 

만약 찾아본다면, AOP 에서 bean을 어떻게 찾아서 proxy 객체로 감싸는지 봐야될 것 같습니다. 그리고 MockBean이 언제 실행되는 지도 보면 좋을 것 같습니다.

 

 

반응형