pagedModel fetchJoin 적용후 redis Cache 적용시 발생하는 오류 해결

2024. 7. 23. 20:13TIL

 해결

 

PagedModel은 단순한 데이터 구조가 아닌, 페이지네이션 정보와 함께 리소스 링크 정보를 포함하고 있고 복잡한 구조를 가지고 있기 때문에 직렬화,역직렬화를 진행하는데 문제가 생긴다. 이를 해결하기 위해서는 

Redis를 사용할 때 PagedModel을 직접 캐시하기보다는 JSON 형식으로 직렬화하여 저장하거나, 페이지별로 데이터를 캐시하고 페이지네이션을 처리하는 것 또한 하나의 방법이 될 수 있다.

하지만 데이터만 캐시하고 후에 캐시된 데이터를 pagedModel 형태로 재조립 하는 과정은 결국에 캐시를 사용하려는 목적(서버의 성능 부하 개선)에는 부합하지 않는다고 판단하여 최종적으로 pagedModel을 사용하지 않고 page 객체를 사용하는 것으로 해결하였다.

 

@Cacheable(value = ["promotionCache"], key = "#page + '-' + #size + '-' + #sortBy + '-' + #direction")
override fun getPromotionWineList(
    page: Int,
    size: Int,
    sortBy: String,
    direction: String
): Page<PromotionWineResponse> {
    val pageable: Pageable = PageRequest.of(page, size, getDirection(direction), sortBy)
    return winePromotionRepository.findPromotionWineList(pageable)
}