Pomelo.entityframeworkcore.mysql: ๊ธฐ๋ณธ ASP.NET Core 3.0 ํ”„๋กœ์ ํŠธ ๋ฐ ID ์˜ต์…˜์˜ nvarchar ๋ฐ nvarchar(max) ์˜ค๋ฅ˜

์— ๋งŒ๋“  2019๋…„ 10์›” 09์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: PomeloFoundation/Pomelo.EntityFrameworkCore.MySql

์žฌํ˜„ ๋‹จ๊ณ„

์Šคํฌ๋ฆฝํŠธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Entity Framework Core 3.0.0์€ ์˜ต์…˜์ด ์žˆ๋Š” 'Pomelo.EntityFrameworkCore.MySql' ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 'ApplicationDbContext'๋ฅผ ์ดˆ๊ธฐํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. MaxPoolSize=128 ServerVersion 5.7.22 MySql

๋ฌธ์ œ

ASP.NET Core ID์šฉ์œผ๋กœ ์ƒ์„ฑ๋œ SQL ์Šคํฌ๋ฆฝํŠธ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์Šคํฌ๋ฆฝํŠธ(์ฒซ ๋ฒˆ์งธ CREATE TABLE๋งŒ)๋ฅผ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
nvarchar ๋ฐ nvarchar(max)๊ฐ€ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ…Œ์ด๋ธ” ์ƒ์„ฑ AspNetRoles (
Id nvarchar(450) NULL์ด ์•„๋‹™๋‹ˆ๋‹ค.
Name nvarchar(256) NULL,
NormalizedName nvarchar(256) NULL,
ConcurrencyStamp nvarchar(์ตœ๋Œ€) NULL,
์ œ์•ฝ ์กฐ๊ฑด PK_AspNetRoles ๊ธฐ๋ณธ ํ‚ค( Id )
);

๋ถ„์„ ์ค‘์— 4๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. (์œ„์น˜ 39์˜ "nvarchar" ๊ทผ์ฒ˜)
์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. (์œ„์น˜ 75์˜ "nvarchar" ๊ทผ์ฒ˜)
์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. (์œ„์น˜ 117์˜ "nvarchar" ๊ทผ์ฒ˜)
์ธ์‹ํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. (์œ„์น˜ 161์˜ "nvarchar" ๊ทผ์ฒ˜)
SQL ์ฟผ๋ฆฌ:

ํ…Œ์ด๋ธ” ์ƒ์„ฑ AspNetRoles ( Id nvarchar(450) NOT NULL, Name nvarchar(256) NULL, NormalizedName nvarchar(256) NULL, ConcurrencyStamp nvarchar(max) NULL, ์ œ์•ฝ ์กฐ๊ฑด PK_AspNetRoles ๊ธฐ๋ณธ ํ‚ค( Id ) )

MySQL์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ

1064 - SQL ๊ตฌ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 'max) NULL ๊ทผ์ฒ˜์—์„œ ์‚ฌ์šฉํ•  ์˜ฌ๋ฐ”๋ฅธ ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด์„œ๋Š” MySQL ์„œ๋ฒ„ ๋ฒ„์ „์— ํ•ด๋‹นํ•˜๋Š” ์„ค๋ช…์„œ๋ฅผ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)

)' 5ํ–‰

์ถ”๊ฐ€ ๊ธฐ์ˆ  ์„ธ๋ถ€ ์‚ฌํ•ญ

MySQL ๋ฒ„์ „: 5.7.22
์šด์˜ ์ฒด์ œ: ์œˆ๋„์šฐ 10
Pomelo.EntityFrameworkCore.MySql ๋ฒ„์ „: 3.0.0-rc1.final
Microsoft.AspNetCore.App ๋ฒ„์ „: 3.0

closed-user-error

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ƒˆ ASP.NET Core ํ”„๋กœ์ ํŠธ(์ธ์ฆ ์˜ต์…˜ ์‚ฌ์šฉ)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ EF Core ๊ณต๊ธ‰์ž๋ฅผ Pomelo.EntityFrameworkCore.MySql ๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋˜๋Š” ์—…๋ฐ์ดํŠธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” VS๊ฐ€ SQL Server๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์„ ์ฃผ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์ด๋ฏธ .\Data\Migrations\00000000000000_CreateIdentitySchema.cs ํŒŒ์ผ์— ์ดˆ๊ธฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ CreateIdentitySchema ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค( Up ๋ฐ Down ์ž‘์—…) ๋ฐ .\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…์†์„ฑ์ด ๋†’์€ ๋Œ€์ƒ ๋ชจ๋ธ ํฌํ•จ)๋Š” SQL Server ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SQL Server๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋‹จ๊ณ„๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

SQL Server๊ฐ€ ์•„๋‹Œ MySQL๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋จผ์ € ConfigureServices ๋ฉ”์„œ๋“œ์—์„œ UseMySql() ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

```c#
options.UseMySql(
Configuration.GetConnectionString("๊ธฐ๋ณธ ์—ฐ๊ฒฐ"));

Then delete the entire `Migrations` folder and just run something similar to the following command, to recreate the initial migration compatible with MySQL:

dotnet ef ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ CreateIdentitySchema๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

After that, the newly created initial migration will be compatible with MySQL and other operations based on that migration will be as well.

For example, the `CREATE TABLE` script for `AspNetRoles` when creating a migration script (by using `dotnet ef migrations script`) will look like this:

```sql
CREATE TABLE `AspNetRoles` (
    `Id` varchar(255) NOT NULL,
    `Name` varchar(256) NULL,
    `NormalizedName` varchar(256) NULL,
    `ConcurrencyStamp` longtext NULL,
    CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
);

๋ชจ๋“  4 ๋Œ“๊ธ€

#863์„ ์žฌํ˜„ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๋™์•ˆ ํ›„๋“œ ์•„๋ž˜์—์„œ ๋™์ผํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” dotnet ef update database ๋ช…๋ น์—์„œ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ํ™•์ธ ์ค‘์ž…๋‹ˆ๋‹ค.

์ƒˆ ASP.NET Core ํ”„๋กœ์ ํŠธ(์ธ์ฆ ์˜ต์…˜ ์‚ฌ์šฉ)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ EF Core ๊ณต๊ธ‰์ž๋ฅผ Pomelo.EntityFrameworkCore.MySql ๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋˜๋Š” ์—…๋ฐ์ดํŠธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” VS๊ฐ€ SQL Server๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์„ ์ฃผ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์ด๋ฏธ .\Data\Migrations\00000000000000_CreateIdentitySchema.cs ํŒŒ์ผ์— ์ดˆ๊ธฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ CreateIdentitySchema ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค( Up ๋ฐ Down ์ž‘์—…) ๋ฐ .\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…์†์„ฑ์ด ๋†’์€ ๋Œ€์ƒ ๋ชจ๋ธ ํฌํ•จ)๋Š” SQL Server ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

SQL Server๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” ์‹ค์ œ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ๋‹จ๊ณ„๊ฐ€ ์ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ž˜๋ชป๋œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

SQL Server๊ฐ€ ์•„๋‹Œ MySQL๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋จผ์ € ConfigureServices ๋ฉ”์„œ๋“œ์—์„œ UseMySql() ๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

```c#
options.UseMySql(
Configuration.GetConnectionString("๊ธฐ๋ณธ ์—ฐ๊ฒฐ"));

Then delete the entire `Migrations` folder and just run something similar to the following command, to recreate the initial migration compatible with MySQL:

dotnet ef ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ CreateIdentitySchema๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

After that, the newly created initial migration will be compatible with MySQL and other operations based on that migration will be as well.

For example, the `CREATE TABLE` script for `AspNetRoles` when creating a migration script (by using `dotnet ef migrations script`) will look like this:

```sql
CREATE TABLE `AspNetRoles` (
    `Id` varchar(255) NOT NULL,
    `Name` varchar(256) NULL,
    `NormalizedName` varchar(256) NULL,
    `ConcurrencyStamp` longtext NULL,
    CONSTRAINT `PK_AspNetRoles` PRIMARY KEY (`Id`)
);

์ƒˆ ASP.NET Core ํ”„๋กœ์ ํŠธ(์ธ์ฆ ์˜ต์…˜ ์‚ฌ์šฉ)๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ EF Core ๊ณต๊ธ‰์ž๋ฅผ Pomelo.EntityFrameworkCore.MySql ๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋˜๋Š” ์—…๋ฐ์ดํŠธ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์ผ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” VS๊ฐ€ SQL Server๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„์›€์„ ์ฃผ๋ ค๊ณ  ์‹œ๋„ํ–ˆ์œผ๋ฉฐ ์ด๋ฏธ .\Data\Migrations\00000000000000_CreateIdentitySchema.cs ํŒŒ์ผ์— ์ดˆ๊ธฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ CreateIdentitySchema ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค( Up ๋ฐ Down ์ž‘์—…) ๋ฐ .\Data\Migrations\00000000000000_CreateIdentitySchema.Designer.cs (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ข…์†์„ฑ์ด ๋†’์€ ๋Œ€์ƒ ๋ชจ๋ธ ํฌํ•จ)๋Š” SQL Server ๊ณต๊ธ‰์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

Pomelo.EntityFrameworkCore.MySql ๋ฒ„์ „ 2.2์—์„œ๋Š” CreateIdentitySchema๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์Šคํฌ๋ฆฝํŠธ

CREATE TABLE `aspnetroles` (
  `Id` varchar(255) NOT NULL,
  `Name` varchar(256) DEFAULT NULL,
  `NormalizedName` varchar(256) DEFAULT NULL,
  `ConcurrencyStamp` longtext,
  PRIMARY KEY (`Id`),
  UNIQUE KEY `RoleNameIndex` (`NormalizedName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

์˜ค๋ฅ˜ ์—†์ด,

3.0 ์ด์ƒ์ด ํ˜ธํ™˜์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์— ๋Œ€ํ•ด ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”,

Pomelo.EntityFrameworkCore.MySql ๋ฒ„์ „ 2.2์—์„œ๋Š” CreateIdentitySchema๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๋‹ค์‹œ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์—†์ด Pomelo 2.2์—์„œ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๊ตฌ์„ฑ(๋ฐ ํ‚ค ์œ ํ˜•)์— ํฌ๊ฒŒ ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ์œ ํšจํ•œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๋ชจ๋ธ ์ •์˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ดˆ๊ธฐ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ์Šค์Šค๋กœ ์ž‘์—…ํ•ด์•ผ ํ•˜๋ฉฐ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•˜์—ฌ ์ž‘๋™ํ•˜๋„๋ก ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค(MySQL ์ง€์‹์— ๋”ฐ๋ผ ๋„ˆ๋ฌด ๋งŽ์€ ๋…ธ๋ ฅ ์—†์ด ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ).

3.0 ๋ฆด๋ฆฌ์Šค์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฏ€๋กœ(์ ์ ˆํ•˜๊ฒŒ ํƒœ๊ทธ๊ฐ€ ์ง€์ •๋˜์–ด์•ผ ํ•จ) ์ฃผ์š” ๋˜๋Š” ๋ถ€ ์—…๊ทธ๋ ˆ์ด๋“œ์˜ ๊ฒฝ์šฐ ํ”„๋กœ๋•์…˜์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ๋จผ์ € ๊ฐœ๋ฐœ ๋ฐ ์Šคํ…Œ์ด์ง• ํ™˜๊ฒฝ์—์„œ ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜์‹ญ์‹œ์˜ค.

์˜ค๋ฅ˜ ์—†์ด,
[...]
์ด ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

3.0์˜ ์–ด๋–ค ์˜ค๋ฅ˜์™€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ตฌ์ฒด์ ์œผ๋กœ ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”?

2.2.6์—์„œ 3.0.0์œผ๋กœ ๋งŽ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ชจ๋ธ ํด๋ž˜์Šค, ํ•ด๋‹น ์ •์˜, ์ƒ์„ฑ๋œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ๋ฐ ๊ฒฐ๊ณผ SQL ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ๊ฒŒ์‹œํ•˜์—ฌ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰