Cache 적용을 위한 의존성 추가
implementation ("org.springframework.boot:spring-boot-starter-cache")
CacheConfig 클래스 추가
@Configuration
@EnableCaching
class CacheConfig {
@Bean
fun cacheManager(): CacheManager {
val simpleCacheManager = SimpleCacheManager()
simpleCacheManager.setCaches(
listOf(
ConcurrentMapCache("popularWordTop10"),
ConcurrentMapCache("wikiPageList"),
ConcurrentMapCache("wikiPage")
)
)
return simpleCacheManager
}
}
Cache를 사용할 메서드에 @Cacheable 어노테이션을 추가
@Cacheable("wikiPage", key = "#wikiId") // key가 없으면 적용 안됨
fun getWikiPage(wikiId: Long, request: HttpServletRequest, response: HttpServletResponse): WikiPageResponse {
val wikiPage = wikiPageRepository.findByIdOrNull(wikiId) ?: throw ModelNotFoundException("WikiPage", wikiId)
viewCountUp(wikiId, request, response)
return wikiPage.toResponse()
}
@Cacheable(value = ["wikiPageList"]")
fun getWikiPageList(searchType: SearchType, keyword: KeywordRequest?, pageable: Pageable): Page<WikiPageResponse> {
if (searchType == SearchType.NONE) {
return wikiPageCustomRepository.search(pageable).map { it.toResponse() }
}
keyword?.let { popularWordRepository.save(PopularWord.from(it.keyword)) }
return wikiPageCustomRepository.keywordSearch(searchType, keyword!!, pageable).map { it.toResponse() }
}
@Cacheable("popularWordTop10")
fun getPopularWordTop10(): List<String> {
return popularWordCustomRepository.getPopularWordTop10()
}
Cache 적용 후 첫 조회(파란 부분)과 이후 같은 조회에 대한 3회 요청의 결과 이미지
첫 조회는 DB에 접근, 이후 캐시에 있는 데이터로 응답
참고자료
'TIL(Today I Learned)' 카테고리의 다른 글
TIL - Apache JMeter를 이용한 성능 테스트 (0) | 2024.07.08 |
---|---|
TIL - 조회수 증가 테스트 코드에서 조회수가 반영되지 않는 문제 해결 (0) | 2024.07.05 |
TIL - Spring Boot Test 시 JPA metamodel must not be empty (0) | 2024.07.03 |
TIL - AWS Elastic Beanstalk 배포 후 413 Request Entity Too Large (0) | 2024.07.01 |
Docker 명령어 1 (0) | 2024.06.28 |