Cache 사용 이유
캐시의 사용은 반복적으로 동일한 결과를 반환하는 경우에 용이하다고 한다.
지속적으로 같은 결과를 반환하는데도 DB에 접속하게 되면 DB의 장애가 생길 가능성이 높아지기 때문이다.
Cache 사용 방법
1. @EnableCaching 추가
캐시를 사용하고자 하는 클래스에 @EnableCaching 이라는 어노테이션을 추가한다.
@EnableCaching
@Configuration
public class CacheConfig {
...
}
2. 캐시 매니저 빈 추가
- ConcurrentMapCacheManager: Java의ConcurrentHashMap을 사용해 구현한 캐시를 사용하는 캐시매니저
- SimpleCacheManager: 기본적으로 제공하는 캐시가 없어 사용할 캐시를 직접 등록하여 사용하기 위한 캐시매니저
- EhCacheCacheManager: 자바에서 유명한 캐시 프레임워크 중 하나인 EhCache를 지원하는 캐시 매니저
- CompositeCacheManager: 1개 이상의 캐시 매니저를 사용하도록 지원해주는 혼합 캐시 매니저
- CaffeineCacheManager: Java 8로 Guava 캐시를 재작성한 Caffeine 캐시를 사용하는 캐시 매니저
- JCacheCacheManager: JSR-107 기반의 캐시를 사용하는 캐시 매니저
3. 캐시 사용
1) @Cacheable
캐시를 저장/조회하기 위한 어노테이션으로 , 캐시에 데이터가 없을 경우에 기존 로직을 실행한 후 캐이세 데이터를 추가하고, 캐시에 데이터가 있으면 캐시의 데이터를 반환한다.
따라서, 디버깅을 해보면 최초에는 Repository의 로직을 실행하고, 그 후부터는 Repository를 타지 않는 것을 볼 수 있다.
@Override
@Cacheable(value="cache", key = "{#memberName}")
public List<MemberMaster> findAllByMember(String memberName) {
return this.memberRepository.findAllByMember(memberName);
}
@Override
@Cacheable(value="cache", key = "{#memberAge}")
public List<MemberMaster> findAllByMemberAge(String memberAge) {
return this.memberRepository.findAllByMemberAge(memberAge);
}
2) @CachePut
캐시에 값을 저장하는 용도로만 사용하는 것으로, 실행 결과를 캐시에 저장하지만, 조회 시에 저장된 캐시의 내용을 사용하지는 않고 항상 메소드의 로직을 실행한다는 점에서 다르다.
3) @CacheEvict
캐시는 적절한 시점에 제거되어야 하는데, 만약 값이 달라진다면 캐시를 제거해야 할 것이다. 그렇지 않으면 잘못된 결과가 반환된다.
https://mangkyu.tistory.com/179
[Spring] 캐시(Cache) 추상화와 사용법(@Cacheable, @CachePut, @CacheEvict)
Spring은 캐시 관련 기능을 추상화하여 편리하게 개발할 수 있도록 지원하고 있다. 이번에는 Spring이 제공하는 캐시와 관련된 기능들에 대해 알아보도록 하자. 1. Spring이 제공하는 캐시(Cache) 추상
mangkyu.tistory.com
'애플리케이션 개발 > Spring' 카테고리의 다른 글
[java] Tomcat server.xml에서 커넥션 풀 설정하기 (0) | 2025.04.28 |
---|---|
[Spring] STS 속도 개선하기 (0) | 2023.03.10 |
[Spring] @SuppressWarnings("unchecked") (0) | 2023.01.13 |
[Spring] Picked up JAVA_TOOL_OPTIONS: -Djava.net.preferIPv4Stack=true (0) | 2023.01.10 |
[ios] 애플 로그인 (0) | 2022.12.14 |