.NET Aspire란?

완료됨

Microsoft Azure 및 AWS(Amazon Web Services)와 같은 클라우드 에코시스템은 IT 업계와 웹 애플리케이션 및 웹 서비스를 위한 널리 사용되는 호스팅 솔루션에 깊이 포함되어 있습니다. 클라우드 호스팅 시스템이 애플리케이션의 기본 선택일 가능성이 높으므로 만드는 애플리케이션이 이를 최대한 활용하도록 설계되었는지 확인해야 합니다.

클라우드 네이티브 애플리케이션은 클라우드에서 실행되도록 특별히 설계한 애플리케이션입니다. 애플리케이션은 성능, 확장성 및 안정성이 최적이 되도록 특정 아키텍처 패턴을 나타내는 경우가 많습니다.

아웃도어 의류 및 장비 회사에서 일하고 있다고 상상해 보세요. 이사회에서 회사의 주요 고객 대면 사이트를 위한 새로운 eShop 웹앱을 개발해 줄 것을 요청했습니다. 팀은 마이크로 서비스 모델에 익숙하며 .NET Aspire를 사용하면 프로젝트가 더 쉬워질지 알고 싶습니다.

이 단원에서는 클라우드 네이티브 아키텍처에 대해 자세히 알아보고 이를 빌드하는 데 수반되는 과제를 살펴봅니다. 또한 .NET Aspire가 이러한 문제를 어떻게 해결할 수 있는지 살펴보겠습니다.

클라우드 네이티브 애플리케이션이란?

클라우드 네이티브 애플리케이션은 최고의 성능, 가용성 및 복원력을 제공하기 위해 클라우드 인프라를 최적으로 사용하도록 설계된 애플리케이션입니다. 클라우드 네이티브 소프트웨어 아키텍처에는 다음과 같은 6가지 핵심 요소가 있습니다.

  • 클라우드 인프라. 클라우드 네이티브 애플리케이션은 온-프레미스 서버 팜이 아닌 클라우드 호스팅 솔루션에 배포됩니다.
  • 마이크로 서비스. 클라우드 네이티브 애플리케이션은 마이크로 서비스 집합으로 구현되며, 각 마이크로 서비스는 비즈니스 기능의 작은 부분을 구현합니다.
  • 컨테이너. 마이크로 서비스와 애플리케이션의 기타 부분은 일관된 실행 환경을 보장하기 위해 컨테이너에서 개발 및 배포됩니다.
  • 지원 서비스. 데이터베이스 및 캐싱 서비스와 같은 보조 리소스를 사용하여 마이크로 서비스에 공통 기능을 제공할 수 있습니다.
  • 최신적인 디자인. 클라우드 네이티브 애플리케이션은 CI/CD(연속 통합/지속적인 배포), 일회용, 포트 바인딩 등과 같은 원칙을 포함하는 12단계 애플리케이션 방법론을 준수합니다.
  • 자동화. 클라우드 네이티브 애플리케이션은 IaC(Infrastructure as Code)를 사용하여 플랫폼 프로비전 및 배포를 자동화합니다.

클라우드 네이티브 애플리케이션의 6가지 핵심 요소를 보여 주는 개념 다이어그램.

민첩성을 제공하기 위해 클라우드 네이티브 애플리케이션은 일련의 마이크로 서비스로 구성됩니다. 각 마이크로 서비스:

  • 전체 기능의 한 부분을 구현합니다.
  • 자체 프로세스에서 실행되며 다른 프로세스와 격리되어 전용 컨테이너에 있는 경우가 많습니다.
  • 별도의 팀에 의해 빌드됩니다.
  • 다른 사람과 통신하지만 느슨하게 연결되어 있습니다.

각 팀은 마이크로 서비스 구현에 선호하는 언어와 기술을 선택합니다. 각 마이크로 서비스는 다른 마이크로 서비스와 독립적으로 배포되고 크기 조정됩니다.

다음 다이어그램은 기존 모놀리식 웹 애플리케이션과 마이크로 서비스로 구성된 웹 애플리케이션 간의 차이점을 보여 줍니다.

모놀리식 웹 애플리케이션과 마이크로 서비스로 구성된 애플리케이션 간의 차이점을 보여 주는 개념 다이어그램.

클라우드 네이티브 앱은 비즈니스에 많은 이점을 가져다 줄 수 있습니다. 예시:

  • 클라우드에서 앱을 호스팅하면 호스팅 서버, 운영 체제, 지원 서비스 등의 인프라를 직접 빌드하고 유지 관리할 필요가 없습니다.
  • 각 마이크로 서비스는 독립적으로 개발되므로 다른 팀이나 주 버전 마일스톤을 기다릴 필요 없이 새로운 기능을 지속적으로 배포할 수 있습니다.
  • 각 마이크로 서비스는 하나 이상의 컨테이너에서 실행되므로 모든 테스트, 준비 및 프로덕션에서 환경이 동일하다는 것을 알 수 있습니다.
  • Kubernetes와 같은 컨테이너 오케스트레이션 시스템을 사용하면 추가 인스턴스를 신속하게 배포하여 추가 수요에 대응할 수 있습니다.

클라우드 네이티브 애플리케이션이 제시하는 과제

여러 마이크로 서비스와 다양한 기능으로 구성된 클라우드 네이티브 애플리케이션은 복잡해질 수 있으며 모놀리식 앱에서는 발생하지 않는 문제가 있을 수 있습니다. 예시:

  • 앱 정의. 주의 깊게 문서화하지 않으면 개발자가 완전한 클라우드 네이티브 앱을 구성하는 구성 요소를 이해하기 어려울 수 있습니다.
  • 커뮤니케이션. 각 마이크로 서비스는 사용자 요청에 대한 응답을 수식화하기 위해 다른 마이크로 서비스와 메시지나 데이터를 교환해야 할 수도 있습니다. 이러한 통신을 사용하도록 설정해야 하지만 하나의 마이크로 서비스를 다른 마이크로 서비스와 긴밀하게 연결하지 않는 방식으로 수행해야 합니다. 수요가 많거나* 서비스 장애가 발생하는 경우에도 신뢰성을 유지하려면 통신이 필요합니다.
  • 복원력. 어떤 호스팅 서비스도 100% 이용 가능하지는 않습니다. 드물지만 마이크로 서비스를 사용할 수 없는 경우 앱이 오류를 강력하게 처리하고 서비스가 반환될 때까지 요청을 유지하는지 확인해야 합니다.
  • 분산 데이터. 각 마이크로 서비스는 자체 데이터 스토리지 계층을 구현하며 다른 마이크로 서비스와 동일한 데이터베이스 서버를 사용하지 않을 수 있습니다. 여러 마이크로 서비스에서 데이터를 쿼리하는 방법과 트랜잭션을 구현하는 방법을 고려해야 합니다.
  • 비밀 앱이 중요한 데이터를 처리하는 경우 각 마이크로 서비스는 응답을 반환하기 전에 수신하는 모든 요청을 인증해야 합니다. 비대칭 및 대칭형 암호화 키와 같은 비밀은 데이터를 보호하고 호출 사용자 및 마이크로 서비스를 확실하게 식별하는 데 사용되는 경우가 많습니다. 클라우드 네이티브 앱에서 이러한 비밀이 어떻게 저장되고 교환되는지 고려해야 합니다.
  • 개발자 온보딩. 새로운 개발자는 앱의 아키텍처와 이를 빠르게 사용하는 방법을 이해할 수 있어야 합니다. 많은 도메인 간 지식이나 로컬 설정 없이도 새로운 개발자가 속도를 낼 수 있도록 해야 합니다.

최근에는 클라우드 네이티브 애플리케이션 디자인이 인기를 얻고 있지만 이 섹션과 같은 문제로 인해 일부 팀에서는 이 패턴을 수용하지 못합니다. 예를 들어, .NET에는 이러한 문제를 해결하는 데 필요한 모든 기능이 있지만 솔루션에는 학습 및 사용자 지정 코드에 상당한 투자가 필요할 수 있습니다.

.NET Aspire란?

.NET Aspire는 개발자가 빠르고 쉽게 클라우드 네이티브 애플리케이션을 만들 수 있도록 설계된 .NET용으로 빌드된 새로운 클라우드 지원 스택입니다. 지금까지 살펴본 문제를 해결하는 .NET Aspire의 기능을 살펴보겠습니다.

오케스트레이션

마이크로 서비스와 느슨하게 결합된 특성은 배포된 앱의 유연성을 높이지만 구성을 더 어렵게 만들 수 있습니다. 앱을 구성하는 서비스 목록이 불분명해지고 마이크로 서비스를 사용할 수 있는 엔드포인트를 식별하기 어려울 수 있습니다. .NET Aspire는 다음과 같은 오케스트레이션 기능을 제공합니다.

  • 애플리케이션을 구성하는 .NET 프로젝트, 컨테이너, 실행 파일 및 클라우드 리소스를 모든 팀에 대해 명확하게 지정할 수 있습니다.
  • 마이크로 서비스는 모든 애플리케이션 구성 요소에 대한 엔드포인트를 자동으로 발견할 수 있습니다. .NET Aspire는 연결 문자열을 관리하고 필요한 경우 마이크로 서비스에 삽입하여 이 서비스 검색을 수행합니다.

.NET Aspire 솔루션을 만들면 솔루션에 <SolutionName>.AppHost라는 새 프로젝트가 표시됩니다. 이 프로젝트는 앱에 대한 오케스트레이션을 구현하며 이것이 솔루션의 시작 프로젝트인지 확인해야 합니다.

구성 요소

마이크로 서비스에는 일반적으로 해당 기능을 뒷받침하는 복잡한 지원 서비스에 대한 기능적 요구 사항이 있습니다. 예시:

  • 데이터 스토리지. 제품 카탈로그, 카트, ID 저장소 및 기타 기능을 지원하기 위해 데이터를 유지하려면 마이크로 서비스가 구조화된 저장소 또는 반구조화된 저장소에 데이터를 저장해야 합니다.
  • 캐싱. 성능을 최대화하기 위해 마이크로 서비스는 부분 또는 전체 응답을 캐시에 저장하여 이후의 유사한 요청을 더 빠르게 충족할 수 있습니다.
  • 메시징 느슨하게 결합된 마이크로 서비스는 서로 통신해야 하며 트래픽이 많거나 네트워크 조건이 까다로운 경우에도 이 통신이 신뢰할 수 있는지 확인해야 합니다. 보낸 사람의 메시지를 큐에 넣어서 수신자에게 배포하는 서비스는 일반적인 요구 사항입니다.

.NET Aspire에서는 스택에 .NET Aspire 구성 요소가 포함되어 있으므로 각 마이크로 서비스에서 이러한 지원 서비스를 쉽게 구현할 수 있습니다. 각 구성 요소는 솔루션에 추가할 수 있고 지원 서비스에 대한 표준 인터페이스를 구현하는 NuGet 패키지입니다. 이 표준 인터페이스는 마이크로 서비스가 지원 서비스에 일관되고 원활하게 연결되도록 보장합니다.

기본 제공 .NET Aspire 구성 요소는 다음과 같습니다.

  • PostgreSQL, SQL Database, Azure Cosmos DB 및 MongoDB 등을 위한 데이터 스토리지 구성 요소입니다.
  • Redis용 구성 요소와 같은 캐싱 구성 요소입니다.
  • RabbitMQ 및 Azure Service Bus 등을 위한 메시징 구성 요소.

Important

.NET Aspire에는 Azure Storage 및 Azure Service Bus와 같은 Azure 서비스와 함께 작동하는 많은 구성 요소가 포함되어 있지만 Azure는 .NET Aspire 프로젝트에 필요하지 않으며 RabbitMQ 및 MongoDB와 같은 Azure 외부 지원 서비스에서도 동일하게 작동합니다.

도구

.NET Aspire는 Visual Studio에서 개발자가 사용할 수 있는 도구에도 추가됩니다. 예시:

  • 새로운 프로젝트 템플릿을 사용하면 마법사의 몇 가지 단계를 통해 .NET Aspire 솔루션을 만들 수 있습니다.
  • .NET Aspire 대시보드는 Visual Studio에서 솔루션을 시작할 때마다 나타나는 웹 인터페이스입니다. 이 대시보드에는 앱에 대한 모든 마이크로 서비스와 지원 서비스가 표시되며 테스트를 위해 호출할 수 있습니다. 성능 및 모니터링 도구도 표시됩니다.
  • .NET Aspire 구성 요소를 추가하거나, .NET Aspire 오케스트레이터 지원을 위해 프로젝트를 등록하거나, 기타 작업을 완료하는 데 사용할 수 있는 추가 메뉴 항목이 나타납니다.

참고 항목

이 모듈의 뒷부분에서 .NET Aspire 도구에 대해 자세히 알아봅니다.

자세한 정보