728x90
반응형
Spring Cache란
Spring Cache는 캐싱을 쉽게 구현할 수 있도록 하는 Spring의 추상화 레이어입니다. 이를 통해 애플리케이션은 특정 데이터를 메모리, 디스크, Redis, Ehcache 등 다양한 캐시 저장소에 저장하고 재사용할 수 있습니다.
Spring Cache 주요 개념
캐싱 메커니즘
캐시 저장소: 데이터를 임시로 저장하는 공간(예: ConcurrentHashMap, Redis).
캐시 키: 데이터를 식별하기 위한 고유 키.
캐시 값: 캐시에 저장된 실제 데이터.
주요 어노테이션
Spring Cache는 주로 어노테이션 기반으로 작동한다.
@EnableCaching
- 캐시 기능을 활성화한다.
- 보통 Spring Boot의 메인 클래스나 구성 클래스에 선언한다.
@SpringBootApplication
@EnableCaching
public class Application {
}
@Cacheable
- 캐시에 데이터를 저장하고, 이후 요청 시 캐시된 데이터를 반환한다.
@Cacheable(value = "users", key = "#userId")
public User getUserById(Long userId) {
return userRepository.findById(userId).orElse(null);
}
@CachePut
- 메서드 실행 결과를 캐시에 강제로 업데이트한다.
@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
return userRepository.save(user);
}
@CacheEvict
- 캐시에서 데이터를 제거한다.
@CacheEvict(value = "users", key = "#userId")
public void deleteUser(Long userId) {
userRepository.deleteById(userId);
}
@Caching
- 복잡한 캐싱 작업(여러 @Cacheable, @CacheEvict 등을 결합) 시 사용한다.
@Caching(
evict = { @CacheEvict(value = "users", key = "#userId") },
put = { @CachePut(value = "users", key = "#user.id") }
)
public User saveUser(User user, Long userId) {
return userRepository.save(user);
}
Spring Cache 설정
의존성 추가
Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
Gradle
implementation 'org.springframework.boot:spring-boot-starter-cache'
기본 캐시 설정
Spring Boot는 기본적으로 ConcurrentHashMap 기반의 간단한 캐시를 제공합니다. 추가 설정 없이도 바로 사용할 수 있다.
캐시 제공자와 Spring Cache
Spring Cache는 다양한 캐시 제공자를 지원합니다. 일반적으로 다음과 같은 캐시를 많이 사용합니다.
Ehcache
- 경량화된 JVM 기반 캐시.
- XML 또는 Java Config로 설정 가능.
Caffeine
- 높은 성능을 자랑하는 캐시.
- Spring Boot 기본 캐시보다 더 정교한 기능 제공.
Redis
- 네트워크 기반의 캐시로 분산 환경에서 적합.
- 세션 관리, 분산 캐시 등에 자주 사용.
Hazelcast
- 인메모리 데이터 그리드.
- 클러스터링된 캐시 환경에서 많이 사용.
Spring Cache 사용 시 주의사항
캐시 무효화 전략
- 캐시 데이터가 오래된 경우 이를 제거하거나 업데이트하는 전략이 필요합니다.
캐시 크기 관리
- 캐시 용량이 제한되어 있기 때문에 메모리 관리가 중요합니다.
적절한 캐시 TTL 설정
- 데이터의 유효 기간을 적절히 설정하여 오래된 데이터를 방지해야 합니다.
캐싱 대상 선정
- 빈번히 조회되거나 계산 비용이 높은 데이터를 캐싱해야 효과적입니다.
728x90
반응형
'개발중 > Spring' 카테고리의 다른 글
package javax.xml.bind does not exist 해결 (0) | 2024.12.11 |
---|---|
Java: MAC Address 조회하기 예제 (0) | 2024.12.10 |
Spring Project 의 MyBatis 쿼리를 Console 에 찍는 설정 (log4j2) (1) | 2023.12.30 |
Spring 환경에서 프로파일 별 효율적 코드 관리 전략 (1) | 2023.12.08 |
SocketException의 수수께끼: 첫 번째 API 호출에서만 왜 실패할까? ( retrofit java.net.socketexception connection reset ) (0) | 2023.10.06 |