ASP.NET Core 기본 개요
- 본 번역문서의 원문은 ASP.NET Core fundamentals overview docs.microsoft.com 입니다.
간단히 말해서 ASP.NET Core 응용 프로그램은 Main
메서드에서 웹 서버를 생성하는 콘솔 응용 프로그램입니다:
using System;
using Microsoft.AspNetCore.Hosting;
namespace aspnetcoreapp
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
Main
메서드는 빌더 패턴(Builder Pattern)을 따르는 WebHostBuilder
클래스를 이용해서 웹 응용 프로그램 호스트를 생성하는데, 이 빌더 클래스는 웹 서버를 정의하는 메서드나 (UseKestrel
등) 시작 클래스를 정의하는 메서드를 (UseStartup
) 제공합니다.
예를 들어서, 위의 예제 코드는 Kestrel 웹 서버를 사용하고 있지만, 다른 웹 서버를 지정할 수도 있습니다.
참고로 UseStartup
확장 메서드에 관해서는 다음 문서에서 더 자세히 살펴봅니다.
그 밖에도 WebHostBuilder
클래스는 응용 프로그램을 IIS 및 IIS Express에서 호스팅하기 위한 UseIISIntegration
확장 메서드나, 루트 콘텐츠 디렉터리를 지정하기 위한 UseContentRoot
확장 메서드 같은 다양한 선택적 메서드를 제공합니다.
마지막으로 Build
및 Run
메서드는 응용 프로그램을 호스트하는 IWebHost
개체를 만들고 이를 실행해서 전달되는 HTTP 요청의 수신을 대기합니다.
Startup 클래스
WebHostBuilder
클래스가 제공하는 UseStartup
메서드는 응용 프로그램의 Startup
클래스를 지정합니다.
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
Startup
클래스는 요청 처리 파이프라인을 정의하는 장소이면서, 응용 프로그램에 필요한 모든 서비스가 구성되는 장소입니다.
Startup
클래스는 public으로 지정되어야 하며 다음과 같은 메서드들을 제공해야 합니다:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
}
public void Configure(IApplicationBuilder app)
{
}
}
-
ConfigureServices
메서드에서는 응용 프로그램에서 사용되는 ASP.NET MVC Core 프레임워크, Entity Framework Core, Identity 같은 서비스를 정의합니다. (서비스 절 참고.) -
Configure
메서드에서는 요청 파이프라인의 미들웨어를 정의합니다.
보다 자세한 정보는 응용 프로그램 Startup 클래스 문서를 참고하시기 바랍니다.
서비스
서비스는 응용 프로그램에서 공통적으로 사용되는 구성 요소입니다. 서비스는 의존성 주입(DI, Dependency Injection)을 통해서 사용할 수 있습니다. ASP.NET Core에는 생성자 주입을 기본으로 지원하는 간단한 내장 IoC (Inversion of Control) 컨테이너가 포함되어 있습니다. 물론 이 내장 컨테이너를 직접 선택한 컨테이너로 손쉽게 교체할 수도 있습니다. DI를 활용하면 느슨한 결합의 장점을 얻을 수 있을뿐만 아니라, 응용 프로그램 전체에서 서비스를 사용할 수 있습니다. 한 가지 예로, 응용 프로그램 전체에서 로깅을 사용할 수 있습니다.
보다 자세한 정보는 Dependency Injection 문서를 참고하시기 바랍니다.
미들웨어
ASP.NET Core에서는 미들웨어를 이용해서 요청 파이프라인을 구성합니다.
ASP.NET Core의 미들웨어는 HttpContext
상에서 비동기 로직을 수행한 다음, 파이프라인의 다음 미들웨어를 호출하거나 바로 요청을 종료합니다.
일반적으로 미들웨어는 NuGet 패키지를 통해서 필요한 종속성을 가져온 다음, Configure
메서드에서 그에 해당하는 IApplicationBuilder
의 UseXYZ
확장 메서드를 호출하는 방식으로 사용됩니다.
ASP.NET Core는 풍부한 내장 미들웨어 모음을 기본으로 제공합니다:
ASP.NET Core에서는 OWIN 기반의 모든 미들웨어를 사용할 수 있으며, 사용자 지정 미들웨어를 직접 작성할 수도 있습니다.
보다 자세한 정보는 미들웨어 문서와 Open Web Interface for .NET (OWIN) 문서를 참고하시기 바랍니다.
서버
ASP.NET Core의 호스팅 모델은 요청을 직접 수신하지 않습니다.
그 대신 응용 프로그램으로 요청을 전달해주는 HTTP 서버 구현에 의존합니다.
이렇게 전달된 요청은 응용 프로그램의 기능 인터페이스들의 모음으로 래핑된 다음, HttpContext
로 구성됩니다.
ASP.NET Core에는 일반적으로 IIS 또는 nginx 같은 운영 환경용 웹 서버의 뒷단에서 실행되는, Kestrel이라는 관리되는 크로스 플랫폼 웹 서버가 포함되어 있습니다.
보다 자세한 정보는 서버 문서와 호스팅 문서를 참고하시기 바랍니다.
콘텐츠 루트
콘텐츠 루트(Content Root)는 응용 프로그램의 뷰와 웹 콘텐츠 같은, 응용 프로그램에서 사용하는 모든 콘텐츠의 기본 경로입니다. 기본적으로 콘텐츠 루트는 응용 프로그램을 호스팅하는 실행 파일의 응용 프로그램 기본 경로와 동일하지만, WebHostBuilder 를 이용해서 다른 위치를 지정할 수도 있습니다.
웹 루트
응용 프로그램의 웹 루트(Web Root)는 css, js 및 이미지 파일 같은 공개된 정적 리소스에 대한 프로젝트의 디렉터리입니다. 기본적으로 정적 파일 미들웨어는 웹 루트 디렉터리 및 하위 디렉토리에 존재하는 파일들만 서비스합니다. 웹 루트 경로의 기본값은 <content-root>/wwwroot 지만 WebHostBuilder 를 이용해서 다른 위치를 지정할 수도 있습니다.
구성
ASP.NET Core는 간단한 이름-값 쌍을 처리하는 새로운 구성 모델을 사용합니다.
이 새로운 구성 모델은 System.Configuration
클래스나 web.config 파일 대신, 정렬된 구성 공급자 모음을 기반으로 합니다.
내장된 구성 공급자는 다양한 파일 형식 (XML, JSON, INI) 및 환경 변수를 지원함으로써 환경에 기반한 구성을 가능하게 만들어줍니다.
또한 사용자 지정 구성 공급자를 작성할 수도 있습니다.
보다 자세한 정보는 ASP.NET Core 구성하기 문서를 참고하시기 바랍니다.
환경
"Development" 및 "Production" 같은 환경(Environments)은 ASP.NET Core의 일급 개념으로, 환경 변수를 이용해서 설정할 수 있습니다.
보다 자세한 정보는 다양한 환경에서 작업하기 문서를 참고하시기 바랍니다.
.NET Core 대 .NET 프레임워크 런타임
ASP.NET Core 응용 프로그램은 .NET Core 또는 .NET 프레임워크 런타임을 사용할 수 있습니다. 보다 자세한 정보는 Choosing between .NET Core and .NET Framework 문서를 참고하시기 바랍니다.
추가 자료
다음 문서들을 함께 살펴보시기 바랍니다:
- ASP.NET Core 기본 개요 2017-05-30 08:00
- ASP.NET Core와 응용 프로그램 Startup 클래스 2017-05-31 08:00
- ASP.NET Core 미들웨어의 기초 2017-06-01 08:00
- ASP.NET Core에서 정적 파일 서비스하기 2017-06-02 08:00
- ASP.NET Core의 오류 처리 살펴보기 2017-06-14 08:00
- 다양한 환경에서 작업하기 2017-08-21 08:00
- ASP.NET Core 구성하기 2017-08-28 08:00
- ASP.NET Core 파일 공급자 2017-09-04 08:00
- ASP.NET Core의 세션 및 응용 프로그램 상태 2017-09-11 08:00
- ASP.NET Core의 호스팅 살펴보기 2017-09-18 08:00
- ASP.NET Core의 웹 서버 구현 2017-09-25 08:00
- ASP.NET Core의 Kestrel 웹 서버 구현 살펴보기 2017-10-02 08:00
- ASP.NET Core 모듈 살펴보기 2017-10-09 08:00
- ASP.NET Core의 WebListener 웹 서버 구현 2017-10-16 08:00
- ASP.NET Core의 HTTP.sys 웹 서버 구현 2017-10-23 08:00
- ASP.NET Core의 요청 기능 2017-10-30 08:00
- ASP.NET Core와 URL 재작성 미들웨어 2018-05-07 08:00