💢 Redis를 통해 캐싱을 하면서 발생했던 오류

2024. 5. 31. 19:48· 오류 모음집
목차
  1. 📢 오류 사항
  2. 💭 이유
  3. 💬 해결 방법

📢 오류 사항

이번 오류는 Redis를 통해서 캐싱처리를 하면서 발생했던 오류를 살펴보려고 한다.

우선 코드를 먼저 보는것이 좋을것 같다

 

평소 로직에서 크게 변함이 없지만 차이점은 바로 @Cacheable을 추가해주었다. 

 

그리고 발생한 오류이다.

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.http.ResponseEntity` (no Creators, like default constructor, exist): cannot deserialize from Object value (no delegate- or property-based Creator)

 

💭 이유

내가 반환을 하려하는 ResponseEntity에 대한 문제이다. 나는 Redis에서 데이터를 직렬화/역직렬화를 위해 사용하는 것이GenericJackson2JsonRedisSerializer이다. 놀랍게도 Jackson은 ResponseEntity를 기본적으로 직렬화 할 수 없는 클래스인것이다. 

 

무슨말이냐 하면 위에 오류의 내용은 레디스에 있는 데이터를 역직렬화해서 데이터를 가져와야하는데 역직렬화를 하면서 ResponseEntity 클래스에 기본 생성자 또는 프로퍼티 기반의 생성자가 없어서 Jackson이 인스턴스를 생성을 못해서 발생하는 것이다

 

때문에 해결하려면 ResponseEntity를 직접 커스텀해서 직렬화와 역직렬화를 해야하지만 이는 굉장히 까다롭고 나아가 유지보수또한 쉽지 않다.

 

💬 해결 방법

반환 값을 굳이 ResponseEntity로 하지 않고 그냥 따로 반환하고자 하는 클래스를 새롭게 만들어서 반환하는 것이다.

나는 Page형식으로 캐싱을 하고 있기 때문에 Page형식으로 반환된 ResponseProduct 인 PageResponseProduct 클래스를 만들어서 기본 생성자를 만들고 그것으로 반환을 하는 것이다.

 

이렇게 두개의 클래스와 메소드를 사용해서 해결할 수 있었다. 그러면 이제 Redis를 통해 캐싱 처리를 할 수 있는 것이다.

 

설명을 좀 더 자세히 해보자면 

  1. 캐시 저장 시 ResponseEntity의 Body를 저장한다
    ResponseEntity 자체를 캐시에 저장하지 않고, 그 body 부분만 캐시에 저장한다
    @Cacheable 어노테이션을 사용할 때는 ResponseEntity의 body에 해당하는 PageResponseDto만 반환하였다.

 

이렇게 오류를 해결하면 이후의 데이터를 가져올때는 ResponseEntity가 같이 딸려가지 않기 때문에 오류가 해결된 것을 볼 수 있다.

'오류 모음집' 카테고리의 다른 글

💢 JPA 의 StackOverFlowError  (1) 2024.04.19
  1. 📢 오류 사항
  2. 💭 이유
  3. 💬 해결 방법
'오류 모음집' 카테고리의 다른 글
  • 💢 JPA 의 StackOverFlowError
늦은산책
늦은산책
늦은산책
중얼중얼블로그
늦은산책
전체
오늘
어제
  • 분류 전체보기
    • 오류 모음집
    • CS
      • 💾 자료구조
      • 👫🏼 정렬
      • 🖥 네트워크
      • 💻 운영체제
      • 💾 DB
      • 🌌 알고리즘
      • 📝 언어
    • 테스트
    • Git 초보에게 필요한 Git bash사용법
    • 프로젝트
      • 팀 프로젝트
      • 개인 프로젝트
      • 항해99 개인 프로젝트
      • 스위프 프로젝트(Lit Map)
    • Java
      • 객체 지향
    • Spring
      • 🌲 Spring
      • 👨‍💻 SpringSecurity
      • 🌵 JPA
    • MSA
      • MSA 강좌 - 이도원 강사님
    • Docker(도커)
    • 코딩테스트
      • 🧮 프로그래머스
      • 🎲 백준
    • 항해99
      • 🕛 1주차
      • 🕐 2주차
      • 🕑 3주차
      • 🕒 4주차
    • AWS
    • CI와CD

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 취업리부트코스
  • 항해99
  • 개발자이력서
  • 개발자취업
  • 코딩테스트
  • 개발자취준
  • 개발자포토폴리오
  • 취리코
  • couchcoding
  • 개발자포트폴리오
  • 카우치코딩
  • 카우치코딩_포트폴리오_멘토링
  • 카우치코딩_팀프로젝트

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
늦은산책
💢 Redis를 통해 캐싱을 하면서 발생했던 오류
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.