본문 바로가기

개발일지(일간)

23년 03월 23일 레디스 캐싱

기존에 만들었던 프로젝트에 캐싱 적용을 시도 해 보았다.

우리 프로젝트는 스프링 시큐리티의 @AuthenticationPrincipal과 userDetails를 통해 토큰에서 유저정보를 호출했었는데, 

그때마다 db에서 유저정보를 호출하는 쿼리가 하나씩 날아가는게 비효율적으로 보였다.

이를 캐싱으로 해결 해 줄 수 있을것 같아 캐싱을 해 주었다.

일단 레디스를 통해 캐싱을 하고 싶었기에 설정을 해 주었다.

그리고 userDetails의 DB에서 user를 호출하는 메서드에 @Cacheable을 붙여주었다.

그런데 여기서 문제가 생겼다.

user엔티티는 localdatetime인 createdAT,modifiedAt이라는 필드를 가지고 있는데,이 localdatetime을 직렬화해서 받을수 없는 예외가 발생했던 것이다.

그렇기 때문에 jackson-datatype-jsr310 라이브러리를 build.gradle에 추가하고 두 필드를 설정해 주었다.

그랬더니 연관관계 객체가 lazy라 redis저장소에 저장할수 없다는 예외가 발생했다.

userDetails를 생성하는데에는 연관관계 객체가 필요가 없기 때문에 db에서 조회해 받아온 user객체를 userDetails에 필요만 정보만 가진 user객체로 재가공해서 보내주기로 했다. 그리고, 캐싱하고자 하는 객체가 userDetailsImpl이 아닌 user객체이기에 아예 캐싱이 필요한 메서드를 분리 해 주었다.

 

'개발일지(일간)' 카테고리의 다른 글

04월 11일 변경사항  (0) 2024.04.11
23년 03월 24일 레디스 캐싱2  (0) 2023.03.24
23년 03월 20일 모의면접  (0) 2023.03.20
23년 03월 11일  (0) 2023.03.11
23년 03월 9일  (0) 2023.03.10