작성
·
18
·
수정됨
0
강사님, 캐싱 관련해서 실무적인 관점의 질문이 있습니다.
강의에서 String 타입의 value에 JSON 형식으로 데이터를 저장해서 캐싱 처리를 한다고 배웠는데, 실무에서 어느 범위까지 캐싱하는 게 적절한지 감을 잡고 싶습니다.
과거에 MyBatis의 동적 쿼리처럼 조건부 로직이 포함된 200줄짜리 복잡한 쿼리가 DB에서 파싱되는 시간 자체만으로도 성능 부하를 유발했던 경험이 있습니다.
쿼리 자체를 수정하는 것이 베스트겠지만, 현실적으로 어려울 때가 있었습니다.
이런 '고치기 힘든 악성 쿼리'의 실행 자체를 회피하는 목적으로 Redis 캐싱을 적극적으로 사용하는 전략에 대해 궁금합니다.
실무에서는 이런 경우:
1. 쿼리 결과 데이터가 어느 정도 크기(예: 수십 MB)까지 Redis에 캐싱을 허용하시나요?
데이터가 너무 크면 오히려 Redis에 부담이 될 것 같아서요.
2. 만약 결과가 너무 크다면, 페이징 처리된 일부만 캐싱하시나요?
아니면 보고서처럼 핵심 요약 데이터만 따로 캐싱하는 전략을 사용하시나요?
3. 특히 이런 복잡한 집계/통계 쿼리는 데이터 변경이 잦지 않은데,
이런 경우 TTL은 보통 어느 정도로 설정하시는지 강사님의 경험이 궁금합니다.
답변 2
1
안녕하세요 지니님. 일단 좋은 질문 주셔서 감사합니다.
말씀해주신 사례를 들어보니, 아마도 조회 데이터의 결과값이 단건이 아니라 목록(list)였을것으로 생각됩니다.
단건 데이터가 아닌경우엔 일반적으로 캐싱처리하기에는 부적절하다고 생각합니다. 통상적으로 목록상의 데이터는 빈번히 변경될 여지가 있으므로, 보통은 단건의 데이터에 한해 캐싱처리를 한다고 보시면 됩니다.
다만, 말씀해주신 사례처럼 변경이 빈번하지 않을것으로 생각된다고 말씀하셨으니, 그 경우에는 전체 데이터가 아닌 핵심 데이터 요약결과 정도만 캐싱처리하는게 적절하다고 생각합니다. 이 경우에도 데이터의 변경가능성을 충분히 고려하여 캐싱처리를 해주셔야 할것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 지니님.
Redis 캐싱을 활용한 효율적인 성능 최적화 방법에 대한 질문 주셨네요. 실무에서 복잡한 쿼리를 처리하는 데에는 다양한 전략이 있을 수 있습니다. 다음은 관련 질문에 대한 답변입니다:
캐싱할 데이터 크기:
데이터가 큰 경우의 전략:
TTL 설정:
추가적으로, 관련 정보를 점검하고 싶으시면 아래 링크들을 참고해 보세요:
Redis와 무거운 쿼리를 다루는 방법: 복잡한 쿼리 최적화와 Redis 활용법에 대해 논의한 자료입니다.
Redis 캐싱 전략 및 실무 적용사례: 다양한 상황에서의 Redis 활용 케이스를 확인할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.