다음을 통해 공유


.NET Aspire Pomelo MySQLEntity Framework Core 통합

에는 다음이 포함됩니다:호스팅 통합Client 통합

MySQL SQL(구조적 쿼리 언어)을 사용하여 데이터를 관리하고 조작하는 오픈 소스 RDBMS(관계형 데이터베이스 관리 시스템)입니다. 소규모 프로젝트에서 대규모 엔터프라이즈 시스템에 이르기까지 다양한 환경에서 사용되며 클라우드 네이티브 애플리케이션에서 마이크로 서비스를 뒷받침하는 데이터를 호스트하는 것이 좋습니다. .NET Aspire Pomelo MySQLEntity Framework Core 통합을 사용하면 기존 MySQL 데이터베이스에 연결하거나 mysql 컨테이너 이미지사용하여 .NET 새 인스턴스를 만들 수 있습니다.

호스팅 통합

MySQL 호스팅 통합은 serverMySqlServerResource 형식으로, 데이터베이스를 MySqlDatabaseResource 형식으로 모델화합니다. 이러한 형식 및 API에 액세스하려면 앱 호스트 프로젝트에서 📦Aspire.Hosting.MySql NuGet 패키지를 추가하세요.

dotnet add package Aspire.Hosting.MySql

자세한 내용은 dotnet add package 또는 .NET 애플리케이션에서 패키지 종속성을 관리하기를 참조하세요.

MySQL server 리소스 및 데이터베이스 리소스 추가

앱 호스트 프로젝트에서 AddMySql을 호출하여 MySQL 리소스 생성기를 추가하고 반환합니다. 반환된 리소스 작성기에 연속적으로 호출을 연결하여 AddDatabase에 MySQL 데이터베이스 리소스를 추가합니다.

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithLifetime(ContainerLifetime.Persistent);

var mysqldb = mysql.AddDatabase("mysqldb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);

// After adding all resources, run the app...

메모

SQL Server 컨테이너는 시작 속도가 느리므로 불필요한 다시 시작을 방지하기 위해 영구 수명을 사용하는 것이 가장 좋습니다. 자세한 내용은 컨테이너 리소스 수명참조하세요.

.NET .NET Aspire mysql 이미지와 함께 이전 예제와 같이 앱 호스트에 컨테이너 이미지를 추가하면 로컬 컴퓨터에 새 MySQL 인스턴스가 만들어집니다. MySQL 리소스 작성기(mysql 변수)에 대한 참조는 데이터베이스를 추가하는 데 사용됩니다. 데이터베이스는 mysqldb으로 명명된 후 ExampleProject에 추가됩니다. MySQL 리소스에는 rootusername를 포함한 기본 자격 증명과 CreateDefaultPasswordParameter 메서드를 사용하여 생성된 임의의 password이 포함됩니다.

앱 호스트가 실행되면 암호가 앱 호스트의 비밀 저장소에 저장됩니다. 예를 들어 Parameters 섹션에 추가된 것입니다.

{
  "Parameters:mysql-password": "<THE_GENERATED_PASSWORD>"
}

매개 변수의 이름은 mysql-password, 실제로는 리소스 이름에 -password 접미사를 사용하여 서식을 지정하는 것입니다. 자세한 내용은 에서 개발 시 앱 비밀의 안전한 저장을 참조하세요. 또한, 매개변수를 사용하여 리소스를 추가하는 방법을 참조하세요.

WithReference 메서드는 mysqldb라는 이름의 ExampleProject에서 연결을 구성합니다.

기존 MySQLserver연결하려는 경우 대신 AddConnectionString 호출합니다. 자세한 내용은 기존 자료을 참조하세요.

데이터 볼륨을 사용하여 MySQL 리소스 추가

SQL Server 리소스에 데이터 볼륨을 추가하려면 SQL Server 리소스에서 WithDataVolume 메서드를 호출합니다.

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithDataVolume();

var mysqldb = mysql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

데이터 볼륨은 컨테이너의 수명 주기 외부에서 MySQLserver 데이터를 유지하는 데 사용됩니다. 데이터 볼륨은 SQL Server 컨테이너의 /var/lib/mysql 경로에 탑재되고 name 매개 변수가 제공되지 않으면 이름이 임의로 생성됩니다. 데이터 볼륨에 대한 추가 정보 및바인드 마운트보다 선호되는 이유에 대한 자세한 내용은 문서: 볼륨를 확인하십시오.

경고

암호는 데이터 볼륨에 저장됩니다. 데이터 볼륨을 사용하는 경우 암호가 변경되면 볼륨을 삭제할 때까지 작동하지 않습니다.

데이터 바인드 마운트를 사용하여 MySQL 리소스를 추가하세요.

MySQL 리소스에 데이터 바인딩 탑재를 추가하려면 WithDataBindMount 메서드를 호출합니다.

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithDataBindMount(source: @"C:\MySql\Data");

var db = sql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

중요하다

데이터 바인딩 탑재볼륨비해 기능이 제한되므로 성능, 이식성 및 보안이 향상되어 프로덕션 환경에 더 적합합니다. 그러나 바인딩 탑재를 사용하면 호스트 시스템의 파일에 직접 액세스하고 수정할 수 있으므로 실시간 변경이 필요한 개발 및 테스트에 적합합니다.

데이터 바인드 마운트는 호스트 머신의 파일 시스템을 사용하여 컨테이너 재시작 시에도 MySQL 데이터를 지속적으로 유지합니다. 데이터 바인딩 탑재는 MySQL 컨테이너의 호스트 컴퓨터에서 Windows의 C:\MySql\Data(또는 Unix경로의 /MySql/Data)에 탑재됩니다. 데이터 바인딩 탑재에 대한 자세한 내용은 Docker 문서:탑재 바인딩을 참조하세요.

매개 변수를 사용하여 MySQL 리소스 추가

루트 MySQL 암호를 명시적으로 제공하려는 경우 매개 변수로 전달할 수 있습니다. 다음 대체 예제를 고려합니다.

var password = builder.AddParameter("password", secret: true);

var mysql = builder.AddMySql("mysql", password)
                   .WithLifetime(ContainerLifetime.Persistent);

var mysqldb = mysql.AddDatabase("mysqldb");

var myService = builder.AddProject<Projects.ExampleProject>()
                       .WithReference(mysqldb)
                       .WaitFor(mysqldb);

자세한 내용은외부 매개 변수를 참조하세요.

PhpMyAdmin 리소스 추가

phpMyAdmin 는 MySQL를 위한 인기 있는 웹 기반 관리 도구입니다. 데이터베이스, 테이블, 뷰 및 인덱스와 같은 MySQL 개체를 찾아 수정하는 데 사용할 수 있습니다. .NET .NET Aspire 솔루션 내에서 phpMyAdmin을 사용하려면 WithPhpMyAdmin 메서드를 호출합니다. 이 메서드는 phpMyAdmin을 호스트하고 MySQL 컨테이너에 연결하는 솔루션에 새 컨테이너 리소스를 추가합니다.

var builder = DistributedApplication.CreateBuilder(args);

var mysql = builder.AddMySql("mysql")
                   .WithPhpMyAdmin();

var db = sql.AddDatabase("mysqldb");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(mysqldb)
       .WaitFor(mysqldb);

// After adding all resources, run the app...

솔루션을 실행하면 .NET.NET Aspire 대시보드에 엔드포인트가 있는 phpMyAdmin 리소스가 표시됩니다. 엔드포인트에 대한 링크를 선택하여 새 브라우저 탭에서 phpMyAdmin을 봅니다.

통합 기능 상태 관리

MySQL 호스팅 통합은 MySQL 리소스에 대한 상태 검사를 자동으로 추가합니다. 상태 검사는 MySQLserver이 실행 중인지와 연결이 설정될 수 있는지를 확인합니다.

호스팅 통합은 NuGet 패키지인 AspNetCore.HealthChecks에 의존합니다.

Client 통합

.NET Aspire Pomelo MySQL Entity Framework 통합을 시작하려면, client-consuming 프로젝트, 즉 MySQLEntity Framework Coreclient사용하는 애플리케이션의 프로젝트에서 📦AspireMySql NuGet 패키지를 설치합니다. Pomelo.EntityFrameworkCore.

dotnet add package Aspire.Pomelo.EntityFrameworkCore.MySql

자세한 내용은 dotnet add package 또는 .NET 애플리케이션에서 패키지 종속성을 관리하기를 참조하세요.

MySQL 데이터베이스 컨텍스트 추가

client사용 중인 프로젝트의 Program.cs 파일에서, 종속성 주입 컨테이너를 통해 사용할 DbContext를 등록하기 위해 모든 IHostApplicationBuilder에 대해 AddMySqlDbContext 확장 메서드를 호출합니다. 메서드는 연결 이름 매개 변수를 사용합니다.

builder.AddMySqlDbContext<ExampleDbContext>(connectionName: "mysqldb");

connectionName 매개 변수는 앱 호스트 프로젝트에 SQL Server 데이터베이스 리소스를 추가할 때 사용되는 이름과 일치해야 합니다. AddDatabase을 호출하고 mysqldb의 이름을 제공할 때, AddMySqlDbContext를 호출할 때 동일한 이름을 사용해야 합니다. 자세한 내용은 MySQLserver 리소스 및 데이터베이스 리소스추가를 참조하세요.

서비스에서 ExampleDbContext 개체를 검색하려면 다음을 수행합니다.

public class ExampleService(ExampleDbContext context)
{
    // Use context...
}

종속성 주입에 대한 자세한 내용은 .NET 종속성 주입참조하세요.

강화 기능을 사용하여 MySQL 데이터베이스 컨텍스트 추가

자동 재시도, 상태 검사, 로깅 및 원격 분석과 같은 추가 서비스로 DbContext 보강하려면 EnrichMySqlDbContext 메서드를 호출합니다.

builder.EnrichMySqlDbContext<ExampleDbContext>(
    connectionName: "mysqldb",
    configureSettings: settings =>
    {
        settings.DisableRetry = false;
        settings.CommandTimeout = 30 // seconds
    });

settings 매개 변수는 PomeloEntityFrameworkCoreMySqlSettings 클래스의 인스턴스입니다.

구성

.NET Aspire Pomelo MySQLEntity Framework Core 통합은 프로젝트의 요구 사항 및 규칙에 따라 데이터베이스 연결을 구성하는 여러 옵션을 제공합니다.

연결 문자열 사용

ConnectionStrings 구성 섹션에서 연결 문자열을 사용하는 경우 builder.AddMySqlDatabaseDbContext<TContext>()호출할 때 연결 문자열의 이름을 제공할 수 있습니다.

builder.AddMySqlDatabaseDbContext<MyDbContext>("mysql");

그런 다음 ConnectionStrings 구성 섹션에서 연결 문자열을 검색합니다.

{
  "ConnectionStrings": {
    "mysql": "Server=mysql;Database=mysqldb"
  }
}

EnrichMySqlDbContext는 호출 시점에 DbContext가 등록되어 있을 것으로 예상하기 때문에 ConnectionStrings 구성 섹션을 사용하지 않습니다.

자세한 내용은 MySqlConnector: ConnectionString 설명서참조하세요.

구성 공급자 사용

.NET Aspire Pomelo MySQLEntity Framework Core 통합은 Microsoft.Extensions.Configuration지원합니다. Aspire:Pomelo:EntityFrameworkCore:MySql 키를 사용하여 appsettings.json 같은 구성 파일에서 PomeloEntityFrameworkCoreMySqlSettings 로드합니다.

다음 예에서는 appsettings.json가 사용 가능한 옵션 중 일부를 어떻게 구성하는지 설명합니다.

{
  "Aspire": {
    "Pomelo": {
      "EntityFrameworkCore": {
        "MySql": {
          "ConnectionString": "YOUR_CONNECTIONSTRING",
          "DisableHealthChecks": true,
          "DisableTracing": true
        }
      }
    }
  }
}

전체 MySQL 통합 JSON 스키마는 Aspire에서 확인할 수 있습니다. Pomelo.EntityFrameworkCore.MySql/ConfigurationSchema.json.

인라인 대리자 사용

Action<PomeloEntityFrameworkCoreMySqlSettings> 델리게이트를 전달하여, 예를 들어 코드에서 상태 검사를 비활성화하는 등 일부 또는 모든 옵션을 인라인으로 설정할 수도 있습니다.

builder.AddMySqlDbContext<MyDbContext>(
    "mysqldb",
    static settings => settings.DisableHealthChecks = true);

또는

builder.EnrichMySqlDbContext<MyDbContext>(
    static settings => settings.DisableHealthChecks = true);

건강 검사

기본적으로 .NET.NET Aspire 통합은 모든 서비스에 대해 상태 검사를로 활성화합니다. 자세한 내용은 .NET.NET Aspire 통합 개요참조하세요.

.NET Aspire Pomelo MySQLEntity Framework Core 통합:

관찰 가능성 및 원격 분석

통합은 로깅, 트레이싱, 메트릭스 구성을 자동으로 설정하며, 이는 때때로 관찰성의 핵심 요소로 알려져 있습니다. 통합 관찰 가능성 및 원격 분석에 대한 자세한 내용은 .NET.NET Aspire 통합 개요참조하세요. 지원 서비스에 따라 일부 통합은 이러한 기능 중 일부만 지원할 수 있습니다. 예를 들어 일부 통합은 로깅 및 추적을 지원하지만 메트릭은 지원하지 않습니다. 구성 섹션에 제시된 기술을 사용하여 원격 분석 기능을 사용하지 않도록 설정할 수도 있습니다.

로깅

.NET Aspire Pomelo MySQLEntity Framework Core 통합은 다음 로그 범주를 사용합니다.

  • Microsoft.EntityFrameworkCore.ChangeTracking
  • Microsoft.EntityFrameworkCore.Database.Command
  • Microsoft.EntityFrameworkCore.Database.Connection
  • Microsoft.EntityFrameworkCore.Database.Transaction
  • Microsoft.EntityFrameworkCore.Infrastructure
  • Microsoft.EntityFrameworkCore.Migrations
  • Microsoft.EntityFrameworkCore.Model
  • Microsoft.EntityFrameworkCore.Model.Validation
  • Microsoft.EntityFrameworkCore.Query
  • Microsoft.EntityFrameworkCore.Update

추적

.NET Aspire Pomelo MySQLEntity Framework Core 통합은 OpenTelemetry를 사용하여 다음 추적 활동을 발생시킬 것입니다.

  • MySqlConnector

메트릭

.NET Aspire Pomelo MySQLEntity Framework Core 통합은 현재 다음 메트릭을 지원합니다.

  • MySqlConnector:
    • db.client.connections.create_time
    • db.client.connections.use_time
    • db.client.connections.wait_time
    • db.client.connections.idle.max
    • db.client.connections.idle.min
    • db.client.connections.max
    • db.client.connections.pending_requests
    • db.client.connections.timeouts
    • db.client.connections.usage

참고