문제
서버에서 아래와 같이 'Cannot find cache named '로 시작하는 캐시 에러가 발생했다.
java.lang.IllegalArgumentException: Cannot find cache named 'cutoffDate' for Builder[public void com.OperationUtil.removeCutoffDateCache(java.lang.String,java.lang.String)] caches=[cutoffDate] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='',false,false
at org.springframework.cache.interceptor.AbstractCacheResolver.resolveCaches(AbstractCacheResolver.java:92)
at org.springframework.cache.interceptor.CacheAspectSupport.getCaches(CacheAspectSupport.java:252)
에러 난 곳을 확인해보니 @CacheEvict("cutoffDate")나 @Cacheable("cutoffDate") 어노테이션이 붙은 곳이었다.
@CacheEvict와 @Cacheable는 org.springframework.cache.annotation 패키지에 있는 것을 사용하였다.
Caffeine Cache를 사용하지 않고 스프링 자체 Cache 기능을 사용하고 있었다.
원인
처음에는 Caffeine Cache와 CacheManager를 추가해줘야 하는 줄 알았다.
하지만 스프링 부트에서는 자동으로 CacheManager 빈을 설정하므로, 구현할 필요가 없다고 한다.
https://stackoverflow.com/questions/75942189/cachemanger-defined-as-bean-and-in-application-yaml
https://jiwondev.tistory.com/282
확인해보니 이번에 여러 라이브러리가 추가되고 버전이 업그레이드 되면서 여러 캐시 라이브러리가 들어온 거 같다.
그래서 프로그램 실행 시 어떤 캐시 매니저를 사용해야할 지 명확하지 않으므로, @Cacheagle 같은 기능이 실행되지 않은 것으로 추측된다.
따라서, application.yml에 캐시 설정을 명시해주었다.
해결
아래와 같이 application.yml에 cache 설정을 추가해주니 문제가 해결되었다.
spring:
cache:
type: simple
cache-names:
- cutoffDate
Spring Boot가 자동으로 캐시 매니저를 설정할 때, 명확하게 사용할 캐시 타입을 지정하려면 spring.cache.type 으로 설정해야 한다.
spring.cache.cache-names는 메서드의 결과를 저장하거나 삭제할 캐시를 식별하기 위해 사용된다.
주로 @Cacheable, @CacheEvict, @CachePut와 같은 캐시 관련 어노테이션에서 사용된다.
참고 자료
https://stackoverflow.com/questions/75942189/cachemanger-defined-as-bean-and-in-application-yaml
https://jiwondev.tistory.com/282
'트러블슈팅' 카테고리의 다른 글
application-test.yml의 보안키를 제거하고 Jenkins에 Credential 설정 (0) | 2024.12.20 |
---|---|
Oracle DB에 데이터가 있어도 JOOQ로 조회되지 않았던 문제. CHAR 속성 문제 (0) | 2024.11.29 |
IntelliJ에서 애플리케이션 부팅 시 lombok cannot find symbol 에러 해결 (0) | 2024.11.27 |
JMX Port를 통해 공격자가 서버에 접근하는 보안 문제 (0) | 2024.11.15 |
JSP에서 XSS (Cross-Site Scripting) 보안 문제 (0) | 2024.11.15 |