이번 포스트에서는 springboot에 ehcache를 로컬캐시로 구성합니다
환경
- springboot 3.1.10
- gradle 8.7
- java 17
spring-boot-starter-cache 패키지를 dependency에 추가합니다.
spring-boot-starter-cache는 Spring Boot에서 캐시를 설정하고 사용하는 데 필요한 추상화를 제공하는 모듈입니다. 이 모듈을 통해 캐시를 쉽게 설정하고 다양한 캐시 제공자를 사용할 수 있습니다. 어떤 캐시 제공자를 사용할지는 개발자가 선택할 수 있으며, Spring Boot의 설정 파일을 통해 이를 간단히 구성할 수 있습니다.
Spring Boot Starter Cache의 역할 다음과 같습니다.
- 추상화 제공: 캐시를 설정하고 사용하는 데 필요한 공통 인터페이스와 어노테이션(@Cacheable, @CachePut, @CacheEvict 등)을 제공합니다.
- 통합: 다양한 캐시 제공자(ehcache, caffeine, redis 등)를 지원하며, 개발자는 설정 파일이나 Java 설정 클래스를 통해 원하는 캐시 제공자를 선택할 수 있습니다.
- 편리성: 간단한 설정으로 캐싱 기능을 애플리케이션에 통합할 수 있습니다.
Spring Boot에서는 기본적으로 ConcurrentMapCacheManager를 사용하여 인메모리 캐시를 제공하지만, 이는 매우 간단한 캐시로 고급 기능이 부족합니다. 다음은 spring-boot-starter-cache만 사용하여 간단한 인메모리 캐시를 설정하고 사용하는 예시입니다.
build.gradle에 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-cache'
ehCache 의존성도 추가해줍니다
implementation 'org.ehcache:ehcache::jakarta'
EhCache3버전이상부터는 JSR107 표준을 따르기 때문에 설정하는 방법이 2버전때와 다릅니다
참고: https://www.ehcache.org/documentation/3.10/107.html
EhCacheConfig 설정 추가해줍니다
SprignBootApplication이 로드될때 컴포넌트 스캔에 적용되서 기본 CacheManager로 적용됩니다
@EnableCaching
@Configuration
public class EhcacheConfig {
@Bean
public org.springframework.cache.CacheManager cacheManager() {
// EhcacheCachingProvider를 사용하여 CachingProvider를 가져옵니다.
CachingProvider cachingProvider = Caching.getCachingProvider();
javax.cache.CacheManager jCacheManager = cachingProvider.getCacheManager();
javax.cache.configuration.Configuration<Object, Object> configuration = new MutableConfiguration<>()
.setTypes(Object.class, Object.class)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_MINUTE))
.setStoreByValue(false)
.setStatisticsEnabled(true);
jCacheManager.createCache("cache1",configuration);
// Spring의 CacheManager로 래핑합니다.
return new JCacheCacheManager(jCacheManager);
}
}
설정 코드 부가 설명
클래스패스에 JCache 구현체가 한개일경우에만 동작하는 코드입니다
CachingProvider cachingProvider = Caching.getCachingProvider();
여러 구현체 의존성을 추가했다면 full name을 명시합니다
CachingProvider cachingProvider = Caching.getCachingProvider("org.ehcache.jsr107.EhcacheCachingProvider");
캐시 적용 클라이언트 코드
@Cacheable("cache1")
public List<MemberDtoV2> findAllMembers() {
return memberRepository.findAll().stream()
.map(item -> MemberDtoV2.of(item.getId(), item.getEmail(), item.getName()))
.collect(Collectors.toList());
}
참고 링크
'스프링 프레임워크' 카테고리의 다른 글
Implementing Redis Cache in Spring Boot: From Basic Setup to Serialization (1) | 2025.03.17 |
---|---|
spring aop와 annotation 맛보기 (1) | 2024.09.03 |
springboot에 redisson cache 적용하기 (0) | 2024.06.18 |
springboot에 CacheResolver로 MultipleCacheManager 구성하기 (0) | 2024.06.18 |