.NET Aspire 정식 출시 – 개발자를 위한 클라우드 네이티브 솔루션
클라우드 시대에 .NET 개발자로서 마이크로서비스나 분산 시스템을 구축할 때 겪는 가장 큰 어려움은 복잡성입니다. Microsoft는 그동안 헬스 체크, YARP(리버스 프록시), HTTP 클라이언트 팩토리, gRPC 등 핵심 라이브러리를 도입하고, Native AOT와 SDK 기반 컨테이너 빌드 등을 통해 .NET 애플리케이션의 클라우드 환경 준비를 쉽게 만들기 위해 노력해왔습니다.
그럼에도 불구하고 실제 클라우드 애플리케이션을 개발하는 과정은 까다로웠고, 많은 개발자들이 비즈니스 로직보다 인프라 구성에 더 많은 시간을 투자해야 했습니다. 이러한 배경에서 등장한 것이 바로 .NET Aspire입니다. .NET Aspire는 .NET 8 기반의 새로운 클라우드 준비 스택으로, 관찰 가능하고 프로덕션 준비가 완료된 분산 애플리케이션을 쉽게 구축할 수 있도록 돕는 통합 솔루션입니다.
핵심 기능 요약
1. 분산 애플리케이션 구성 (오케스트레이션)
기존에는 다중 프로젝트로 구성된 마이크로서비스 애플리케이션을 개발할 때 각 프로젝트와 필요한 외부 서비스를 개별적으로 실행하고 구성해야 했습니다. .NET Aspire는 App Host 프로젝트를 도입하여, 여러 애플리케이션과 그 의존 서비스를 한 곳에서 선언적으로 관리할 수 있게 해줍니다.
- App Host 프로젝트에서는 친숙한 C# 구문을 사용해 여러 애플리케이션 프로젝트와 자원(예: 데이터베이스, 캐시 등)을 한 번에 구성할 수 있습니다.
- Visual Studio에서 F5 실행 시 모든 프로젝트에 디버거가 자동 부착되어, 복잡한 서비스 간 연결 설정 없이 바로 디버깅할 수 있습니다.
2. 기본 제공 자원 및 서비스 통합
.NET Aspire는 Docker 컨테이너, 외부 실행 파일, .NET 프로젝트 등 다양한 자원을 App Host에서 관리할 수 있으며, Redis, PostgreSQL, MySQL, SQL Server, Oracle, MongoDB, RabbitMQ 등 여러 오픈 소스 서버 컨테이너들을 한 줄의 코드로 쉽게 추가할 수 있습니다.
- 각 서비스의 연결 정보는 App Host가 자동으로 주입하여, 개발자가 일일이 수동 설정할 필요를 없앱니다.
- 필요 시 C#으로 커스텀 호스팅 확장을 만들어 MailDev, KeyCloak 등 특수 도구도 손쉽게 통합할 수 있습니다.
3. 컴포넌트 기반 기본 설정 (Resiliency & Observability)
분산 서비스 아키텍처에서 중요한 통신 안정성과 관측성을 위해, Aspire는 데이터베이스, 메시징 시스템, 캐시 등 클라이언트 라이브러리를 기본적으로 탄력성과 관측성이 활성화된 채 제공하는 컴포넌트 모델을 채택합니다.
- 컴포넌트를 추가하면 필요한 NuGet 패키지가 자동 설치되고, DI 컨테이너에 등록되며 기본 헬스 체크, OpenTelemetry 기반 로그 및 메트릭이 설정됩니다.
- 별도의 보일러플레이트 코딩 없이도 안정성과 관측성을 확보할 수 있습니다.
4. Dapr 등 외부 프레임워크와의 통합
.NET Aspire는 Dapr와 같은 마이크로서비스 보조 프레임워크와도 원활하게 연동됩니다. 복잡한 Dapr 구성 YAML 없이 C# 코드로 Dapr 사이드카를 실행하고 구성할 수 있으며, 관련 설정과 모니터링을 Aspire 대시보드를 통해 확인할 수 있습니다.
개발자 경험
1. 개발 도구 통합 (Visual Studio, CLI, VS Code)
.NET Aspire는 .NET 8 SDK의 워크로드 형태로 배포되어, 명령줄에서 dotnet workload install aspire 명령어로 쉽게 설치할 수 있습니다. Visual Studio 2022 17.10 이상에서는 Aspire 관련 템플릿과 기능이 기본 제공되며, VS Code 사용자도 C# Dev Kit 확장을 통해 Aspire 프로젝트를 관리할 수 있습니다.
2. 로컬 실행 및 디버깅 경험 개선
기존에는 여러 API, 백그라운드 서비스, 데이터베이스, 캐시 등을 각각 실행하고 설정해야 했지만, Aspire는 App Host 프로젝트 하나의 실행으로 모든 서비스가 동시에 구동됩니다. 이로 인해 각 서비스에 개별적으로 디버거를 연결할 필요 없이 단일 스타트업 프로젝트처럼 디버깅할 수 있습니다.
또한, Aspire 대시보드를 통해 실행 중인 모든 리소스의 상태, 로그, 메트릭, 분산 추적 등을 실시간으로 확인할 수 있어 개발 및 진단이 더욱 편리해집니다.
실습 예시: Web API + Background Worker + Redis 통합 구성
아래는 ASP.NET Core Web API와 Background Worker 프로젝트, 그리고 Redis 캐시를 .NET Aspire App Host에서 통합 구성하는 예시 코드입니다.
var builder = DistributedApplication.CreateBuilder(args);
// Redis 캐시 컨테이너 추가 (Redis Commander 웹 UI 포함)
var cache = builder.AddRedis("cache")
.WithRedisCommander();
// Web API 프로젝트 추가 - 외부 HTTP 엔드포인트 공개 및 Redis 참조 연결
builder.AddProject<Projects.MyApi>("myapi")
.WithExternalHttpEndpoints()
.WithReference(cache);
// 백그라운드 워커 프로젝트 추가 - Redis 참조 연결
builder.AddProject<Projects.MyWorker>("myworker")
.WithReference(cache);
builder.Build().Run();
이 예시에서는 한 번의 실행 명령으로 Redis 컨테이너와 두 개의 .NET 프로젝트가 자동으로 실행되고, 각 프로젝트는 Redis 연결 정보를 자동으로 주입받게 됩니다.
마무리
.NET Aspire는 .NET 기반 분산 애플리케이션 개발의 생산성과 품질을 한층 향상시킬 솔루션입니다. 기존 프로젝트에 App Host를 추가하는 것만으로도 Aspire의 모든 혜택을 누릴 수 있으며, 클라우드 네이티브 개발에 필요한 여러 반복 작업들을 획기적으로 줄여줍니다.
앞으로 .NET Aspire는 정기적인 업데이트와 커뮤니티 피드백을 통해 더욱 발전할 예정입니다. .NET 개발자라면 새로운 개발 경험과 효율성을 직접 체험해 보시길 권장합니다.
.png)
댓글
댓글 쓰기