이번에 회사에서 AOP에 관한 테스트 코드를 작성하다가 겪은 문제입니다.
로깅을 위해 AOP를 많이 이용합니다.
근데 AOP가 동작하는 지 테스트를 하려면 어떻게 해야 할까요?
이런 코드가 있고, redis에 어떤 값이 들어가거나 꺼낼 때 로깅을 하고 싶다고 가정해보겠습니다.
간단하게만 작성했습니다. AOP를 이용하면 이러한 코드가 나올 것 입니다.
근데 Redis에 관해 어떠한 설정도 없이 AOP가 작동하는 지 테스트하고 싶으면 어떻게 할까요?
저는 처음에 MockBean을 이용하려고 했습니다.
하지만 AOP의 부분은 동작하지 않았습니다.
이렇게 만든 repository가 다른 취급되는 지 궁금해서 한 번 출력해봤습니다.
이렇게 나오는데, 그러면 AOP의 Around 조건에 만족한다고 저는 생각했습니다. 하지만 AOP가 작동하지 않았죠.
해결책
일단, 해결법 부터 보겠습니다.
이렇게 하면,
작 동작하는 것을 알 수 있습니다. 왜 이러한 결과가 나왔을까요?
보시면, 뒤에 SpringCGLIB이라는 것이 붙은 것이 보입니다. 이는 AOP에 이용되는 proxy 객체입니다.
앞에서 봤던 거랑 다른 것을 알 수 있습니다.
MockBean에는 proxy 객체로 랩핑되지 않는 것을 확인할 수 있었습니다.
그 이유까지는 코드를 찾아봐야 하는데.... 거기까진 못하겠네요. 나중에 기회가 되면 해봐야 겠습니다.
만약 찾아본다면, AOP 에서 bean을 어떻게 찾아서 proxy 객체로 감싸는지 봐야될 것 같습니다. 그리고 MockBean이 언제 실행되는 지도 보면 좋을 것 같습니다.
'BackEnd > spring' 카테고리의 다른 글
[Spring] redis stream (0) | 2024.12.17 |
---|---|
[Spring] @Value @SpringBootTest 없이 테스트하는 법 (0) | 2024.02.28 |
[Spring] 빈 주입 null pointer exception 발생 (0) | 2023.08.22 |
[인프런] 스프링 핵심 원리 고급편(김영한) 정리 (0) | 2023.07.30 |
[인프런] 스프링 핵심원리 기본편(김영한) 정리 (0) | 2023.07.28 |