본문 바로가기

개발중/Spring

Spring Cache 이해하고 사용하기: 성능 최적화를 위한 데이터 캐싱 도구

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
반응형