작성
·
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
안녕하세요 donkey님! 좋은 질문 해주셨네요:)
응답의 형태로 페이지의 컨텐트가 아닌 Page 객체를 통째로 보내고 싶으신 게 맞으실까요~??
만약 이게 맞으시다면 ChatGpt가 얘기해준 것처럼 응답을 위한 DTO 객체를 따로 만들 것 같습니다!
왜냐면 말씀해주신 대로 Page 같은 객체로 응답할 수 없는 경우가 있습니다!
왜 역직렬화로 작동을 하지 않는 지에 대한 디버깅은
아래 설정 코드의 라이브러리를 기준으로 검색해보시면 좋을 것 같습니다!
다른 방법으로는 '디버깅 기능'을 활용해서 어떤 부분의 로직 때문에 역직렬화가 안 되는 지
분석해보는 방법도 있을 것 같네요~!!
이 외로 궁금한 점 생기시면 언제든 질문 남겨주세요~~