Program.cs 파일이란?
ASP.NET Core 웹 애플리케이션은 겉모습은 웹 앱이지만, 실제로는 하나의 콘솔 프로젝트입니다. 애플리케이션은 Program 클래스의 public static void Main() 진입점에서 실행을 시작하며, 바로 이 위치에서 웹 애플리케이션을 구동할 호스트(Host)를 생성하게 됩니다.
public class Program{
public static void Main(string[] args){
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}WebHost와 CreateDefaultBuilder()의 역할
WebHost는 정적(static) 클래스로, 사전에 구성된 기본값(pre-configured defaults)을 활용하여 IWebHost 및 IWebHostBuilder 인스턴스를 손쉽게 생성할 수 있게 해줍니다.
CreateDefaultBuilder() 메서드는 이러한 기본값이 적용된 새로운 WebHostBuilder 인스턴스를 만듭니다. 내부적으로는 Kestrel 웹 서버, IIS 통합(IIS Integration) 등 애플리케이션 실행에 필요한 다양한 구성을 자동으로 설정합니다.
CreateDefaultBuilder()가 수행하는 주요 작업
- "콘텐츠 루트(Content Root)"를 현재 디렉터리로 설정
- 명령줄 인수(Command Line Args)를 구성 객체에 전달할 수 있도록 허용
appsettings.json과appsettings.{Environment}.json파일을 구성 객체에 로드- 환경 변수(Environment Variables)를 구성 객체에 추가
- 개발(Development) 환경일 경우 시크릿(Secrets, 비밀 정보) 로드 허용
- 콘솔(Console) 및 디버그(Debug) 로거 추가
- Kestrel 사용을 지정하고, 로드된 구성에서 Kestrel 설정을 읽어오도록 처리
- 라우팅(Routing) 추가
- IIS 통합 추가
호스트 구성의 핵심 메서드들
UseIISIntegration()
애플리케이션을 IIS에서 호스팅하려면 UseIISIntegration() 메서드를 호출해야 합니다. 이 메서드는 IIS를 외부 웹 서버(리버스 프록시)로 사용하겠다고 지정하는 역할을 합니다.
UseStartup<Startup>()
UseStartup<Startup>() 메서드는 웹 호스트가 사용할 Startup 클래스를 지정합니다. 기본 제공되는 Startup 클래스 대신, 필요에 따라 직접 작성한 사용자 지정 클래스를 지정하는 것도 가능합니다.
Build()와 Run()
Build() 메서드는 최종적으로 IWebHost 인스턴스를 반환하며, 이어서 호출되는 Run() 메서드는 애플리케이션이 중지될 때까지 웹 애플리케이션을 계속 실행하고 요청을 수신 대기합니다.