IT관련

ASP.NET Core Program.cs 기본 템플릿 분석

파란하늘999 2025. 10. 28. 14:31

**ASP.NET Core 6+ (미니멀 API 호스팅 모델)**의 표준 Web API 프로젝트 템플릿입니다. 이는 Program.cs 파일의 내용으로, 애플리케이션의 서비스 등록, 미들웨어 구성, 앱 실행을 담당합니다. .NET 6부터 Startup.cs를 대체한 간소화된 구조예요. 아래에서 단계별로 분석하겠습니다. (코드가 C#이니, 주석과 함께 설명)

1. 앱 빌더 생성 및 서비스 등록 (Services Configuration)

 
var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllers();

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
  • WebApplication.CreateBuilder(args):
    • args (string 배열): 명령줄 인수 (예: --environment=Development).
    • 앱 빌더 객체를 생성하며, 기본 설정(로깅, 구성, 호스팅 등)을 자동으로 추가. (호스트 환경, appsettings.json 로드 등)
  • builder.Services.AddControllers():
    • 컨트롤러 기반 MVC/Web API를 활성화. [ApiController] 속성으로 API 엔드포인트(예: [HttpGet])를 처리할 수 있게 함.
    • 의존성 주입(DI) 컨테이너에 컨트롤러 서비스 등록.
  • builder.Services.AddEndpointsApiExplorer():
    • 엔드포인트(액션 메서드) 메타데이터를 수집. Swagger/OpenAPI 문서화의 기반.
  • builder.Services.AddSwaggerGen():
    • Swashbuckle 패키지로 OpenAPI(Swagger) 문서 생성 지원. API 엔드포인트의 스키마, 파라미터 등을 자동 문서화.
    • 주석: Swagger 설정 가이드 링크 제공.

목적: DI 컨테이너에 필요한 서비스를 등록. 이 단계에서 앱의 "뇌" 부분(로직 지원)을 준비.

2. 앱 빌드 및 HTTP 파이프라인 구성 (Middleware Pipeline)

 
var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
  • var app = builder.Build():
    • 빌더를 기반으로 WebApplication 인스턴스 생성. 이 시점에서 서비스가 고정되고, HTTP 요청 파이프라인(미들웨어 체인)이 준비됨.
  • if (app.Environment.IsDevelopment()):
    • 환경 변수(예: ASPNETCORE_ENVIRONMENT=Development)에 따라 조건부 실행.
    • app.UseSwagger(): Swagger JSON 엔드포인트(/swagger/v1/swagger.json) 활성화.
    • app.UseSwaggerUI(): 브라우저 기반 Swagger UI(/swagger) 제공. 개발 중 API 테스트에 편리.
  • app.UseHttpsRedirection():
    • HTTP 요청을 HTTPS로 자동 리디렉션. 보안 강화 (프로덕션 추천).
  • app.UseAuthorization():
    • 인증/인가 미들웨어. [Authorize] 속성으로 보호된 엔드포인트 처리 (JWT 등과 연동).
  • app.MapControllers():
    • 컨트롤러의 액션 메서드를 HTTP 엔드포인트로 매핑. 예: [HttpGet("api/[controller]")] → GET /api/controller 호출.

목적: HTTP 요청이 들어올 때 처리 순서(파이프라인)를 정의. 요청은 위 미들웨어를 순서대로 거침 (Swagger → HTTPS → 인증 → 컨트롤러).

3. 앱 실행

 
app.Run();
  • 앱을 시작하고, Kestrel 서버(기본 웹 서버)로 HTTP 리스닝. (포트: 기본 5000/5001)
  • 블로킹 호출: 여기서 프로그램이 종료되지 않음. Ctrl+C로 중지.

전체 흐름 요약

단계 주요 작업 역할
빌더 생성 CreateBuilder + Services.Add... 서비스/DI 등록 (백엔드 로직 준비)
앱 빌드 Build() 파이프라인 초기화
파이프라인 구성 UseSwagger/UI + UseHttps... + MapControllers 요청 처리 체인 정의 (프론트엔드 흐름)
실행 Run() 서버 시작 및 리스닝

 

추가 팁

  • 환경별 동작: 개발 시 Swagger가 활성화되어 API 테스트 쉬움. 프로덕션(Production)에서는 Swagger 비활성화 추천 (보안 이유).
  • 확장: 실제 프로젝트에서 로깅(builder.Logging.Add...), CORS(builder.Services.AddCors()), 데이터베이스(AddDbContext) 등을 추가.
  • 버전: .NET 8+에서 최적화됨. 새 프로젝트 생성 시 dotnet new webapi로 이 템플릿 자동 생성.
  • 문제 해결: 오류 시 dotnet run으로 실행하며 로그 확인.
반응형