.NET Aspire 구성 요소에 대해 알아보기
앱의 각 마이크로 서비스는 고유할 가능성이 높지만 데이터베이스 및 캐시와 같은 지원 서비스에 대한 요구 사항은 유사한 경우가 많습니다. 이러한 지원 서비스와 인터페이스하는 각 마이크로 서비스에 코드를 작성하는 것은 어려울 수 있습니다. .NET Aspire에서는 .NET Aspire 구성 요소를 추가하면 해당 코드가 줄어듭니다. 마이크로 서비스에 필요할 가능성이 있는 여러 공통 지원 요구 사항에 대한 기본 제공 구성 요소가 있습니다.
아웃도어 의류 및 장비 회사에서 일하고 있다고 상상해 보세요. 개발팀은 새로운 eShop 웹앱을 위한 마이크로 서비스를 설계하기 시작했습니다. 각 마이크로 서비스에는 데이터베이스, 메시징 서비스, 캐시와 같은 서비스가 필요할 수 있습니다. .NET Aspire가 이러한 서비스와 상호 작용하는 데 어떻게 도움이 되는지 평가하려고 합니다.
이 단원에서는 기본적으로 .NET Aspire에 포함된 구성 요소와 마이크로 서비스에 가장 적합한 구성 요소를 선택하는 방법에 대해 알아봅니다.
.NET Aspire 구성 요소 사용
각 .NET Aspire 구성 요소는 NuGet 패키지이며 NuGet 패키지 관리자를 사용하여 프로젝트에 추가할 수 있습니다. Visual Studio에는 새로운 > .NET Aspire 구성 요소 추가 메뉴 항목이 있습니다. 이 작업을 수행하면 .NET Aspire 구성 요소만 표시하도록 필터가 적용된 패키지 관리자가 표시됩니다.
참고 항목
이 모듈의 뒷부분에 나오는 연습에서 이 구성 요소 도구를 사용하는 방법을 살펴보겠습니다.
C# Dev Kit 확장을 사용하는 Visual Studio Code는 .NET Aspire 구성 요소 추가도 지원합니다.
또는 .NET CLI가 .NET 구성 요소를 추가할 수 있습니다. 예시:
dotnet add package Aspire.StackExchange.Redis --prerelease
AppHost 프로젝트에서는 구성 요소를 등록하고 이를 호출하는 프로젝트에서 사용해야 합니다.
var cache = builder.AddRedis("cache");
builder.AddProject<Projects.AspireSample_Web>("webfrontend")
.WithReference(cache);
그런 다음 종속성 주입을 사용하여 이를 소비 프로젝트에 추가할 수 있습니다.
build.AddRedisClient("cache");
기타 사용 코드는 사용 중인 구성 요소에 따라 다릅니다.
참고 항목
각 .NET Aspire 구성 요소 형식에는 일반적으로 동등한 호스팅 패키지가 있습니다. 호스팅 패키지는 앱에 필요한 리소스와 종속성을 구성하며 이를 소비 프로젝트가 아닌 AppHost 프로젝트에 설치합니다.
데이터베이스 구성 요소
클라우드 네이티브 앱에서 각 마이크로 서비스는 자체 데이터 저장을 담당하며, 읽고 쓸 구조적 데이터 또는 반구조화된 데이터의 데이터베이스가 필요할 수 있습니다. 각 마이크로 서비스는 독립적으로 개발되므로 전체 애플리케이션의 여러 부분에서 여러 다른 데이터베이스 시스템이 사용되고 있음을 알 수 있습니다.
.NET Aspire에는 다음 관계형 데이터베이스 서버용 구성 요소가 포함되어 있습니다.
- PostgreSQL: SQL(구조적 쿼리 언어)이 구현된 자주 사용되는 오픈 소스 데이터베이스 서버입니다.
- MySQL: 또 다른 오픈 소스 SQL 데이터베이스 서버.
- SQL Database: Microsoft의 SQL 데이터베이스 시스템.
참고 항목
.NET Aspire SQL Database 구성 요소는 Microsoft SQL Server 또는 Azure 클라우드에서 SQL Server를 구현한 Azure SQL Database와 함께 작동할 수 있습니다. 마찬가지로 Azure에는 PostgreSQL 및 MySQL의 PaaS(Platform-as-a-Service) 구현이 포함되어 있습니다. 데이터베이스를 실행하는 위치는 각 마이크로 서비스 아키텍처 팀이 결정하지만 .NET Aspire 구성 요소는 많은 클라우드 위치를 지원할 수 있으며 특정 호스팅 서비스를 적용하지 않습니다.
반구조화된 데이터로 작업하려는 경우 .NET Aspire에는 다음 NoSQL 시스템에 대한 지원이 포함되어 있습니다.
- MongoDB: 플랫폼 간, 문서 지향 NoSQL 데이터베이스 서버입니다.
- Azure Cosmos DB: Azure에서 호스트되는 Microsoft의 유연한 NoSQL 데이터베이스 시스템입니다.
스토리지 구성 요소
.NET Aspire에서는 Azure Storage 계정에 파일, 데이터 또는 메시지를 저장해야 하는 마이크로 서비스를 위해 스토리지 구성 요소가 제공됩니다. Azure Storage의 세 가지 서비스 각각에 대해 하나의 구성 요소가 있습니다. Azure Storage로 수행하려는 작업에 따라 구성 요소를 선택합니다.
- Azure Blob Storage: 이 서비스를 사용하여 이미지 및 동영상과 같은 Blob 파일을 저장하고 검색합니다.
- Azure Table Storage: 이 서비스를 사용하여 반구조화된 데이터 테이블의 행을 저장하고 검색합니다.
- Azure Queue Storage 이 서비스를 사용하면 다른 구독 마이크로 서비스에 배포하기 위해 큐에 메시지를 추가할 수 있습니다.
메시징 구성 요소
클라우드 네이티브 앱에서 마이크로 서비스 간 통신의 안정성과 유연성을 개선하는 한 가지 방법은 직접 통신 대신 큐, 항목 및 구독을 제공하는 메시징 솔루션을 사용하는 것입니다. .NET Aspire에는 다음 세 가지 메시징 서비스에 대한 구성 요소가 포함되어 있습니다. 개발자가 사용하려는 메시징 브로커를 기반으로 구성 요소를 선택합니다.
- RabbitMQ: 이 메시지 브로커는 널리 사용되는 오픈 소스이며 큐, 항목 및 구독을 제공하기 위한 여러 메시징 프로토콜을 지원합니다.
- Apache Kafka: 이 서비스는 메시지를 포함할 수 있는 이벤트 스트림을 처리하고 Kafka 연결 API를 포함하여 다른 시스템과 데이터를 가져오고 내보냅니다.
- Azure Service Bus: 이 메시지 브로커는 Azure에서 호스트되며 큐 및 구독 기반 메시지 배포를 제공합니다.
캐싱 구성 요소
마이크로 서비스가 사용자 또는 다른 마이크로 서비스로부터 요청을 받으면 여러 위치 또는 복잡한 작업의 데이터를 사용하여 응답을 구성해야 할 수 있습니다. 이 작업에는 시간이 걸릴 수 있습니다. 이러한 응답의 일부를 캐싱하면 나중에 유사하거나 동일한 요청이 도착할 때 시간을 절약할 수 있습니다. 이러한 방식으로 캐싱은 성능을 최적화합니다.
널리 사용되는 캐시 서비스 중 하나는 Redis입니다. 메시지 브로커와 메모리 내 데이터베이스 기능이 있지만 웹 애플리케이션 및 서비스에서 응답을 캐시하는 데 가장 일반적으로 사용됩니다. .NET Aspire에는 Redis와 함께 작동하는 세 가지 구성 요소가 있습니다. 마이크로 서비스에서 달성하려는 캐싱 작업을 기반으로 구성 요소를 선택합니다.
- Redis 구성 요소: Redis를 메모리 내 데이터베이스로 사용하려는 경우 이 구성 요소를 사용합니다.
- Redis 출력 캐싱 구성 요소: 전체 웹 페이지와 같은 완전한 HTTP 응답을 캐시하려는 경우 이 구성 요소를 사용합니다.
- Redis 분산 캐시 구성 요소: 앱의 여러 마이크로 서비스에 대한 단일 캐시를 만들려는 경우 이 구성 요소를 사용합니다.
보안
클라우드 네이티브 애플리케이션에서 데이터 보안은 비즈니스에 중요한 항목인 경우가 많습니다. 고객은 사용자의 개인 데이터와 중요한 데이터를 신뢰할 수 있으므로 해당 데이터가 암호화되어 가로채기 또는 변조로부터 보호되는지 확인해야 합니다. 디지털 서명 및 암호화를 사용하려면 프라이빗 키를 저장하고 암호 해독을 위해 이를 검색해야 합니다. Azure Key Vault는 키와 비밀, 인증서 등의 기타 비밀을 안전하게 저장할 수 있는 위치 중 하나입니다.
.NET Aspire에는 Azure Key Vault 구성 요소가 포함되어 있어 Azure Key Vault에서 비밀을 쉽게 저장하고 검색할 수 있습니다.