핵심 요약
.NET 10 LTS + Aspire 2는 로컬에서 docker-compose·터미널 잡일을 거의 없앤다. 사내 6개 서비스를 옮긴 결과 신규 개발자 온보딩 2일→4시간, 분산 디버깅 평균 시간 절반. AppHost가 OpenTelemetry·서비스 디스커버리·구성 관리를 통합 제공.
1. AppHost — 서비스 토폴로지 한 곳
var builder = DistributedApplication.CreateBuilder(args);
var postgres = builder.AddPostgres("db").AddDatabase("app");
var redis = builder.AddRedis("cache");
var api = builder.AddProject<Projects.Api>("api")
.WithReference(postgres).WithReference(redis);
var web = builder.AddProject<Projects.Web>("web")
.WithReference(api);
builder.Build().Run();
dotnet run --project AppHost 한 줄이면 DB·캐시·API·웹·관측 대시보드까지 동시 기동.
2. 관측 대시보드
OpenTelemetry trace, logs, metrics를 로컬 대시보드에서 즉시 본다. 분산 추적이 사실상 무설정. 프로덕션은 동일 OTel으로 외부 백엔드(Jaeger, Tempo, Datadog) 전송.
3. 마이그레이션 단계
- .NET 8/9 → 10 LTS: 대부분 호환, 단 일부 BinaryFormatter 사용 코드 제거 필요
- docker-compose → Aspire AppHost
- healthchecks·라우팅 → 자동
4. 성능 — .NET 10
| .NET 8 | .NET 10 | |
|---|---|---|
| 최소 API throughput | 1.0 | 1.12 |
| JSON 직렬화 | 1.0 | 1.18 |
| 콜드 스타트(컨테이너) | 820ms | 610ms |
5. 배포 — Aspire가 Kubernetes로
aspire deploy --target azure
# 또는 aspire manifest → kustomize
Azure가 가장 잘 지원하지만 다른 플랫폼도 manifest로 출력해 직접 적용 가능.
6. NativeAOT 옵션
.NET 10에서 minimal API의 NativeAOT가 거의 모든 시나리오에서 동작. 콜드 스타트 90ms 대까지 가능. 단, EF Core는 여전히 미지원 영역 존재.
7. 결정 가이드
- 마이크로서비스 3개 이상 → Aspire
- 모놀리식 단일 앱 → 일반 .NET 10
- Lambda·Function → NativeAOT 적극 검토
자주 묻는 질문
Q. 컨테이너 빌드는 자동? .NET SDK에 publish/Container 통합. dotnet publish /t:PublishContainer 한 줄로 OCI 이미지.

댓글 0