@Cacheable 어노테이션은 Spring Framework에서 메서드의 반환값을 캐시에 저장하여, 같은 인자가 들어올 경우 캐시된 값을 재사용하도록 하는 기능을 제공합니다. 즉, 메서드를 반복적으로 호출하더라도 실제로는 처음 한 번만 실행되고, 이후 호출은 캐시된 결과를 반환하게 됩니다.
📌 주요 역할 요약
- 중복 호출 방지: 동일한 입력값에 대해 메서드를 반복 호출하면, 캐시된 결과를 반환해 성능 향상.
- 결과 저장: 메서드 실행 결과를 캐시에 저장.
- 조건부 캐싱: 특정 조건에 따라 캐싱 여부 제어 가능.
✅ 기본 사용 예시
@Cacheable("users")
public User findUserById(Long id) {
// 실제로는 DB나 외부 API 호출
return userRepository.findById(id).orElse(null);
}
- 위 메서드는
users라는 캐시 이름으로 결과를 저장합니다. id가 동일한 경우, 이후 호출은 캐시된User객체를 반환합니다.
🔧 주요 속성
| 속성 | 설명 |
|---|---|
value 또는 cacheNames |
사용할 캐시 이름 지정 |
key |
캐시 키를 지정 (SpEL 표현식 사용 가능) |
condition |
캐싱할 조건 지정 (SpEL) |
unless |
결과를 저장하지 않을 조건 (SpEL) |
예시:
@Cacheable(value = "books", key = "#isbn", unless = "#result == null")
public Book findBook(String isbn) {
return bookRepository.findByIsbn(isbn);
}
🧠 함께 알아두면 좋은 어노테이션
@CachePut: 캐시를 강제로 업데이트할 때 사용@CacheEvict: 캐시를 삭제할 때 사용@Caching: 여러 캐시 어노테이션을 함께 사용할 때
필요하다면 Redis나 Caffeine 같은 캐시 스토어와 함께 연동도 가능합니다.