ASP.NET Core 작동 방식

완료됨

ASP.NET Core 앱은 기본적으로 웹앱 구성 요소 기능을 설정하고 실행하는 Program.cs 파일이 포함된 .NET 앱입니다.

가장 기본적인 ASP.NET Core 앱의 Program.cs 파일:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();

이전 코드 사용:

  • 기본 ASP.NET Core 웹 애플리케이션은 루트 URL("/")에서 HTTP GET 요청을 수신 대기하고 "Hello World!"로 응답하도록 설정됩니다.
  • 앱이 초기화되고, 단일 경로가 구성되고, 웹 서버가 시작됩니다.

Blazor

Blazor를 사용하면 ASP.NET Core로 대화형 웹 UI를 빌드할 수 있습니다. Blazor는 ASP.NET Core와 통합된 구성 요소 기반 웹 UI 프레임워크로, HTML, CSS, C#을 사용하여 대화형 웹 UI를 빌드하는 데 사용됩니다.

다음 Counter 구성 요소와 같은 재사용 가능한 Blazor 구성 요소는 Counter.razor 파일에 정의되어 있습니다.

@page "/counter"
@rendermode InteractiveServer

<PageTitle>Counter</PageTitle>

<h1>Counter</h1>

<p role="status">Current count: @currentCount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;

    private void IncrementCount()
    {
        currentCount++;
    }
}

이전 코드 사용:

  • 카운터를 표시하는 구성 요소가 만들어집니다.
  • @code 블록에는 카운터를 증가시키는 메서드를 포함하여 C#을 사용한 구성 요소의 논리가 포함되어 있습니다.
  • 단추를 클릭할 때마다 카운터 값이 표시되고 업데이트됩니다.
  • 구성 요소 방식을 사용하면 애플리케이션의 여러 부분에서 코드를 다시 사용할 수 있으며, Blazor 앱의 브라우저나 서버에서 실행할 수 있는 유연성이 있습니다.

<Counter /> 요소를 추가하면 Counter 구성 요소를 앱의 모든 웹 페이지에 추가할 수 있습니다.

@page "/"

<PageTitle>Home</PageTitle>

<h1>Hello, world!</h1>

<Counter />

API

ASP.NET Core는 SignalR을 통해 API, gRPC 서비스, 실시간 앱을 빌드하기 위한 프레임워크를 제공하여 클라이언트에 데이터 업데이트를 즉시 푸시합니다.

기본 최소 API:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/hello", () => "Hello, World!");

app.Run();

이전 코드 사용:

  • /hello URL에서 HTTP GET 요청을 수신 대기하고 "Hello, World!"로 응답하는 최소 API가 설정되어 있습니다.
  • WebApplicationBuilder는 앱을 구성하는 데 사용됩니다.
  • MapGet 메서드는 GET 요청에 대한 경로와 처리기를 정의합니다.

미들웨어

ASP.NET Core는 미들웨어 구성 요소의 파이프라인을 사용하여 HTTP 요청과 응답을 처리합니다. 이러한 모듈식 방식은 유연성을 제공하여 필요에 따라 미들웨어 구성 요소를 추가하거나 제거하여 애플리케이션의 기능을 사용자 지정하고 확장할 수 있습니다.

미들웨어 파이프라인은 HTTP 요청을 순차적으로 처리하여 각 구성 요소가 파이프라인의 다음 구성 요소에 요청을 전달하기 전에 지정된 작업을 수행할 수 있도록 합니다.

Program.cs 파일에 기본 제공 미들웨어 추가:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseHttpsRedirection();

app.UseRouting();

app.MapStaticAssets();

app.UseAuthentication();

app.UseAuthorization();

app.MapGet("/", () => "Hello World!");

app.Run();

이전 코드에서는 몇 가지 일반적인 미들웨어 구성 요소가 추가되었습니다.

  • UseHttpsRedirection: HTTP 요청을 HTTPS로 리디렉션합니다.
  • UseRouting: 요청을 엔드포인트에 매핑하기 위한 라우팅을 사용하도록 설정합니다.
  • MapStaticAssets: HTML, CSS, JavaScript, 이미지 및 기타 자산과 같은 정적 파일의 제공을 최적화합니다.
  • UseAuthentication: 인증 기능을 추가합니다.
  • UseAuthorization: 권한 부여 기능을 추가합니다.
  • app.MapGet: 이는 애플리케이션이 실행 중임을 입증하는 간단한 엔드포인트입니다.

종속성 주입

ASP.NET Core에는 앱과 다양한 프레임워크 구성 요소에서 사용되는 서비스를 구성하기 위한 DI(종속성 주입)에 대한 기본 제공 지원이 포함되어 있습니다.

예를 들어, 앱의 다른 부분이 데이터베이스에 액세스하는 데 사용하는 EntityFramework Core와 같은 프레임워크를 사용하여 서비스를 중앙에서 구성할 수 있습니다. 다음과 같이 종속성 주입을 사용하여 EntityFramework Core에서 서비스로 데이터베이스 컨텍스트를 구성할 수 있습니다.

public class MyDbContext : DbContext
{
    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
    
    public DbSet<Product> Products { get; set; } = default!;
}

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

app.Run();

이전 코드 사용:

  • DbContext는 종속성 주입을 사용하여 서비스로 구성됩니다.
  • WebApplicationBuilder는 앱을 구성하는 데 사용됩니다.
  • AddDbContext 메서드는 DbContext를 종속성 주입 컨테이너에 등록합니다.
  • 연결 문자열은 구성에서 검색되어 데이터베이스 컨텍스트를 설정하는 데 사용됩니다.

구성

ASP.NET Core는 JSON 파일, 환경 변수, 명령줄 인수 등 다양한 원본에서 구성 데이터에 액세스하는 것을 지원합니다.

appsetting.json 파일에서 연결 문자열 구성:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;"
  }
}

Program.cs 파일에서:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

var app = builder.Build();

app.Run();

이전 코드 사용:

  • 연결 문자열은 appsettings.json 파일에 구성됩니다.
  • WebApplicationBuilder는 앱을 구성하는 데 사용됩니다.
  • AddDbContext 메서드는 DbContext를 종속성 주입 컨테이너에 등록합니다.
  • 연결 문자열은 구성에서 검색되어 데이터베이스 컨텍스트를 설정하는 데 사용됩니다.

모니터링 및 진단

ASP.NET Core는 애플리케이션의 상태와 성능을 모니터링하고 유지 관리하기 위한 포괄적인 도구 모음을 제공합니다. 이러한 기능은 미들웨어 구성 요소로 애플리케이션에 쉽게 추가하여 프로젝트에 특정 기능을 통합할 수 있습니다.

  • 기본 제공 메트릭: ASP.NET Core에는 요청 속도, 응답 시간 및 오류 비율과 같은 애플리케이션 성능의 다양한 측면을 추적하는 기본 제공 메트릭이 포함되어 있습니다.
  • 유연한 로깅 프레임워크: 유연한 로깅 프레임워크가 기본 제공되며 콘솔, 디버그 및 이벤트 원본을 비롯한 다양한 로깅 공급자를 지원합니다. 이는 진단 및 모니터링을 위한 자세한 로그를 캡처하는 데 도움이 됩니다.
  • 추적: ASP.NET Core는 분산 추적을 지원하므로 다양한 서비스 및 구성 요소에서 요청 흐름을 추적하는 데 도움이 됩니다. 이는 성능 문제를 진단하고 애플리케이션의 여러 부분 간의 상호 작용을 이해하는 데 유용합니다.
  • OpenTelemetry: ASP.NET Core는 클라우드 네이티브 소프트웨어에 대한 오픈 소스 관찰 프레임워크인 OpenTelemetry와 통합됩니다. OpenTelemetry는 메트릭, 로그, 추적을 수집하기 위한 표준화된 API와 계측 장비를 제공하여 애플리케이션을 보다 효과적으로 모니터링하고 진단할 수 있도록 지원합니다.
  • 상태 검사: 상태 검사 API를 사용하면 애플리케이션의 상태 및 종속성을 모니터링할 수 있습니다. 다양한 구성 요소(데이터베이스, 외부 서비스 등)의 상태를 보고하도록 상태 검사를 구성할 수 있습니다.
  • 진단 도구: ASP.NET Core는 애플리케이션에서 진단 데이터를 수집하고 분석하는 데 도움이 되는 dotnet-trace, dotnet-dump 및 dotnet-gcdump와 같은 다양한 진단 도구를 제공합니다.