인프런 커뮤니티 질문&답변

donkey님의 프로필 이미지
donkey

작성한 질문수

비전공자도 이해할 수 있는 Redis 입문/실전 (조회 성능 최적화편)

페이지 데이터 캐싱할때 질문

작성

·

70

0

페이지 데이터 캐싱할 때, 아래처럼 컨텐트만 보내는 게아니라

@Cacheable(cacheNames = "getBoards",key = "'boards:page:'+ #page + ':size:' + #size", cacheManager = "boardCacheManager")
public List<Board> getBoards(int page, int size) {
    Pageable pageable = PageRequest.of(page - 1, size);
    Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable);
    return pageOfBoards.getContent();
}


아래처럼 Page 객체 자체를 보내야,실제로 페이징 처리가 가능할텐데요

@Cacheable(cacheNames = "getBoards",key = "'boards:page:'+ #page + ':size:' + #size", cacheManager = "boardCacheManager")
public Page<Board> getBoards(int page, int size) {
    Pageable pageable = PageRequest.of(page - 1, size);
    Page<Board> pageOfBoards = boardRepository.findAllByOrderByCreatedAtDesc(pageable);
    return pageOfBoards;
}

이렇게 하면, Page 역직렬화시 오류가 발생하는데, 이렇게 Page<Board>를 보내줘야 할 때는 어떻게 보내야할지 모르겠습니다. 정확히 캐싱의 역직렬화가 어디까지 가능한지 파악이 잘 안되서..


gpt한테 물어보니, Page 같은 특수한 객체는 역직렬화 방법이 없고, db에서 찾은 page를 분해해서 이걸 다시 dto로 감싸서 보내라는데, 이런 방식밖에 없는건지.. Page 데이터 보내실때 어떻게 보내시는지 궁금합니다.

답변 1

1

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 donkey님! 좋은 질문 해주셨네요:)

 

응답의 형태로 페이지의 컨텐트가 아닌 Page 객체를 통째로 보내고 싶으신 게 맞으실까요~??

만약 이게 맞으시다면 ChatGpt가 얘기해준 것처럼 응답을 위한 DTO 객체를 따로 만들 것 같습니다!

왜냐면 말씀해주신 대로 Page 같은 객체로 응답할 수 없는 경우가 있습니다!

 

왜 역직렬화로 작동을 하지 않는 지에 대한 디버깅은

아래 설정 코드의 라이브러리를 기준으로 검색해보시면 좋을 것 같습니다!

image.png

 

다른 방법으로는 '디버깅 기능'을 활용해서 어떤 부분의 로직 때문에 역직렬화가 안 되는 지

분석해보는 방법도 있을 것 같네요~!!

 

이 외로 궁금한 점 생기시면 언제든 질문 남겨주세요~~

donkey님의 프로필 이미지
donkey

작성한 질문수

질문하기