.NET .NET Aspire 는 개발자에게 원활하고 직관적인 환경을 제공하도록 설계된 강력한 도구 및 라이브러리 제품군을 함께 제공합니다. 모듈식 및 확장 가능한 아키텍처를 통해 서비스, 컨테이너 및 실행 파일로 구성된 복잡한 시스템을 오케스트레이션하면서 정밀하게 애플리케이션 모델을 정의할 수 있습니다. 구성 요소가 다양한 프로그래밍 언어, 플랫폼, 스택 또는 운영 체제 .NET.NET Aspire 에 걸쳐 있는지 여부에 관계없이 조화롭게 작동하여 최신 클라우드 네이티브 앱 개발의 복잡성을 간소화합니다.
앱 모델 아키텍처
리소스는 앱 모델의 구성 요소입니다. 서비스, 컨테이너, 실행 파일 및 외부 통합과 같은 추상 개념을 나타내는 데 사용됩니다. 개발자는 특정 리소스를 사용하여 이러한 개념의 구체적인 구현에 대한 종속성을 정의할 수 있습니다. 예를 들어, Redis
리소스를 사용하여 Redis 캐시를 나타낼 수 있고, Postgres
리소스를 사용하여 PostgreSQL 데이터베이스를 나타낼 수 있습니다.
앱 모델은 종종 리소스 컬렉션과 동의어이지만 전체 애플리케이션 토폴로지의 상위 수준 표현이기도 합니다. 이것은 낮추기 위해 설계되었으므로 중요합니다. 이러한 방식으로 .NET.NET Aspire 애플리케이션 토폴로지의 컴파일러로 생각할 수 있습니다.
모델 낮추기
기존 컴파일러에서 "낮추기" 프로세스에는 고급 프로그래밍 언어를 점진적으로 더 간단한 표현으로 변환하는 과정이 포함됩니다.
- IR(중간 표현): 첫 번째 단계에서는 언어별 기능을 추상화하여 플랫폼 중립적 표현을 만듭니다.
- 컴퓨터 코드: 그런 다음 IR은 특정 CPU 아키텍처에 맞게 조정된 컴퓨터별 지침으로 변환됩니다.
마찬가지로 앱 .NET.NET Aspire 모델을 상위 수준 언어로 처리하여 애플리케이션에 이 개념을 적용합니다.
- 중간 구문: 앱 모델은 먼저 CDK(클라우드 개발 키트) 스타일 개체 그래프와 같은 중간 구문으로 낮춥니다. 이러한 구문은 플랫폼에 구애받지 않거나 특정 대상에 부분적으로 맞게 조정될 수 있습니다.
- 대상 런타임 표현: 마지막으로 게시자는 대상 플랫폼에 필요한 배포 준비 아티팩트(YAML, JSONHCL 또는 기타 형식)를 생성합니다.
이 계층화된 접근 방식은 다음과 같은 몇 가지 주요 이점을 제공합니다.
- 유효성 검사 및 보강: 변환 프로세스 중에 모델의 유효성을 검사하고 보강하여 정확성과 완전성을 보장할 수 있습니다.
- 다중 대상 지원:.NET.NET Aspire 는 여러 배포 대상을 지원하여 다양한 환경에서 유연성을 제공합니다.
- 사용자 지정 가능한 워크플로: 개발자는 프로세스의 각 단계에 연결하여 특정 요구 사항에 맞게 출력을 조정하여 동작을 사용자 지정할 수 있습니다.
- 정리 및 이식 가능한 모델: 상위 수준 앱 모델은 표현적이고 이식 가능하며 플랫폼별 문제에서 자유롭습니다.
가장 중요한 것은 번역 프로세스 자체가 확장성이 높다는 것입니다. 사용자 지정 변환, 보강 및 출력 형식을 정의하여 고유한 인프라 및 배포 요구 사항에 원활하게 적응할 수 .NET.NET Aspire 있습니다. 이 확장성은 .NET.NET Aspire 애플리케이션의 요구 사항과 함께 발전할 수 있는 강력하고 다재다능한 도구로 유지되도록 합니다.
형식 및 확장성
.NET .NET Aspire 은 다음 섹션에 자세히 설명된 특정 요구 사항을 간소화하기 위해 조정된 두 가지 기본 모드로 작동합니다. 두 모드 모두 친숙한 API의 강력한 집합과 풍부한 통합 에코시스템 을 사용합니다. 각 통합은 일반적인 서비스, 프레임워크 또는 플랫폼(예: Redis, PostgreSQLAzure 서비스 또는Orleans)으로의 작업을 간소화합니다. 이러한 통합은 퍼즐 조각처럼 함께 작동하므로 로컬로 실행하든 프로덕션에 배포하든 관계없이 리소스를 정의하고 종속성을 표현하며 동작을 쉽게 구성할 수 있습니다.
앱 호스트의 실행 컨텍스트에서 형식이 중요한 이유는 무엇인가요? 이는 적절한 API를 사용하여 앱 모델을 한 번 정의하고 각 모드에서 리소스가 작동하는 방식을 지정할 수 있기 때문입니다. 다음 리소스 컬렉션을 고려합니다.
- 데이터베이스: PostgreSQL
- 캐시: Redis
- AI 서비스: Ollama 또는 OpenAI
- 백엔드: ASP.NET Core 최소 API
- 프런트 엔드: React 앱
모드에 따라 앱 호스트는 이러한 리소스를 다르게 처리할 수 있습니다. 예를 들어, 실행 모드에서 앱 호스트는 컨테이너를 사용하여 로컬 PostgreSQL 데이터베이스와 Redis 캐시를 사용할 수 있으며, 게시 모드에서는 AzurePostgreSQL 배포 아티팩트와 Redis 캐시를 생성할 수 있습니다.
실행 모드
기본 모드는 로컬 개발 및 테스트에 적합한 실행 모드입니다. 이 모드 .NET.NET Aspire 에서 앱 호스트는 프로세스, 컨테이너 및 클라우드 에뮬레이터를 비롯한 애플리케이션 모델을 오케스트레이션하여 빠르고 반복적인 개발을 용이하게 합니다. 리소스는 프로덕션을 미러링하는 수명 주기를 사용하는 실제 런타임 엔터티처럼 동작합니다. 간단한 F5를 사용하여 앱 호스트는 앱 모델의 모든 항목(스토리지, 데이터베이스, 캐시, 메시징, 작업, API, 프런트 엔드)을 모두 완전히 구성하고 로컬로 디버그할 준비가 된 상태로 시작합니다. 앱 호스트가 다음 리소스를 로컬로 오케스트레이션하는 이전 섹션의 앱 모델을 살펴보겠습니다.
실행 모드의 작동 방식에 대한 자세한 내용은 Dev-time 오케스트레이션을 참조하세요.
게시 모드
게시 모드는 대상 환경에 맞게 조정된 배포 준비 아티팩트를 생성합니다. 앱 호스트는 앱 모델을 .NET Aspire 매니페스트, Terraform 구성, Bicep/ARM 템플릿, Docker Compose 파일 또는 CDK 구조와 같은 Kubernetes 출력으로 컴파일하여 모든 배포 파이프라인에 통합할 준비를 합니다. 출력 형식은 선택한 게시자에 따라 달라지며 배포 시나리오에서 유연성을 제공합니다. 이전 섹션에서 앱 모델을 고려할 때 앱 호스트는 아무것도 오케스트레이션하지 않습니다. 대신 클라우드 공급자에 애플리케이션을 배포하는 데 사용할 수 있는 게시 아티팩트를 내보낸다. 예를 들어, Azure에 배포하려고 한다고 가정하면 앱 호스트가 다음 리소스를 정의하는 Bicep 템플릿을 내보내게 됩니다.
게시 모드를 배포하는 방법에 대한 자세한 정보는 .NET.NET Aspire를 참조하십시오.
개발 시 오케스트레이션
실행 모드에서 앱 호스트는 앱 모델에 정의된 모든 리소스를 오케스트레이션 합니다. 그러나 어떻게 이것을 달성할 수 있을까요?
중요합니다
앱 호스트는 프로덕션 런타임이 아닙니다. 애플리케이션을 로컬로 실행하고 디버깅하는 프로세스를 간소화하는 개발 시간 오케스트레이션 도구입니다.
이 섹션에서는 앱 호스트가 앱 모델을 오케스트레이션하는 방법을 이해하는 데 도움이 되는 몇 가지 주요 질문에 답변합니다.
오케스트레이션의 힘은 무엇인가요?
오케스트레이션은 앱 토폴로지 전체에서 리소스 수명 주기, 시작 순서, 종속성 및 네트워크 구성을 관리하는 MICROSOFT DCP( 개발자 제어 평면 )에 위임됩니다.
앱 모델은 어떻게 사용합니까?
앱 모델은 컨테이너, 프로세스, 데이터베이스 및 외부 서비스를 포함하여 구현 IResource을 통해 모든 리소스를 정의하여 오케스트레이션을 위한 청사진을 형성합니다.
앱 호스트는 어떤 역할을 합니까?
앱 호스트는 원하는 애플리케이션 상태의 상위 수준 선언을 제공합니다. 앱 모델을 해석하고 그에 따라 오케스트레이션을 수행하는 DCP에 실행을 위임합니다.
모니터링되는 리소스는 무엇인가요?
컨테이너, 실행 파일 및 통합을 포함하여 선언된 모든 리소스는 올바른 동작을 보장하고 빠르고 안정적인 개발 워크플로를 지원하기 위해 모니터링됩니다.
컨테이너 및 실행 파일은 어떻게 관리합니까?
컨테이너 및 프로세스는 해당 구성을 사용하여 초기화되고 동시에 시작되며 앱 모델에 정의된 종속성 그래프를 준수합니다. DCP는 오케스트레이션 중에 준비 상태와 연결을 보장하고 종속성에 따라 올바른 순서를 유지하면서 가능한 한 빨리 리소스를 시작합니다.
리소스 종속성은 어떻게 처리되는가?
종속성은 앱 모델에 정의되고 DCP에 의해 평가되어 올바른 시작 시퀀스를 확인하여 종속성이 시작되기 전에 리소스를 사용할 수 있는지 확인합니다.
네트워킹은 어떻게 구성되었나요?
포트 바인딩과 같은 네트워킹은 명시적으로 정의되지 않는 한 자동으로 구성됩니다. DCP는 충돌을 해결하고 가용성을 보장하여 서비스 간의 원활한 통신을 가능하게 합니다.
오케스트레이션 프로세스는 계층화된 아키텍처를 따릅니다. 앱 호스트의 핵심은 분산 애플리케이션 리소스에 대한 개발자의 원하는 보기를 나타냅니다. DCP는 리소스를 오케스트레이션하고 일관성을 유지하여 원하는 상태가 실현되도록 합니다.
앱 모델은 DCP가 애플리케이션을 오케스트레이션하기 위한 청사진 역할을 합니다. 내부적으로 앱 호스트는 .NET 콘솔 애플리케이션으로 📦Aspire.Hosting.AppHost NuGet 패키지에 의해 구동됩니다. 이 패키지에는 오케스트레이션 종속성을 등록하여 원활한 개발 시간 오케스트레이션을 가능하게 하는 빌드 대상이 포함되어 있습니다.
DCP는 호환되는 KubernetesAPI 서버로, 동일한 네트워크 프로토콜 및 규칙을 Kubernetes사용합니다. 이 호환성을 통해 앱 호스트는 .NET Aspire 통신을 위해 기존 라이브러리를 Kubernetes 활용할 수 있습니다. 특히 앱 호스트에는 KubernetesClient NuGet 패키지의 📦 구현체로서 k8s.KubernetesClient
를 포함하는 .NETKubernetes 클라이언트가 있습니다. 이 클라이언트는 DCP API 서버와 통신하는 데 사용되므로 앱 호스트가 오케스트레이션 작업을 DCP에 위임할 수 있습니다.
앱 호스트를 실행하면 범용 .NET.NET Aspire 앱 모델을 실행 모드에서 로컬 실행에 맞게 조정된 DCP 특정 모델로 변환하여 "낮추기"의 첫 번째 단계를 수행합니다. 그런 다음, 이 DCP 모델은 DCP에 전달되어 이를 평가하고 그에 따라 리소스를 오케스트레이션합니다. 이러한 분리를 통해 앱 호스트는 로컬 실행을 위해 앱 모델을 조정하는 데 .NET.NET Aspire 중점을 두고 DCP는 맞춤형 모델을 실행하는 것을 전문으로 합니다. 다음 다이어그램은 이 오케스트레이션 프로세스를 시각화하는 데 도움이 됩니다.
앱 모델을 빌드하기 위한 앱 호스트 및 API에 대한 자세한 내용은 오케스트레이션 개요를 참조.NET.NET Aspire하세요.
개발자 제어 평면
DCP는 앱 호스트 오케스트레이션 기능의 .NET.NET Aspire 핵심입니다. 앱 모델에 정의된 모든 리소스를 오케스트레이션하고, 개발자 대시보드를 시작하고, 로컬 개발 및 테스트를 위해 모든 리소스가 올바르게 설정되도록 합니다. DCP는 리소스의 수명 주기를 관리하고, 네트워크 구성을 적용하고, 종속성을 확인합니다.
DCP는 Go를 기반으로 하는 Kubernetes 및 그의 에코시스템과 함께 Go로 작성되었습니다. 이 옵션을 사용하면 API와의 Kubernetes 깊고 네이티브 통합, 효율적인 동시성 및 Kubebuilder와 같은 완성도 높은 도구에 액세스할 수 있습니다. DCP는 다음 두 개의 실행 파일로 제공됩니다.
-
dcp.exe
: 앱 호스트가 통신할 수 있도록 Kubernetes유사 API 엔드포인트를 노출하는 API 서버입니다. 또한 로그 스트리밍을 앱 호스트에 노출하여 궁극적으로 로그를 개발자 대시보드로 스트리밍합니다. -
dcpctrl.exe
: API 서버에서 새 개체 및 변경 내용을 모니터링하여 실제 환경이 지정된 모델과 일치하는지 확인하는 컨트롤러입니다.
비고
DCP는 모델 및 실제 환경의 변경 내용이 비동기적으로 적용된다는 것을 의미하는 "최종 일관성"의 원칙에 따라 작동합니다. 이 방법은 눈에 띄는 지연을 발생시킬 수 있지만 DCP는 두 상태를 부지런히 동기화하도록 설계되었습니다. 문제가 발생할 때 즉시 실패할 수 있는 "매우 일관된" 시스템과 달리 DCP는 원하는 상태가 달성되거나 오류가 결정적으로 결정될 때까지 지속적으로 다시 시도하여 종종 모델과 실제 세계 간에 보다 강력한 맞춤을 생성합니다.
앱 호스트가 실행되면 클라이언트 라이브러리를 사용하여 Kubernetes DCP와 통신합니다. 모델의 리소스를 사양으로 변환하여 앱 모델을 DCP가 처리할 수 있는 형식으로 변환합니다. 특히 애플리케이션의 원하는 상태를 나타내는 CRD(사용자 지정 리소스 정의)를 생성하는 Kubernetes 작업이 포함됩니다.
DCP는 다음 작업을 수행합니다.
- 실행을 위해 리소스를 준비합니다.
- 서비스 엔드포인트를 구성합니다.
- 명시적으로 설정하지 않는 한 이름 및 포트를 동적으로 할당합니다(DCP는 포트를 사용할 수 있고 다른 프로세스에서 사용하지 않도록 합니다).
- 컨테이너 네트워크를 초기화합니다.
- 적용된 끌어오기 정책에 따라 컨테이너 이미지를 끌어온다.
- 컨테이너를 만들고 시작합니다.
- 필요한 인수 및 환경 변수를 사용하여 실행 파일을 실행합니다.
- 서비스 엔드포인트를 구성합니다.
- 리소스를 모니터링합니다.
- 프로세스 ID, 실행 상태 및 종료 코드를 포함하여 DCP 내에서 관리되는 개체에 대한 변경 알림을 제공합니다(앱 호스트는 애플리케이션의 수명 주기 를 효과적으로 관리하기 위해 이러한 변경 내용을 구독함).
- 개발자 대시보드를 시작합니다.
이전 섹션의 다이어그램에서 계속 진행하면서 DCP의 책임을 시각화하는 데 도움이 되는 다음 다이어그램을 고려합니다.
DCP 로그는 앱 호스트로 다시 스트리밍된 다음 개발자 대시보드로 전달됩니다. 개발자 대시보드는 시작, 중지 및 다시 시작과 같은 명령을 노출하지만 이러한 명령은 DCP 자체의 일부가 아닙니다. 대신 앱 모델 런타임, 특히 "대시보드 서비스" 구성 요소 내에서 구현됩니다. 이러한 명령은 DCP 개체를 조작하거나, 새 개체를 만들거나, 이전 개체를 삭제하거나, 해당 속성을 업데이트하여 작동합니다. 예를 들어 프로젝트를 다시 시작 .NET 하려면 프로젝트를 나타내는 기존 ExecutableResource 프로젝트를 중지 및 삭제하고 동일한 사양으로 새 프로젝트를 만들어야 합니다. 명령에 대한 자세한 내용은 다음의 .NET.NET Aspire사용자 지정 리소스 명령을 참조하세요.
개발자 대시보드
.NET .NET Aspire 개발자 대시보드는 로컬 개발 및 리소스 관리를 간소화하도록 설계된 강력한 도구입니다. 또한 독립 실행형 모드 를 지원하고 게시할 Azure Container Apps때 원활하게 통합됩니다. 직관적인 인터페이스를 통해 개발자는 애플리케이션 리소스를 쉽게 모니터링, 관리 및 상호 작용할 수 있습니다.
리소스 모니터링 및 관리
대시보드는 리소스 상태를 검사하고, 로그를 보고, 명령을 실행하기 위한 사용자에게 친숙한 인터페이스를 제공합니다. 로컬로 디버깅하든 클라우드에 배포하든 대시보드를 통해 애플리케이션의 동작을 완전히 파악할 수 있습니다.
기본 제공 및 사용자 지정 명령
대시보드는 시작, 중지 및 다시 시작과 같은 리소스를 관리하기 위한 명령 집합을 제공합니다. 명령은 대시보드 UI에서 직관적인 작업으로 표시되지만, 내부적으로 DCP 개체를 조작하여 작동합니다. 자세한 내용은 리소스 중지 또는 시작을 참조하세요.
이러한 기본 제공 명령 외에도 애플리케이션의 요구에 맞는 사용자 지정 명령을 정의할 수 있습니다. 이러한 사용자 지정 명령은 앱 모델에 등록되고 대시보드에 원활하게 통합되어 향상된 유연성과 제어를 제공합니다. 자세한 내용은 사용자 지정 리소스 명령에서 사용자 지정 명령.NET.NET Aspire에서 확인하세요.
실시간 로그 스트리밍
대시보드의 실시간 로그 스트리밍 기능에 대한 정보를 유지합니다. 앱 모델의 모든 리소스에서 로그는 DCP에서 앱 호스트로 스트리밍되고 대시보드에 표시됩니다. 고급 필터링 옵션(리소스 종류, 심각도 등)을 사용하면 관련 정보를 신속하게 파악하고 효과적으로 문제를 해결할 수 있습니다.
개발자 대시보드는 도구 그 이상이며, 신뢰도와 용이성을 갖춘 애플리케이션을 빌드, 디버깅 및 관리하기 .NET.NET Aspire 위한 명령 센터입니다.
참고하십시오
.NET Aspire