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

김영빈님의 프로필 이미지

작성한 질문수

백엔드 애플리케이션 성능 개선하기 - 기초편

캐시를 활용한 성능 개선

레디스에 대해서 질문드립니다.

24.09.24 00:13 작성

·

32

·

수정됨

1

안녕하세요? 끝까지 강의를 들었는데, 알차고 재미있는 강의였습니다.

 

강의를 보다보니 레디스를 사용해도 성능적인 차이가 많이 안나는 것을 보고 궁금한 점이 있어서 질문드립니다.

 

사실 주변에서 캐시로 레디스를 무조건적으로 사용을 하시는 경우를 많이 봤는데요, 제가 생각할때는 결국 I/O대기시간이 일반적인 api에서 큰 부분을 차지하고, 결국 레디스라는 것도 IO를 기다려야 하는 것은 동일하지 않나요?

 

그렇게 따지고 보면 강의에서 보여주신 것처럼 레디스를 사용하더라도 성능적 차이가 많이 안나는 경우가 꽤나 빈번할 것 같은데, 강사님의 의견이 궁금합니다.

 

레디스 내에서 해시값을 기반으로 데이터를 조회하는 속도야 빠르겠지만, 애초에 요청받았을 때 수행해야하는 [작업] 그 자체의 비중보다 [IO]를 대기하는 시간이 큰 경우가많은, 예를 들면 DB에서 단순히 레코드한줄을 조회한다든지 하는 기능이라고 하면 레디스를 쓰는 건 비용까지 고려했을 때 굳이 할 필요가 없는 선택처럼 느껴집니다.

결국 레디스는 IO보다 요청에 따라 수행해야 하는 작업 그자체의 크기가 조금 클때 그제서야 유의미해 보이는데 어떻게 생각하시는지 의견이 궁금합니다!

 

추가로 강의 잘들었습니다. 혹시 다음 강의는 언제쯤 출시할 예정이신지 알 수 잇을까요?

답변 2

0

이준형(Foo)님의 프로필 이미지
이준형(Foo)
지식공유자

2024. 09. 24. 23:35

안녕하세요, 김영빈님.

다시 한 번 좋은 질문을 해주셔서 감사합니다.

제가 캐시를 한 문장으로 설명한다면, "비용이 높은 작업을 비용이 낮은 작업으로 대체하는 것"이라고 표현할 수 있을 것 같습니다. 여기서 비용이 높은 작업은 데이터베이스(DB)에 대한 I/O이고, 비용이 낮은 작업은 Redis에 대한 I/O입니다.

말씀하신 것처럼 Redis도 I/O를 발생시키고, 그 동안 대기 시간이 발생하는 것은 동일합니다. 그러나 여기서 주목해야 할 점은 I/O의 종류와 비용이 다르다는 것입니다. 특히 DB에 대한 I/O는 Redis에 대한 I/O보다 비용이 더 높습니다.

그 이유는 DB가 일반적으로 데이터의 원천(Source) 역할을 하기 때문입니다. 데이터베이스는 트랜잭션 처리, 데이터 무결성일관성 유지 등 다양한 강력한 기능을 제공합니다. 우리가 작성하는 애플리케이션 로직은 이러한 무결성과 일관성에 기반하는 경우가 많습니다.

따라서 원래 DB가 처리해야 할 부하를 다른 시스템이 대신 처리해준다면, 그것만으로도 전체 시스템의 성능을 크게 향상시킬 수 있습니다. 이 역할을 일반적으로 "캐시"가 수행하며, 애플리케이션 간에 공유되는 캐시 저장소로 Redis가 자주 활용됩니다.

Redis를 사용하는 것이 효과적인 경우는 다음과 같습니다:

  • 빈번한 동일 데이터 조회: 동일한 데이터를 반복적으로 조회하며, 데이터 변경 빈도가 낮은 경우.

  • 데이터베이스 부하 감소 필요: 데이터베이스에 과도한 부하가 걸려 성능 저하가 발생하는 경우.

  • 실시간 처리 요구사항: 매우 낮은 지연 시간이 필요한 실시간 애플리케이션의 경우.

이렇게 Redis를 활용하면 DB에 대한 직접적인 접근을 줄이고, 전체적인 성능 향상을 기대할 수 있습니다. 물론 Redis를 도입할 때는 데이터 일관성, 캐시 적중률, 운영 비용 등을 종합적으로 고려해야 합니다. 마지막에 이야기 해주신 것처럼 그리 비용이 높지 않은 작업이라면 Redis를 도입할 필요가 없을 수도 있겠습니다. 😄

 

답변이 됐을까요?

 

참고로 다음 강의는 안정적인 서비스 배포를 위한 배포 전략에 대한 강의로, 아마 이달 내로 오픈될 것 같습니다. 강의 마지막까지 수강하느라 고생 많으셨고, 앞으로도 좋은 질문 기대하겠습니다.

감사합니다.

 

0

인프런 AI 인턴님의 프로필 이미지

2024. 09. 24. 00:16

안녕하세요, 인프런 AI 인턴입니다.

Redis를 캐시로 사용할 때 성능적인 차이가 많이 나지 않는 이유와 상황에 대해 궁금해 하시는 것 같네요. 비슷한 질문과 관련된 답변을 찾은 것을 기반으로 설명드리겠습니다.

캐시로서의 Redis 성능 비교

일반적인 상황에서 Redis를 캐시로 사용하는 이유는 메모리 기반의 데이터베이스이기 때문입니다. 메모리에서 데이터를 조회하는 속도는 디스크 기반의 데이터베이스와 비교해서 현저히 빠릅니다. 하지만, 이 이점이 항상 크게 느껴지지는 않을 수 있습니다.

다음은 관련된 예제를 다루고 있는 다른 질문과 답변 링크입니다:
- Redis 사용시 성능 이점에 대해: 이 링크는 Redis를 사용했을 때 성능적인 이점에 대한 설명과 컨텍스트를 다루고 있습니다. 이를 통해 왜 캐시가 유의미한지에 대해 더 깊이 이해할 수 있을 것입니다.

I/O 대기시간과 작업 수행 시간

Redis가 IO를 기다려야 한다는 부분에서는, 일반적인 디스크 IO와 비교했을 때 메모리 IO는 상당히 빠릅니다. 하지만 요청이 단순히 DB에서 단순한 레코드 한 줄을 조회할 때는 성능 이점이 적을 수 있다는 말씀에도 일리가 있습니다. 이는 SQL 데이터베이스와 같은 시스템이 내부적으로 캐싱 메커니즘을 제공하기 때문입니다.

적절한 캐시 전략

따라서, Redis를 사용할 때는 실제로 캐시가 필요한 경우, 예를 들어 복잡한 조회, 반복적인 트랜잭션 등의 경우에 사용하면 더 큰 성능 향상을 얻을 수 있습니다. 단순한 조회에는 자체 캐시나 디스크 기반의 데이터베이스로 충분할 수 있는 상황도 있을 것입니다.

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