ASP.NET Core와 응용 프로그램 Startup 클래스
- 본 번역문서의 원문은 Application Startup in ASP.NET Core docs.microsoft.com 입니다.
Startup
클래스는 응용 프로그램으로 들어오는 모든 요청을 처리하는 요청 파이프라인을 구성합니다.
Startup 클래스
ASP.NET Core 응용 프로그램에는 Startup
클래스가 반드시 존재해야 합니다.
관례상, Startup
클래스는 "Startup"이라는 이름을 사용합니다.
그러나 프로그램의 Main
메서드에서 WebHostBuilderExtensions 클래스의 UseStartup<TStartup>
메서드를 호출할 때 Startup 클래스의 이름을 다르게 지정할 수도 있습니다.
각각의 환경마다 별도의 Startup
클래스를 정의할 수 있으며, 그 경우 런타임에 적절한 클래스가 선택됩니다.
WebHost 구성이나 옵션에서 startupAssembly
를 지정하면, 호스팅이 지정한 시작 어셈블리를 로드하고 Startup
또는 Startup[Environment]
형식을 찾습니다.
더 자세한 정보는 StartupLoader
클래스의 FindStartupType 메서드와 다양한 환경에서 작업하기 문서를 참고하시기 바랍니다.
이 중, UseStartup<TStartup>
메서드를 호출하는 방식이 권장되는 접근 방식입니다.
Startup
클래스의 생성자는 의존성 주입을 통해서 제공되는 의존성을 전달받을 수 있습니다.
그리고 이렇게 전달되는 의존성을 이용해서, 예를 들어서 IHostingEnvironment
를 이용해서 구성 원본을 설정하고, ILoggerFactory
를 이용해서 로깅 공급자를 설정할 수 있습니다.
Startup
클래스에는 반드시 Configure
메서드가 존재해야 하며, 필요에 따라 ConfigureServices
메서드가 존재할 수도 있는데, 이 두 메서드 모두 응용 프로그램이 구동될 때 자동으로 호출됩니다.
또한 Startup
클래스에는 이 메서드들의 환경별 버전이 포함되어 있을 수도 있습니다.
응용 프로그램이 구동되는 동안 발생하는 예외를 처리하는 방법은 여기를 참고하시기 바랍니다.
Configure 메서드
Configure
메서드는 ASP.NET Core 응용 프로그램이 HTTP 요청에 응답하는 방식을 지정합니다.
요청 파이프라인은 의존성 주입으로 제공된 IApplicationBuilder
인스턴스에 미들웨어 구성 요소들을 추가함으로써 구성됩니다.
다음 예제는 기본 웹 사이트 템플릿에서 가져온 것으로, 몇 가지 확장 메서드를 이용해서 브라우저 링크, 오류 페이지, 정적 페이지, ASP.NET MVC 및 Identity를 지원하는 파이프라인을 구성하고 있습니다:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseIdentity();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
각각의 Use
확장 메서드는 요청 파이프라인에 미들웨어 구성 요소를 추가합니다.
예를 들어서, UseMvc
확장 메서드는 요청 파이프라인에 라우팅 미들웨어를 추가하고 MVC를 기본 처리기로 구성합니다.
IApplicationBuilder
를 사용하는 자세한 방법은 미들웨어 문서를 참고하시기 바랍니다.
또한 Configure
메서드의 시그니처에 IHostingEnvironment
나 ILoggerFactory
같은 서비스를 지정할 수도 있으며, 해당 서비스를 사용할 수 있는 경우 지정한 서비스가 주입됩니다.
ConfigureServices 메서드
ConfigureServices 메서드는 선택 사항이지만, 사용할 경우, 런타임에 의해 Configure
메서드보다 먼저 호출됩니다
(일부 기능은 요청 파이프라인에 연결되기 전에 추가됩니다).
구성 옵션은 이 메서드에서 설정됩니다.
각 기능들의 실질적인 설정은 IServiceCollection의 Add[Service]
확장 메서드를 통해서 수행됩니다.
기본 웹 사이트 템플릿에서 가져온 다음 예제는 응용 프로그램에서 Entity Framework, Identity 및 MVC 서비스를 사용하도록 구성하고 있습니다:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
services.AddMvc();
// Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}
이 메서드에서 서비스 컨테이너에 서비스를 추가하면 응용 프로그램에서 의존성 주입을 통해서 해당 서비스를 사용할 수 있습니다.
Startup 클래스에서 사용 가능한 서비스
ASP.NET Core의 의존성 주입은 응용 프로그램이 구동되는 중에도 응용 프로그램의 서비스를 제공합니다.
Startup
클래스의 생성자 또는 Configure
메서드나 ConfigureServices
메서드의 매개 변수로 적절한 인터페이스를 지정해서 서비스를 요청할 수 있습니다.
다음은 Startup
클래스의 각 메서드를 호출되는 순서대로 정리한 것으로, 이하와 같은 서비스들을 매개 변수로 요청할 수 있습니다:
-
생성자:
IHostingEnvironment
,ILoggerFactory
-
ConfigureServices
메서드:IServiceCollection
-
Configure
메서드:IApplicationBuilder
,IHostingEnvironment
,ILoggerFactory
,IApplicationLifetime
추가 자료
- 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