본문 바로가기
Programming/Java, Spring

스프링 캐싱 메커니즘에서 @Cacheable과 @Cacheput 차이점은 ?

by Renechoi 2023. 12. 13.

@Cacheable과 @CachePut은 스프링의 캐싱 메커니즘에서 사용되는 애노테이션인데, 두 애노테이션의 캐싱 동작은 약간 다르다.

 

@Cacheable

  • 목적: 메서드의 실행 결과를 캐시에 저장, 동일한 입력값에 대해 메서드가 다시 호출될 때 캐시된 값을 반환.
  • 동작: 주어진 파라미터로 캐시를 조회하고, 해당 값이 존재하면 메서드를 실행하지 않고 캐시된 값을 반환. 캐시에 값이 없을 경우 메서드를 실행하고 결과를 캐시에 저장한 후 반환.
  • 주로 사용되는 경우: 결과가 변경되지 않고, 계산 비용이 높은 메서드에 사용한다.

 

@CachePut

  • 목적: 메서드의 실행 결과를 캐시에 항상 저장. 이미 캐시된 값이 있다면 덮어쓰기
  • 동작: 메서드를 항상 실행하고 그 결과를 캐시에 저장. 이전에 캐시된 값이 있더라도 덮어쓰기.
  • 주로 사용되는 경우: 캐시된 값을 업데이트해야 할 때 사용한다.

 

요약

@Cacheable: 캐시에 값이 있는 경우 메서드를 실행하지 않고 캐시된 값을 반환한다.
@CachePut: 메서드를 항상 실행하고 결과를 캐시에 저장합니다.

 

 

예시 코드

import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.CachePut;
import org.springframework.stereotype.Service;

@Service
public class SampleService {

    // @Cacheable 예시
    @Cacheable(value = "sampleCache", key = "#id")
    public String expensiveMethod(String id) {
        // 시간이 오래 걸리는 계산이나 데이터베이스 조회 등의 작업 수행
        return "Some expensive data for " + id;
    }

    // @CachePut 예시
    @CachePut(value = "sampleCache", key = "#id")
    public String updateAndCache(String id, String newData) {
        // 데이터를 업데이트하고 결과를 캐시에 저장
        return newData;
    }
}

 

반응형