강의

멘토링

커뮤니티

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

문영훈님의 프로필 이미지
문영훈

작성한 질문수

6주 완성! 백엔드 이력서 차별화 전략 4가지 - 똑같은 이력서 속에서 돋보이는 법

6-8. Redis 캐싱 적용해보기

Redis 캐싱을 도입하는데 db조회와 성능이 차이가 거의 없습니다.

작성

·

34

0

1. 현재 학습 진도

redis 

2. 어려움을 겪는 부분

 간단하게 제 프로젝트를 소개하자면 RSS피드를 통해 블로그의 글들을 불러와서 하나의 게시판에서 볼 수 있는 서비스 입니다.

스케쥴러 작업에서 구독한 피드의 새로운 글들을 불러옵니다. 피드마다 비동기로 병렬 처리됩니다.

이때 새로운 글인지 아닌지를 판단할 때 피드마다 redis를 사용하거나 피드마다 db의 조회를 통해 차이를 확인했는데 redis를 사용했을 때 빨라질 것이라 생각했지만 빠르지 않았습니다.

3. 시도해보신 내용

앞선 강의를 토대로 쿼리발생 횟수를 모니터링 횟수로 측정한 결과 피드가 100개일 경우 db의 조회를 활용했을 때 비동기 병렬 처리 되므로 100개의 select문이 나갑니다.

redis를 사용했을 때는 0개의 select문으로 감소합니다. 하지만 성능은 비슷합니다.

예상 가는 이유로는 redis를 사용했을 때 그 횟수가 너무 잦아서 redis에 연결하는 네트워크 시간 때문에 차이가 미미하다는 말이 있던 것 같습니다.

만약 제 가설이 맞다고 한다면 redis를 사용할 때 항상 네트워크의 횟수를 최소화 해야만 redis의 성능을 온전히 이끌어 낼 수 있는건가요?

보통 레디스를 사용할 때 이걸 다 생각하면서 1번만 redis가 조회 되도록 하고 생각하면서 쓰나요?

그렇다면 제 코드에서 redis의 성능을 올바르게 나타내려면 피드의 새로운 글들을 하나의 List로 전부 묶은 후 redis에서 한번의 연결을 통해 한번에 캐싱을 확인해서 성능을 높여야 하는건가요?

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 문영훈님.

Redis를 사용하였을 때 성능 차이가 미미하다는 점에 대해 질문 주셨군요. Redis는 주로 메모리 내에서 데이터를 저장하므로 빠른 속도를 제공합니다. 그러나 네트워크의 오버헤드와 같은 요소가 성능에 영향을 줄 수 있습니다. 아래는 이 문제와 관련하여 고려할 수 있는 몇 가지 포인트입니다:

Redis 사용 시 성능 최적화 방법:

  1. 네트워크 오버헤드 최소화:

    • Redis와의 통신은 네트워크를 통해 이루어지므로, 불필요한 빈번한 요청은 피하는 것이 좋습니다.
    • 요청을 Batch로 묶어 한번의 요청으로 여러 데이터를 조회하거나 저장하는 것이 효율적일 수 있습니다.
  2. 데이터 구조 활용:

    • Redis는 다양한 자료구조를 지원하므로 적절한 자료구조를 사용하는 것이 중요합니다. 예를 들어, 여러 피드의 정보를 저장할 때, 적합한 데이터 타입(예: List, Set)을 사용하여 데이터를 효율적으로 처리할 수 있습니다.
  3. 파이프라이닝(Pipelining) 사용:

    • Redis는 파이프라이닝 기능을 지원하여 여러 명령어를 하나의 요청으로 보내는 것이 가능합니다. 이를 통해 네트워크 왕복 시간을 줄일 수 있습니다.
  4. 캐싱 전략 재검토:

    • 캐시할 데이터의 대상으로 적절한 것을 선택하고 캐싱 계층이 증가하도록 설계합니다. 예를 들어, 새 피드 판단 로직을 캐싱하여 DB 조회를 줄이도록 개선할 수 있습니다.
  5. 모니터링 및 프로파일링:

    • Redis와 DB 조회 간의 성능 차이가 거의 없다면, 애플리케이션에서 요청 처리 시간을 모니터링하고 병목 지점을 분석해야 합니다. Redis 명령어의 처리 시간도 프로파일링하면 도움이 됩니다.

문영훈님께서 올바르게 가정하셨듯이, 네트워크 트래픽을 최소화하고 효율적인 접근 패턴을 설계하는 것이 Redis의 성능을 제대로 발휘할 수 있는 핵심입니다. 관련하여 자세한 설명과 해결책은 아래 링크의 유사한 질문을 참조하시면 도움이 될 것입니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

문영훈님의 프로필 이미지
문영훈

작성한 질문수

질문하기