TIL(Today I Learned)

TIL - Spring Boot에서 In-memory Cache 적용

Happy._. 2024. 7. 4. 23:29

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에 접근, 이후 캐시에 있는 데이터로 응답

 

 

참고자료