반응형
비스 단에서 @Cacheable 애너테이션을 사용하면 특정 메서드의 결과를 캐시할 수 있습니다. 이렇게 하면 같은 메서드가 호출될 때, 저장된 캐시 값을 재사용하여 데이터베이스에 대한 접근을 줄이고 성능을 향상시킬 수 있습니다.
@Cacheable 사용 예시
java
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
@Service
public class TradePostService {
private final TradePostRepository tradePostRepository;
public TradePostService(TradePostRepository tradePostRepository) {
this.tradePostRepository = tradePostRepository;
}
@Cacheable(value = "tradePosts", key = "#postId")
public TradePost getTradePost(Long postId) {
return tradePostRepository.findById(postId).orElse(null);
}
}
동작 방식
- 메서드 호출: getTradePost 메서드가 호출될 때, 먼저 캐시에서 postId에 해당하는 값을 찾습니다.
- 캐시 히트: 만약 캐시에 값이 존재하면, 데이터베이스에 접근하지 않고 캐시된 값을 반환합니다.
- 캐시 미스: 캐시에 값이 없으면, 데이터베이스에서 값을 조회하고, 그 결과를 캐시에 저장합니다. 이후 같은 postId에 대한 호출 시 캐시된 값을 반환합니다.
장점
- 성능 향상: 데이터베이스 접근을 줄여 성능을 향상시킬 수 있습니다.
- 자원 절약: 동일한 요청에 대해 반복적으로 데이터베이스에 접근하지 않으므로 자원을 절약할 수 있습니다.
주의사항
- 캐시 무효화: 데이터가 변경될 경우, 해당 데이터에 대한 캐시를 적절히 무효화해야 합니다. 이를 위해 @CacheEvict 애너테이션을 사용하여 캐시를 관리할 수 있습니다.
- 캐시 전략: 캐시의 키와 값을 어떻게 설정할지에 대한 전략을 세워야 합니다.
결론적으로, @Cacheable을 활용하면 서비스 단에서 효과적으로 캐싱을 구현할 수 있습니다.