ASP.NET Core 메타패키지란?
Microsoft.AspNetCore 패키지는 수많은 ASP.NET Core 프로젝트 템플릿에 기본적으로 포함되어 있는 패키지 중 하나입니다. 새로운 ASP.NET Core 프로젝트를 생성할 때마다 이 패키지가 일반적인 프로젝트 종속성으로 반복해서 추가되는 것을 확인할 수 있으며, 기본적인 ASP.NET Core 애플리케이션을 구축하는 데 필요한 핵심 패키지들을 제공합니다.
흥미로운 점은 이 패키지 자체에는 실제 DLL이나 코드가 전혀 들어 있지 않다는 것입니다. 단지 다른 패키지들에 대한 종속성 목록만 담고 있을 뿐인데, 이처럼 여러 패키지를 하나로 묶어 참조하는 패키지를 메타패키지(metapackage)라고 부릅니다. 프로젝트에 이 패키지를 추가하면, 그것이 의존하는 모든 관련 패키지와 해당 DLL들이 함께 포함됩니다.
메타패키지에 포함된 패키지 목록
Microsoft.AspNetCore.Diagnostics
Microsoft.AspNetCore.Hosting
Microsoft.AspNetCore.Routing
Microsoft.AspNetCore.Server.IISIntegration
Microsoft.AspNetCore.Server.Kestrel
Microsoft.Extensions.Configuration.EnvironmentVariables
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
Microsoft.Extensions.Logging
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Options.ConfigurationExtensions
NETStandard.Library
실제로 함께 설치되는 각 패키지의 버전은 설치하는 Microsoft.AspNetCore 패키지의 버전에 따라 결정됩니다.
메타패키지가 제공하는 핵심 기능
이러한 종속성들은 Kestrel 웹 서버를 사용하고 IIS 통합을 포함하는 기본 ASP.NET Core 서버를 구성하기 위한 핵심 라이브러리들을 제공합니다.
애플리케이션 자체의 관점에서 보면, 이 패키지 하나만으로도 애플리케이션 설정(appsettings)과 환경 변수를 구성(Configuration)으로 불러오고, IOptions 인터페이스를 활용하며, 콘솔 로깅을 설정할 수 있습니다.
미들웨어 측면에서는 Microsoft.AspNetCore.Diagnostics 패키지만 포함되어 있습니다. 이를 통해 ExceptionHandlerMiddleware, DeveloperExceptionPageMiddleware, StatusCodePagesMiddleware와 같은 미들웨어를 추가할 수 있습니다.
메타패키지의 한계
완전한 애플리케이션을 만들기 위해서는 메타패키지 하나만으로는 충분하지 않습니다. 컨트롤러나 뷰 같은 MVC 기능이 포함되어 있지 않기 때문입니다. MVC 기능을 추가하려면 Microsoft.AspNetCore.Mvc 또는 Microsoft.AspNetCore.MvcCore 패키지를 별도로 설치해야 하며, 그 외에도 몇 가지 패키지가 더 필요합니다.
메타패키지의 원래 목적은 다양한 애플리케이션에 공통적으로 적용할 수 있는 패키지들을 미리 묶어 두어, 개발자가 추가 종속성을 일일이 설치하지 않아도 되게 하는 것입니다. 하지만 실제로는 다른 패키지들도 함께 필요하기 때문에 이 목적이 완전히 충족되지는 않습니다. 포함된 패키지 수가 많아질수록 종속성도 함께 늘어나고, 이는 메타패키지의 실질적인 활용성을 떨어뜨리는 요인이 됩니다.
예를 들어 Microsoft.AspNetCore 패키지가 의존하는 NETStandard.Library 패키지 역시 하나의 메타패키지입니다. 메타패키지가 또 다른 메타패키지를 참조하는 구조이기 때문에 전체 종속성 계층은 더욱 깊어지고 복잡해집니다.