캐시 및 Redis
앱이 사용자 요청에 신속하게 응답해야 합니다. 웹 사이트가 느리면 방문자는 빠르게 좌절감을 느끼고 경쟁사를 방문하기 위해 사이트를 떠날 것입니다. 복잡한 데이터 집합이 요청되는 경우에도 빠르게 응답하는 앱을 어떻게 만들 수 있나요? 앱을 가속화하는 한 가지 방법은 캐시를 사용하는 것입니다.
아웃도어 장비 소매업체에서 일한다고 상상해 보세요. 새 웹앱이 개발 중이고 여러 마이크로 서비스가 첫 번째 릴리스에 가까워지고 있지만 일부 페이지가 너무 느리게 로드됩니다. 이러한 서비스의 성능을 높일 수 있는 방법을 찾을 필요가 있습니다.
이 단원에서는 캐싱이 웹앱의 속도를 높이는 데 어떻게 도움이 되는지 알아봅니다.
Redis란?
Redis는 오픈 소스 인 메모리 정보 저장소입니다. 이름은 원격 사전 서버의 약어입니다. Redis의 가장 중요한 특징은 읽기 및 쓰기 작업 모두에 대한 낮은 대기 시간일 것입니다. 이는 Redis의 디자인과 모든 정보를 메모리에 저장하고 있기 때문에 가능합니다. Redis에는 데이터베이스 및 메시지 브로커 기능이 포함되어 있지만 캐싱 시스템으로 널리 인식되고 있습니다.
캐시가 성능을 개선하는 방법
캐시는 사용자에 대한 응답을 구성하는 데 시간이 걸리는 많은 시스템의 성능을 개선하는 데 사용될 수 있습니다. 예를 들어, 마이크로 서비스로 구성된 전자상거래 웹 사이트를 생각해 보세요. 장바구니에 어떤 항목이 있는지 알려고 하는 경우 시스템은 다음을 수행할 수 있습니다.
- 웹앱 마이크로 서비스에서 요청을 수신합니다.
- 사용자가 로그인되어 있는 경우 인증 마이크로 서비스를 호출하여 사용자의 ID를 확인합니다.
- 장바구니 마이크로 서비스를 호출하여 장바구니에 담긴 항목과 수량을 알아봅니다.
- 제품 카탈로그 마이크로 서비스를 호출하여 각 제품에 대한 전체 세부 정보를 가져옵니다.
- 이미지 마이크로 서비스를 호출하여 각 제품에 대한 이미지 Blob을 가져옵니다.
- 재고 조사 마이크로 서비스를 호출하여 재고 수준을 확인합니다.
- 배송 마이크로 서비스를 호출하여 사용자의 위치와 선호도에 따른 배송 비용을 계산합니다.
정확한 단계는 디자인 및 비즈니스 기능에 따라 다를 수 있지만 프로세스가 복잡하고 별도의 많은 마이크로 서비스와 지원 서비스가 포함될 수 있다는 것을 알 수 있습니다. 각 마이크로 서비스가 제대로 작동하도록 구성하고 리소스를 확보해야 하지만 응답 구문에는 필연적으로 시간이 소모됩니다.
이제 사용자가 페이지를 새로 고침하는 경우를 생각해 보겠습니다. 전체 HTML 응답을 처음부터 재구성하는 대신, 페이지 또는 페이지의 일부가 캐시에 저장된 경우 원래 요청보다 훨씬 빠르게 사용자에게 반환될 수 있습니다. 이러한 빠른 응답은 웹앱의 반응성을 높이고 사용자에게 서비스를 제공하는 데 도움이 됩니다.
캐시 고려 사항
캐싱을 사용할 때 주요 디자인 결정은 특정 콘텐츠를 캐시하는 기간입니다. 예를 들어, 장바구니에서 다른 주문이 접수될 가능성이 있는 한 시간 동안 완료된 장바구니 페이지를 캐시하면 캐시된 페이지는 경우에 따라 오래된 재고 수준을 보고하며 사용자는 배달을 예상보다 오래 기다려야 할 수도 있습니다. 페이지를 1분 동안만 캐시하면 재고 수준이 정확할 것이라고 확신할 수 있지만 성능은 거의 또는 전혀 개선되지 않을 수 있습니다. 따라서 정보를 캐시할 기간을 선택할 때 다음 사항을 고려합니다.
- 정보는 얼마나 자주 변경되나요? 예를 들어, 재고 수준은 한 시간에 여러 번 변경될 수 있지만 새 제품은 몇 달에 한 번씩만 카탈로그에 나타날 수 있습니다.
- 사용자가 최신 정보를 보는 것이 얼마나 중요하나요? 예를 들어, 재고 수준은 기본적일 수 있지만 신제품 검토는 시간이 덜 중요하다고 생각할 수 있습니다.
- 정보에 대한 요청을 얼마나 자주 받나요? 인기 있는 정보를 캐싱하면 시스템이 해당 정보를 캐시로부터 여러 번 사용할 수 있으므로 성능이 더 개선됩니다.
.NET Aspire 프로젝트에서 Redis 사용
Redis는 클라우드 네이티브 애플리케이션에서 캐싱을 위해 널리 사용되는 선택입니다. .NET Aspire는 Redis 서비스와 상호 작용하는 데 사용할 수 있는 세 가지 구성 요소를 제공합니다.
- .NET Aspire StackExchange Redis 구성 요소: Redis 서버와 직접 상호 작용하려면 이 구성 요소를 사용합니다. 예를 들어, 이를 사용하여 Redis 데이터베이스에 값을 저장 및 검색하거나 채널로 전송된 메시지를 구독할 수 있습니다. 이 구성 요소는 캐싱에 중점을 두지 않으므로 이 모듈에서는 더 이상 고려하지 않습니다.
- .NET Aspire StackExchange Redis 출력 캐싱 구성 요소: 이 구성 요소를 사용하여 완전한 HTTP 응답을 캐시합니다.
- .NET Aspire StackExchange Redis 분산 캐싱 구성 요소: 이 캐싱 구성 요소를 사용하여 분산 캐시에서 데이터를 저장하고 검색합니다. 분산 캐싱은 여러 마이크로 서비스 또는 기타 클라이언트 서비스가 단일 캐시를 공유하는 아키텍처를 설명합니다.