인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

홍승현님의 프로필 이미지

작성한 질문수

대기업 근무하며 경험한 Redis를 야무지게 사용하는 방법 [실습]

좋은 강의 감사합니다. 질문있습니다

해결된 질문

작성

·

49

0

안녕하세요. 강의 잘 듣고 있습니다.
강의를 들으면서 몇가지 질문이 있어서 남깁니다

1. CacheManager + @Cacheable 과 같은 어노테이션으로 레디스 캐싱을 쓰는 방법은 실제 근무했던 기업에서 많이 사용하는 방법인가요?
- 위의 질문의 요지는 말 그대로 Template를 사용한 방법과 CacheManager가 제공하는 어노테이션를 활용한 경우가 많은지 궁금합니다
- 위와 관련해서 한가지 더 질문 드리자면, 보통 값을 저장할 때 객체를 직렬화해서 저장하게 되는 경우가 많은데, 수백개가 넘는 객체를 모두 정의할 수 없는 환경에서 GenericJackson2JsonRedisSerializer를 사용하는 것으로 알고 있습니다. 하지만, 이런 경우에는 다른 서버에서는 패키지 구조가 맞지 않아서 사용하지 못하는데 이런 경우에는 어떻게 하나요?

2. 리스트 결과물 (ex. 00 목록 조회 등)은 보통 어떤 자료구조를 사용하나요?

답변 1

0

Hong님의 프로필 이미지
Hong
지식공유자

안녕하세요 질문 주셔서 감사합니다. 제 강의로 인해서 많은 도움이 되셨으면 기쁘겠네요 ㅎㅎ

 

우선 레디스 캐싱을 사용하는 구조는 사실 정해진게 없습니다.

단순히 Spring에서 전적으로 맡겨도 무방합니다.

 

하지만 실무에서는 생각보다 생각지도 못한 많은 문제를 대면하게 됩니다. 그래서 저는 개인적으로는 따로 Template를 Bean으로 등록해서 처리하는게 더 좋다고 생각합니다. 확장성이나 유지보수적인 면에서 더 좋다고 생각을 해요

 

값을 저장하는 방법에 대해서는 플랫폼이나 서비스 관점에서 달라지는거 같습니다.

만약 수백개가 넘는 객체를 정의내리고 관리를 해야 한다면, 해당 키에 대해서만 직렬화구조를 다른걸 사용하시면 될 꺼 같아요. 그리고 이러한 키에 대해서는 prefix값을 팀 내에 규율로 두어서 관리를 하시면 될 꺼 같습니다.

 

더 효율적인 방법이 있으면 채택하는것이 좋지만, 어느정도의 가독성이나 유지관리적인 부분이 더 중요한 부분이기 떄문에 현재 생각으로는 그냥 통일화된 직렬화 형태를 가지는게 더 좋지 않을까싶습니다.

  • 회사는 개인이 모든것을 관리하지 않고 다양한 팀과 협업을 하고 입사자와 퇴사자가 존재하는 공간이기 떄문에 유지보수가 훨씬 더 중요합니다.

 

마지막으로 리스트 결과물에 대해서는 그냥 일반적인 String 자료구조를 사용합니다.

케이스에 따라 다르겠지만, 예를들어서 상품 리스트에 대한 데이터를 캐싱처리 한다면, 그냥 [{}, {}] 형태로 저장을 하는 편인거 같아요.

 

물론 이러한 값에 대해서는 Protobuf 방식이나 다른 바이너리 방식으로 저장을 하면 키에대한 사이즈가 더 작아져서 효율적이겠지만, 그러면 저희가 보면서 관리하기가 힘들어 집니다.

 

그래서 보기쉽게 json으로 저장하는게 베스트인거 같습니다.

  • 휘발성 데이터이고 개발자가 보는 경우가 없다면 좀 더 압축해서 저장하는 형태도 괜찮다고 생각합니다.

 

질문해 주신 부분에 대해서 답이 되셨을까요?? 혹시 제가 잘못이해하고 알려드렸거나 불만족스러우시다면

추가로 질문 편하게 남겨주시면 감사하겠습니다!