.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 리소스에는 root
의 username
를 포함한 기본 자격 증명과 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이 실행 중인지와 연결이 설정될 수 있는지를 확인합니다.
호스팅 통합은
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 통합:
-
PomeloEntityFrameworkCoreMySqlSettings.DisableHealthChecks이
false
일 때 EF Core의 CanConnectAsync 메서드를 호출하는 상태 검사를 추가합니다. -
/health
HTTP 엔드포인트와 통합하며, 이 엔드포인트는 등록된 모든 상태 검사가 통과해야 앱이 트래픽을 수락할 준비가 된 것으로 간주됨을 지정합니다.
관찰 가능성 및 원격 분석
로깅
.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
참고
.NET Aspire