Microsoft๊ฐ .NET 10์ ๋ฐํํ๋ฉฐ ๊ฐ๋ฐ ํ๋ซํผ์ ์๋ก์ด ์๋๋ฅผ ์ด์์ต๋๋ค. ์ 700๋ง ๊ฐ๋ฐ์๊ฐ ์ฌ์ฉํ๋ .NET ์ํ๊ณ๋ ์คํ์์ค ๊ธฐ์ฌ์ 68,000๋ช ๊ณผ 23,000๊ฐ์ ํ๋ฆฌํ์คํธ๋ก ๊ตฌ์ฑ๋ ๊ฑฐ๋ํ ์ปค๋ฎค๋ํฐ๋ก ์ฑ์ฅํ์ต๋๋ค. ์ฑ๋ฅ์ .NET Framework 4.8 ๋๋น ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ 93% ๊ฐ์, ์ด๋น ์์ฒญ ์ 15% ์ฆ๊ฐ๋ผ๋ ํ๊ธฐ์ ์ธ ์์น๋ฅผ ๊ธฐ๋กํ์ผ๋ฉฐ, Bing๊ณผ Xbox Gaming Copilot ๋ฑ Microsoft ํต์ฌ ์๋น์ค๋ค์ด ์ด๋ฏธ .NET 10์ ๋์ ํ์ต๋๋ค. Visual Studio 2026์ IDE๋ฅผ ํ๋ซํผ์์ ๋ถ๋ฆฌํ์ฌ ์๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , 30% ๋น ๋ฅธ ์์ ์๊ฐ๊ณผ 2๋ฐฐ ๋น ๋ฅธ ์๋ฃจ์ ๋ก๋๋ก ๊ฐ๋ฐ ๊ฒฝํ์ ํ์ ํ์ต๋๋ค. Aspire 1.3๋ Python, JavaScript๋ฅผ ํฌํจํ ํด๋ฆฌ๊ธ๋ ์ง์์ผ๋ก ์งํํ์ผ๋ฉฐ, ๋จ์ผ ํ์ผ ์ฑ ํธ์คํธ๋ก ๋ฐฐํฌ๋ฅผ ๊ฐ์ํํ์ต๋๋ค. GitHub Copilot์ ์์ด์ ํธ ๊ธฐ๋ฅ์ ์ฑ ํ๋ํ, ํ ์คํธ ์์ฑ, ํ๋กํ์ผ๋ง๊น์ง ์ ์ฒด ๊ฐ๋ฐ ์ฃผ๊ธฐ๋ฅผ ์ง์ํ๋ฉฐ, Model Context Protocol(MCP)๋ฅผ ํตํด ์ธ๋ถ ์์คํ ๊ณผ์ ์ฐ๊ฒฐ์ ํ์คํํ์ต๋๋ค.
.NET 10 ์ถ์ ๋ฐ ์ํ๊ณ ํํฉ
์ปค๋ฎค๋ํฐ ์ฑ์ฅ๊ณผ ์คํ์์ค ๊ธฐ์ฌ
Microsoft๋ .NET Conf 2024์์ .NET 10์ ์ ์ ์ถ์๋ฅผ ๋ฐํํ์ต๋๋ค. Scott Hanselman์ ํค๋ ธํธ๋ฅผ ํตํด .NET์ด ๊ฐ๋ฐ์๋ค์ด ์ฌ๋ํ๊ณ ๊ธฐ์ ๋ค์ด ์ ๋ขฐํ๋ ์์ ํ ๊ฐ๋ฐ ํ๋ซํผ์ผ๋ก ์ฑ์ฅํ์์ ๊ฐ์กฐํ์ต๋๋ค.
์ฃผ์ ์ฑํ ์งํ:
- ์๊ฐ ํ์ฑ ๊ฐ๋ฐ์: Visual Studio ์ ํ๊ตฐ์ ์ฌ์ฉํ๋ 700๋ง ๊ฐ๋ฐ์
- ์คํ์์ค ๊ธฐ์ฌ: .NET ์ ์ฅ์์ 290,000๊ฐ ์ด์์ ํ๋ฆฌํ์คํธ ๋ณํฉ
- .NET 10 ๊ธฐ์ฌ: 23,000๊ฐ์ ํ๋ฆฌํ์คํธ๊ฐ .NET 10์ ๋ณํฉ๋จ
- ์ ์ฒด ๊ธฐ์ฌ์: 68,000๋ช ์ด์์ด ์ฝ๋ ๊ธฐ์ฌ ๋ฐ ์ด์ ์ ์ถ
- ํ๋ก์ ํธ ํ๋: 2020๋ ์ดํ CNCF ์๋ ์งํ์์ ์ต๊ณ ์๋ ์คํ์์ค ํ๋ก์ ํธ ์ค ํ๋
- GitHub ์์: C#์ด GitHub์์ ์์ 5๊ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ผ๊ด๋๊ฒ ๋ญํฌ
์ฃผ์ ํํธ๋ ๋ฐ ๊ธฐ์ ๋์ ์ฌ๋ก
Microsoft ๋ด๋ถ ์ ํ๋ค์ด .NET 10์ ์ ๊ทน ๋์ ํ๊ณ ์์ต๋๋ค:
- Bing: ๋ฐ์ดํฐ์ผํฐ์์ .NET 10 ๋ฆด๋ฆฌ์ค ํ๋ณด ์คํ ์ค, P90 ์ง์ฐ ์๊ฐ์์ ๋์ ๋๋ ๊ฐ์ ํ์ธ
- Xbox Gaming Copilot: ์ ์ฒด .NET ์คํ(Microsoft.Extensions.AI, Orleans, Aspire, MCP C# SDK) ์ฌ์ฉ
- Copilot Studio: Blazor WebAssembly ์ฑ์ผ๋ก ๊ตฌ์ถ, MCP C# SDK ์ฌ์ฉ
- Chipotle: ๋น์ฆ๋์ค ์ด์์ .NET ํ์ฉ
์ฃผ์ ํํธ๋ ๊ธฐ์ฌ:
- ๋ ๋ํ, Canonical, IBM: ์ ์ง๊ด๋ฆฌ ๋ฐ ๋ณด์ ํํธ๋
- Syncfusion, Uno Platform: .NET MAUI ๋ฐ ํต์ฌ ์ปดํฌ๋ํธ ๊ตฌ์ถ ์ง์
- AMD, Intel: ์ ์์ค ํ๋์จ์ด intrinsics ๊ธฐ์ฌ๋ก AI ์ํฌ๋ก๋ ์ฑ๋ฅ ๊ฐ์
- Samsung: RISC-V ๋ฐ ARM ๋ช ๋ น์ด ์ธํธ ์ํคํ ์ฒ ์์
.NET 10์ ํ๊ธฐ์ ์ธ ์ฑ๋ฅ ๊ฐ์
๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ ๋ฐ ์ต์ ํ ๊ธฐ๋ฒ
.NET 10์ .NET ์ญ์ฌ์ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฒ์ ์ ๋๋ค. TechEmpower Fortunes ๋ฒค์น๋งํฌ์์ ์ธก์ ํ ๊ฒฐ๊ณผ:
- .NET 8 ๋๋น ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ 93% ๊ฐ์
- ์ด๋น ์์ฒญ ์ 15% ์ฆ๊ฐ
- .NET Framework 4.8์์ .NET 10์ผ๋ก ์ ๊ทธ๋ ์ด๋ ์ ๋๋ผ์ด ์ฑ๋ฅ ํฅ์
10๋ ๊ฐ์ ๊ณ์ธตํ๋ ํฌ์ ๊ฒฐ๊ณผ:
- Tiered Compilation: ์ฝ๋ ์คํ ํจํด์ ๋ฐ๋ผ ์ต์ ํ ์์ค ์กฐ์
- Dynamic PGO (Profile-Guided Optimization): ๋ฐํ์ ํ๋กํ์ผ ๋ฐ์ดํฐ๋ก ์ต์ ํ
- Guarded Devirtualization: ๊ฐ์ ๋ฉ์๋ ํธ์ถ ์ต์ ํ
- JIT ์ปดํ์ผ๋ฌ ๊ฐ์ : ๊ณ ์์ค C# ์ฝ๋๋ฅผ ์์ผ๋ก ์กฐ์จํ ๋ค์ดํฐ๋ธ ์ฝ๋ ์์ค์ ํจ์จ์ฑ์ผ๋ก ์คํ
- Adaptive Garbage Collection: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์ ํ๋ฉด์ ์ฒ๋ฆฌ๋๊ณผ ํ์ฅ์ฑ ํฅ์
์ ์ฒด ์คํ ์ฑ๋ฅ ํฅ์:
- ํ๋์จ์ด Intrinsics: ๋ฒกํฐํ๋ ๊ตฌํ์ ์ํ ์ธ๋ฐํ ์กฐ์ ์ด .NET ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ ํ
- Span ๊ธฐ๋ณธํ: ์ ์ฒด ์คํ์ ์ ์ฉ๋์ด ๋ฎ์ ํ ๋น๊ณผ ๋์ ์ฒ๋ฆฌ๋์ ๊ฐ์ง ์์ ํ ์ฝ๋ ๊ตฌํ
- ์ฝ๋ ๋ณ๊ฒฝ ์๋ ์ฑ๋ฅ ํฅ์: ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๊ฑด๋๋ฆฌ์ง ์์๋ ๋ฒ์ ๋ง ์ ๊ทธ๋ ์ด๋ํ๋ฉด ์ฑ๋ฅ ๊ฐ์
Stephen Toub์ ์ฑ๋ฅ ๋ธ๋ก๊ทธ ํฌ์คํธ๋ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ฉ์ถ ์ ๋๋ก ๋ฐฉ๋ํ ์ฑ๋ฅ ๊ฐ์ ๋ด์ญ์ ์์ธํ ๊ธฐ๋กํ๊ณ ์์ต๋๋ค.
.NET 10์ ์ฃผ์ ๊ธฐ๋ฅ
ํต์ฌ ๊ธฐ๋ฅ:
- ๋ฐํ์ ๊ฐ์ : ์ ์ํ GC, Dynamic PGO ๋ฑ
- ํ์ผ ๊ธฐ๋ฐ ์ฑ: ๋จ์ผ .cs ํ์ผ๋ก ํ๋ก์ ํธ ์์ด ์ฑ ๊ฐ๋ฐ ๊ฐ๋ฅ
- ๋ค์ดํฐ๋ธ AOT ๊ฒ์ ์ง์: Ahead-of-Time ์ปดํ์ผ๋ก ์์ ์๊ฐ ๋จ์ถ
- ์ปจํ ์ด๋ ์ง์: .NET ์ฑ์ ์ปจํ ์ด๋ํ ๊ฐ์ํ
- .NET MAUI ๊ฐ์ : ํฌ๋ก์ค ํ๋ซํผ ์ฑ ๊ฐ๋ฐ ํฅ์
- Entity Framework Core: ๋ฐ์ดํฐ ์ก์ธ์ค ์ฑ๋ฅ ๋ฐ ๊ธฐ๋ฅ ๊ฐ์
- ๋ณด์ ๊ฐํ: ์ ์ฒด ์คํ์ ๊ฑธ์น ๋ณด์ ๊ฐ์
- ASP.NET Core: Passkey ์ง์ ๋ฑ ์๋ก์ด ๊ธฐ๋ฅ
์ฅ๊ธฐ ์ง์(LTS):
- .NET 10์ LTS ๋ฆด๋ฆฌ์ค๋ก 3๋ ๊ฐ ๋ฌด๋ฃ ์ง์ ๋ฐ ํจ์น ์ ๊ณต
C# 14์ ์๋ก์ด ๊ธฐ๋ฅ
์์ฐ์ฑ ํฅ์ ์ธ์ด ๊ธฐ๋ฅ
C# 14๋ ๋ ๋น ๋ฅด๊ณ ํ์ฅ ๊ฐ๋ฅํ๋ฉฐ ์ฐ์ํ ์ฝ๋ ์์ฑ์ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ๋์ ํ์ต๋๋ค:
// 1. Null Conditional Assignment
// customer?.Name = "New Name";
// 2. Field-backed Properties
// ๊ฐ๊ฒฐํ ์์ฑ ์ ์ธ
public class DataWithFieldProperty
{
public string Name
{
get => field;
set => field = value ?? "Default";
}
}
// 3. Extension Members
public static class ConsoleExtensions
{
// Console ํ์
์ ๋ํ ํ์ฅ ๋ฉค๋ฒ ์ ์
extension(Console)
{
public static void UseColor(ConsoleColor color, Action action)
{
// ํ์ฅ ๋ฉ์๋ ๊ตฌํ
var prev = Console.ForegroundColor;
Console.ForegroundColor = color;
action();
Console.ForegroundColor = prev;
}
public static string Hello => "Hello from extension";
public static string Message => "Extension message";
}
}
public static class StringAniExtensions
{
// string ํ์
์ ์ธ์คํด์ค ๋ฉค๋ฒ ์ ์
extension(string source)
{
public string AniColorize()
{
// ์ธ์คํด์ค ํ์ฅ ๋ฉ์๋๋ก ๋ฌธ์์ด์ ๋ฌธ์๋ฅผ ๋๋ค ์์ํ
var result = new StringBuilder();
foreach (var c in source)
{
result.Append($"\x1b[3{Random.Shared.Next(1, 7)}m{c}\x1b[0m");
}
return result.ToString();
}
}
}
ํ์ฅ ๋ฉค๋ฒ์ ํ์ :
- ์ ์ ํ์ฅ ๋ฉ์๋: ๊ธฐ์กด ๊ธฐ๋ฅ ์ ์ง
- ์ธ์คํด์ค ํ์ฅ ๋ฉ์๋: ๋ฌธ์์ด ์ธ์คํด์ค ๋ฑ์ ์ธ์คํด์ค ๋ฉ์๋ ์ถ๊ฐ ๊ฐ๋ฅ
- ํ์ฅ ์์ฑ: ์ ์ ์์ฑ์ ๊ธฐ์กด ํ์ ์ ์ถ๊ฐ
์ค์ ์ฌ์ฉ ์ฌ๋ก
Tracebit ์คํํธ์ ์ B2B SaaS ๋ณด์ ์ ํ์ C#์ผ๋ก ์ ํํ์ผ๋ฉฐ, ์์ฐ์ฑ๊ณผ ์์ ์ฑ์ ์ฃผ์ ์ด์ ๋ก ๊ผฝ์์ต๋๋ค.
Aspire 1.3 - ํด๋ฆฌ๊ธ๋ ์ง์์ผ๋ก ์งํ
ํฌ๋ก์ค ์ธ์ด ๊ฐ๋ฐ ํ๊ฒฝ
Aspire๋ .NET Aspire์์ Aspire๋ก ๋ฆฌ๋ธ๋๋ฉํ๋ฉฐ ๋ค์ค ์ธ์ด ์ง์์ ๊ฐํํ์ต๋๋ค. Maddie๋ Aspire์ ์งํ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช ํ์ต๋๋ค:
Aspire์ ํต์ฌ ๊ฐ๋ :
- C#์ผ๋ก ๋ถ์ฐ ์ฑ ์ ์: ์น ์ฑ, API, ๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ, ํ๋ก ํธ์๋๋ฅผ ๊ฐํ์ ์ฝ๋๋ก ๋ชจ๋ธ๋ง
- IntelliSense ์ง์: ์ ์ฒด IntelliSense๋ก ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์
- ๋จ์ผ F5 ์คํ: ์คํฌ๋ฆฝํธ์ ๋ค์ค ์์ ํ๋ก์ ํธ, ์ฐ๊ฒฐ ๋ฌธ์์ด ๊ด๋ฆฌ ์์ด ์ ์ฒด ์ฑ์ ๋ก์ปฌ์์ ์คํ ๋ฐ ๋๋ฒ๊ทธ
- ํด๋ผ์ฐ๋ ๋ฐฐํฌ: ์ฝ๋ ๋ณ๊ฒฝ ์์ด ํด๋ผ์ฐ๋ ๋ฐฐํฌ
Aspire 1.3์ ์๋ก์ด ๊ธฐ๋ฅ:
- ํด๋ฆฌ๊ธ๋ ์ง์: JavaScript ํ๋ก ํธ์๋, Python ์ถ๋ก ์คํฌ๋ฆฝํธ ํตํฉ ๊ฐ๋ฅ
- ๋ค์ดํฐ๋ธ AOT CLI: ์ฑ๋ฅ ์ต์ ํ
- Blazor ๋์๋ณด๋: ๋ชจ๋ ๋ก๊ทธ, ์๋ํฌ์ธํธ, ํธ๋ ์ด์ค, ํ๊ฒฝ ๋ณ์ ์๊ฐํ
- ํตํฉ(Integrations): NuGet ํจํค์ง๋ก ์์ฑ๋ C# ํตํฉ์ผ๋ก ์ง๋จ, ์ค์ ๋ฑ ํ์ฑํ
- ๋จ์ผ ํ์ผ ์ฑ ํธ์คํธ: .NET 10์ ํ์ผ ๊ธฐ๋ฐ ์ฑ ๊ธฐ๋ฅ ํ์ฉ, ์ ์ฒด Aspire ํ๋ก์ ํธ๋ฅผ ํ๋์ ํ์ผ๋ก ๊ด๋ฆฌ
- CI/CD ํ์ดํ๋ผ์ธ ๊ฐ์ํ: ๋ก์ปฌ์์ ํด๋ผ์ฐ๋๋ก์ ๋น๋ ๋ฐ ๋ฐฐํฌ ์๋ํ
- ์ ์ฐํ ์ฐ๊ฒฐ ๋ฌธ์์ด ๊ด๋ฆฌ: ํฌ๋ก์ค ์ธ์ด ์ธ์ฆ์ ์ ๋ขฐ๋ก ์๋น์ค ๊ฐ ์์ ํ ํต์
Trapport์ ํผ๋๋ฐฑ: โ๋๋ถ๋ถ์ ํ์ํ ๊ธฐ๋ฅ์ด ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ, ๋ง์ถคํ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฝ๊ฒ ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.โ
Aspire์ ์ฒ ํ
Aspire๋ ๋น ๋ฅธ ์์์ ์ํ ์๊ฒฌ์ด ๋ด๊ธด ๊ธฐ๋ณธ๊ฐ๊ณผ ํ์์ ๋ฐ๋ผ ์ฑ์ฅํ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค. .NET์ผ๋ก ๊ตฌ์ถ๋์์ง๋ง ๋ชจ๋ ๊ฒ์ ์ด๋ ค ์์ต๋๋ค.
ํ์ผ ๊ธฐ๋ฐ ์ฑ - C# ๊ฐ๋ฐ์ ํ์
๊ฐ๋จํ ์์, ๊ฐ๋ ฅํ ํ์ฅ์ฑ
Damian Edwards๊ฐ Visual Studio Code์์ ํ์ผ ๊ธฐ๋ฐ ์ฑ์ ์์ฐํ์ต๋๋ค:
// hello.cs - ํ๋ก์ ํธ ํ์ผ ์์ด ์คํ ๊ฐ๋ฅ
Console.WriteLine("Hello World");
์คํ ๋ฐฉ๋ฒ:
dotnet run hello.cs
# ๋๋
dotnet hello.cs
์ธ์ด ๊ธฐ๋ฅ ์ ์ง์ ์ถ๊ฐ:
// ์์์ args ๋ณ์ ์ฌ์ฉ
var message = args.Length > 0 ? args[0] : "World";
Console.WriteLine($"Hello {message}");
์คํ:
dotnet hello.cs NetConf
# ์ถ๋ ฅ: Hello NetConf
ํด์ ์ฝ๋ก ์ง์๋ฌธ์ผ๋ก ํ์ฅ
ํ์ผ ์๋จ์ ์ง์๋ฌธ ์ถ๊ฐ๋ก NuGet ํจํค์ง, ๋น๋ ์์ฑ, SDK ๋ณ๊ฒฝ ๊ฐ๋ฅ:
#! nuget: Microsoft.Extensions.Logging
#! property: TargetFramework=net10.0
#! sdk: Aspire.AppHost
Aspire ์ฑ ํธ์คํธ ์์ :
#! sdk: Aspire.AppHost
#! nuget: Aspire.Hosting.JavaScript
#! nuget: Aspire.Hosting.Python
var builder = DistributedApplication.CreateBuilder(args);
var js = builder.AddJavaScriptApp("frontend");
var py = builder.AddPythonApp("backend");
builder.Build().Run();
C#์ผ๋ก Python๊ณผ JavaScript๋ฅผ ์กฐ์จํ๋ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ๋๋ค.
C# 14 ํ์ผ ๊ธฐ๋ฐ ์ฑ ์์
// c#14.cs
using System;
using System.Text;
Console.UseColor(ConsoleColor.Green, () =>
{
Console.WriteLine("C# 14".AniColorize());
});
public static class ConsoleExtensions
{
extension(Console)
{
public static void UseColor(ConsoleColor color, Action action)
{
var prev = Console.ForegroundColor;
Console.ForegroundColor = color;
action();
Console.ForegroundColor = prev;
}
public static string Hello => "Hello";
public static string Message => "Message";
}
}
public static class StringAniExtensions
{
extension(string source)
{
public string AniColorize()
{
var result = new StringBuilder();
foreach (var c in source)
{
result.Append($"\x1b[3{Random.Shared.Next(1, 7)}m{c}\x1b[0m");
}
return result.ToString();
}
}
}
์คํ:
dotnet c#14.cs
ํ๋ก์ ํธ๋ก ์ฌ์ด ์ ํ
ํ์ผ ๊ธฐ๋ฐ ์ฑ์์ ์ ํต์ ์ธ ํ๋ก์ ํธ๋ก ์ํํ ์ ํ:
dotnet project convert c#14.cs
์๋ ์์ฑ:
- c#14.csproj: ํ์ค ํ๋ก์ ํธ ํ์ผ
- ๋ชจ๋ ์ฝ๋ ๋ง์ด๊ทธ๋ ์ด์ : ๋ฌธ์ ์์ด ์ฝ๋ ์ด๋
- Visual Studio 2026 ํธํ: ์์ฑ๋ ํ๋ก์ ํธ๋ฅผ VS 2026์์ ๋ฐ๋ก ์ด๊ธฐ ๊ฐ๋ฅ
Damian์ ๋ด์ผ(ํ์ง ์๊ฐ ๊ธฐ์ค) ์ค์ ์ธ์ ์์ ํ์ผ ๊ธฐ๋ฐ ์ฑ์ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์๊ฐํ ์์ ์ ๋๋ค.
์ค์ ์ฑ ๊ฐ์ - Aspire Bingo
.NET 10 ๋ฐ Blazor ๊ธฐ๋ฅ ํตํฉ
Safia๋ Aspire Friday ์คํธ๋ฆผ์์ ์ฌ์ฉํ๋ Bingo ์ฑ์ .NET 10 ๊ธฐ๋ฅ์ผ๋ก ์ ๊ทธ๋ ์ด๋ํ์ต๋๋ค:
์ฑ ํน์ฑ:
- ํด๋ฆฌ๊ธ๋: JavaScript ํ๋ก ํธ์๋, Blazor ๊ด๋ฆฌ ํฌํธ
- ์ค์๊ฐ ํต์ : SignalR ์ฌ์ฉ
- ๋ค์ค ๋์ ์ฌ์ฉ์ ์ง์
- Aspire๋ก ํด๋ผ์ฐ๋ ๋ฐฐํฌ
MAUI ํตํฉ
๋ชจ๋ฐ์ผ ์ง์ ์ถ๊ฐ:
- Aspire์ MAUI ํตํฉ: iOS ์๋ฎฌ๋ ์ดํฐ๋ฅผ ํตํ ๋ก์ปฌ ํ ์คํธ
- Aspire ๋์๋ณด๋์์ iOS ์๋ฎฌ๋ ์ดํฐ ์คํ: ์ค์๊ฐ์ผ๋ก ์ฑ ๋ชจ๋ํฐ๋ง
- ํฌ๋ก์ค ํ๋ซํผ: ์คํธ๋ฆผ์ ์์ฒญํ๋ฉด์ ๋ชจ๋ฐ์ผ ๊ธฐ๊ธฐ์์ ๊ฒ์ ํ๋ ์ด ๊ฐ๋ฅ
OpenAPI 3.1 ์ง์
OpenAPI ๋ฌธ์์ ์ฃผ์ ๊ฐ์ :
- OpenAPI 3.1: JSON Schema์ ์ง์ ํ ์์ ์งํฉ์ผ๋ก ๋๋์ ์ธ ๊ฐํธ
- ๊ฒ์ฆ ๋ฐ ํด๋ง ์ง์ ๊ฐ์ : ์ ์ฒด ์คํ์์ ์ํธ ์ด์ฉ์ฑ ํฅ์
- .NET 10์์ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ
์๋ ๋ฌธ์ํ:
/// <summary>
/// Creates a new bingo square
/// </summary>
/// <param name="square">The square data</param>
/// <returns>The created square</returns>
app.MapPost("/api/squares", (BingoSquare square) =>
{
// ๊ตฌํ
});
XML ๋ฌธ์ ์ฃผ์์ด OpenAPI ๋ฌธ์์ ์๋ ํตํฉ๋ฉ๋๋ค. ์์ฑ๊ณผ ์ฃผ์์ ์ค๋ณต ์์ฑํ ํ์๊ฐ ์์ต๋๋ค.
Blazor์ Passkey ์ธ์ฆ
๊ด๋ฆฌ ํฌํธ์ ์์ฒด ์ธ์ฆ:
// Blazor ์ปดํฌ๋ํธ ๋ฐ ASP.NET Core Identity API ๊ฐ์
// ์๊ฐ๋ฝ์ผ๋ก ๋ก๊ทธ์ธ
Passkey ์ธ์ฆ ์ง์์ผ๋ก ๋น๋ฐ๋ฒํธ ์๋ ์์ ํ ๋ก๊ทธ์ธ์ ์๊ฐ๋ฝ ํ๋๋ก ๊ตฌํํฉ๋๋ค.
์ง์์ ์ํ(Persistent State)
Blazor์ ์๋ก์ด ๊ธฐ๋ฅ:
[PersistentState]
public List<Client> ConnectedClients { get; set; }
์ด์ :
- ์ฌ์ ๋ ๋๋ง ์ ๋ฐ์ ๊ฑธ์ณ ์ํ ์ ์ง
- ํด๋ผ์ด์ธํธ์์ ์ํ๊ฐ ํ์ฑํ๋ ๋ ๋ค์ ๊ฐ์ ธ์ค์ง ์์
- ๋น ๋ฅธ ์ด๊ธฐ ๋ก๋
๋ฒ์ฉ ๋ชจ๋ธ ๊ฒ์ฆ
Blazor์ Minimal API ์ ๋ฐ์ ์ผ๊ด๋ ๊ฒ์ฆ:
ํด๋ผ์ด์ธํธ ์ธก (Blazor):
// ๊ฒ์ฆ ์คํจ ์ ์๋์ผ๋ก UI์ ์ค๋ฅ ํ์
์๋ฒ ์ธก (Minimal API):
app.MapPost("/api/squares", (BingoSquare square) =>
{
// ๋์ผํ ๊ฒ์ฆ ๋ก์ง ์ ์ฉ
});
ASP.NET Core์ ์๋ก์ด ๋ฒ์ฉ ๋ชจ๋ธ ๊ฒ์ฆ ์ง์์ผ๋ก ์ค์ฒฉ๋ ๋ณต์กํ ํ์ ์ ์ด๋์๋ ๊ฒ์ฆ ๊ฐ๋ฅํฉ๋๋ค.
์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ ๋ฐฐํฌ
Git ๋ณ๊ฒฝ ์ฌํญ ์ฐฝ์์ ์ฝ๋ ๋ฆฌ๋ทฐ:
- Copilot ์ฝ๋ ๋ฆฌ๋ทฐ ์์ด์ฝ ํด๋ฆญ
- ์๋ ์์ฑ๋ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ: ํ ์คํธ ๋ฌธ๊ตฌ, ์ ๊ทผ์ฑ ์์ ๋๋น ๋ฑ ํ์ธ
- IDE ๋ด์์ ์ง์ ์์ ์น์ธ
Azure Container Apps ๋ฐฐํฌ:
# Aspire Deploy ํด๋ฆญ
์ฑ๋ฅ ํน์ฑ:
- .NET์ ์ฐ์ํ ์ฑ๋ฅ: ๋ ์ ์ ์ปจํ ์ด๋์์ ๋ ๋ง์ ์ํฌ๋ก๋ ์คํ
- ๋น์ฉ ์ ๊ฐ: ์ฑ๋ฅ ์ ํ ์์ด ๋น์ฉ ์ ๊ฐ
GitHub Copilot ์ฑ ํ๋ํ
์ ๊ทธ๋ ์ด๋ ํ๋ก์ธ์ค ์๋ํ
Scott Hanselman๋ GitHub Copilot App Modernization์ ์ค์์ฑ์ ๊ฐ์กฐํ์ต๋๋ค:
ํ๋ํ์ ํ์์ฑ:
- ๋ณด์ ์ํ: ์ค๋๋ ํ๋ ์์ํฌ์ ๋ณด์ ์ทจ์ฝ์
- ์ฑ๋ฅ ์ ํ: ์ต์ ๋ฐํ์ ํจ์จ์ฑ ๋ถ์กฑ
- ํ์ฅ ์ด๋ ค์: ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ, ์๋ ํ์ฅ, ๋ชจ๋ํฐ๋ง, ๋ณด์ ID ๊ด๋ฆฌ ๋ถ์กฑ
- ์ต์ API ์ ๊ทผ: ๋ ๋์ ๋ฐํ์ ํจ์จ์ฑ ๋ฐ ํด๋ง
GitHub Copilot ์ฑ ํ๋ํ ๊ธฐ๋ฅ:
- Visual Studio 2026์ ๋ด์ฅ
- ๋จ๊ณ๋ณ ๊ฐ์ด๋: ๋ชจํธ์ฑ ์ฒ๋ฆฌ ๋ฐ ๋ฌด๊ฑฐ์ด ์์ ์๋ํ
- "๋ช ์ฃผ ๊ฑธ๋ฆด ์์ "์ "๋ช ์๊ฐ"์ผ๋ก ๋จ์ถ
- .NET 10 ์ ๊ทธ๋ ์ด๋ ๋๋ ํด๋ผ์ฐ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ง์
์ฑ๊ณต ์ฌ๋ก:
- FMG: ๋ช ์๊ฐ ๋ง์ ์ฌ๋ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ๋ ์ด๋
GitHub Copilot ํ ์คํธ ์์ด์ ํธ
์๋ ํ ์คํธ ์์ฑ:
- Visual Studio 2026 Insiders ์ฑ๋์์ ๊ณต๊ฐ ํ๋ฆฌ๋ทฐ
- ๋จ์ ํ ์คํธ๊ฐ ์๋ ๋ ๊ฑฐ์ ์ฑ์ ์ํ ์๋ ํ ์คํธ ์์ฑ
- ๊ณ ํ์ง ํ ์คํธ ์์ฑ: C# ์ฝ๋ ๊ตฌ์กฐ ๋ฐ ํ๋ก์ ํธ ์ค์ ์ดํด
Brady์ Kathy์ ๋ฐ๋ชจ ์์ฝ:
1๋จ๊ณ: .NET Framework 4.8์์ .NET 10์ผ๋ก ์ ๊ทธ๋ ์ด๋
Contoso University ํ๋ก์ ํธ ์ฐํด๋ฆญ
โ "Upgrade to a newer version of .NET" ์ ํ
โ .NET 10 ์ ํ
โ ์
๊ทธ๋ ์ด๋ ๊ณํ ์์ฑ (์ฝ 10๋ถ)
โ ์๋ ์
๊ทธ๋ ์ด๋ ์คํ (์ฝ 30๋ถ)
์ ๊ทธ๋ ์ด๋ ๋ด์ฉ:
- NuGet ํจํค์ง ์ ๋ฐ์ดํธ: .NET Framework 4.8์ ๋ชจ๋ ํจํค์ง๋ฅผ .NET 10 ๋ฒ์ ์ผ๋ก
- ๋ณด์ ๊ฐ์ : ์ทจ์ฝํ ํจํค์ง ์ ๋ฐ์ดํธ
- SDK ์คํ์ผ ํ๋ก์ ํธ: ํ๋์ ์ธ ํ๋ก์ ํธ ํ์์ผ๋ก ์ ํ
2๋จ๊ณ: GitHub Copilot ํ ์คํธ ์์ฑ
// Copilot ์ฐฝ์์
@test Contoso University
ํ๋ก์ธ์ค:
- ํ๋ก์ ํธ ๋ถ์
- ํ ์คํธ ํ๋ก์ ํธ ์์ฑ (์๋ ๊ฒฝ์ฐ)
- MS Test, XUnit, NUnit ์ง์
- ๊ธฐ์ค ์ปค๋ฒ๋ฆฌ์ง ๊ณ์ฐ
- ํต์ฌ ์๋น์ค, ๋ชจ๋ธ, ์ปจํธ๋กค๋ฌ์ ๋ํ ํ ์คํธ ์์ฑ
- ์คํจํ ํ ์คํธ ์๋ ์์
- ์ต์ข ์ปค๋ฒ๋ฆฌ์ง ์ธก์
๊ฒฐ๊ณผ ์์ฝ:
- ์ถ๊ฐ๋ ๋จ์ ํ ์คํธ ์: ์๋ฐฑ ๊ฐ
- ๋ณ๊ฒฝ๋ ํ๋ก์ ํธ ๋ฐ ํ์ผ
- ์ด์ /์ดํ ์ปค๋ฒ๋ฆฌ์ง: ๋ช ํํ ์ ์ฆ๊ฐ
- ํ์ง ์งํ: ํต๊ณผ/์คํจ ์์ฝ
- ํ ์คํธ ๊ฐ๋ฅ์ฑ ๊ฒฉ์ฐจ: ๊ฐ์ ์ด ํ์ํ ์์ญ ์๋ณ
- ์ ํ์ผ ๋งํฌ: ์์ฑ๋ ํ์ผ๋ก ์ง์ ์ด๋
์๊ฐ ์ ์ฝ:
- ์ ๋ก ์ปค๋ฒ๋ฆฌ์ง์์ ์ค์ ์ปค๋ฒ๋ฆฌ์ง๊น์ง 1-2์๊ฐ
- ์๋ฐฑ ๊ฐ์ ํ ์คํธ ์๋ ์์ฑ
3๋จ๊ณ: Azure ๋ง์ด๊ทธ๋ ์ด์
"Migrate to Azure" ํด๋ฆญ
โ ํ๊ฐ ๋ณด๊ณ ์ ์คํ
โ Windows AD๋ฅผ Entra ID๋ก ๋ง์ด๊ทธ๋ ์ด์
(15-20๋ถ)
โ Azure SQL๋ก ์ฐ๊ฒฐ ๋ฌธ์์ด ๋ณ๊ฒฝ
โ ์ฐํด๋ฆญ ๋ฐฐํฌ ๋๋ CI/CD ์์ฑ
CI/CD ์ต์ :
- GitHub Actions: Visual Studio 2026์์ CI/CD ์คํฌ๋ฆฝํธ ์์ฑ
- Azure DevOps: ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก ํ์ดํ๋ผ์ธ ์๋ํ
- ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ง์ ์ปค๋ฐ
4๋จ๊ณ: Azure App Service Linux ๋ฐฐํฌ
๊ฒ์ ๋ฒํผ ํด๋ฆญ (2-3๋ถ ์์)
โ Entra ID ํ
๋ํธ์์ URL ์ถ๊ฐ
โ signin-oidc ์ ๋ฏธ์ฌ ์ค์
โ ์ธ์ฆ ์๋ฃ
์ ์ฒด ํ๋ก์ธ์ค ์๊ฐ:
- .NET Framework 4.8 โ .NET 10 ์ ๊ทธ๋ ์ด๋: ์ฝ 1์๊ฐ
- ํ ์คํธ ์์ฑ: 1-2์๊ฐ
- Azure ๋ง์ด๊ทธ๋ ์ด์ ๋ฐ ๋ฐฐํฌ: 1-2์๊ฐ
- ์ด ์์ ์๊ฐ: 3-4์๊ฐ
์ฝ๋๋ฅผ ๊ฑฐ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์์ ํ ํ๋ํ๋ฅผ ๋ฌ์ฑํ์ต๋๋ค.
AI ํตํฉ ๋ฐ ์์ด์ ํธ ํ๋ ์์ํฌ
์์ด์ ํธ์ ๊ฐ๋ ๊ณผ ์ค์์ฑ
Scott Hanselman๋ ์์ด์ ํธ์ ๋ณธ์ง์ ์ค๋ช ํ์ต๋๋ค:
๋น์ฆ๋์ค์ ๋ชจํธ์ฑ ๋ฌธ์ :
"๊ฐ๊ฒ์ ๊ฐ์ ๋นต์ ์ฌ์ค๊ณ , ๊ณ๋์ด ์์ผ๋ฉด 12๊ฐ ์ฌ์ค์ธ์."
โ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋นต 12๊ฐ๋ฅผ ์ฌ์๋ค
์์ด์ ํธ์ ์ญํ :
- ๋ฐฐ์น ํ์ผ์ด๋ PowerShell ์คํฌ๋ฆฝํธ์ ๋ค๋ฆ: ์ฅ์ ๋ฌผ์ด ์์ด๋ ๋ฉ์ถ์ง ์์
- ์ ์ ํ ์์ ์ ์ฉ: ๋ชจํธ์ฑ ์ฒ๋ฆฌ
- ์ ์ฐํ ํํธ๋: ๋๊ตฌ, ์ก์ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ์์ ์ํ
- ์ธ๊ฐ๊ณผ ์ ์ฌํ ์ถ๋ก : ์ค์ ๋น์ฆ๋์ค์ ํผ๋๊ณผ ๋ชจํธ์ฑ์ ์ ์
์์ด์ ํธ๋ ๋จ์ํ ์ค์ผ์ค๋๋ก ์คํ๋๋ ๊ฒ์ด ์๋๋ผ ์ ์ํ๊ณ ์งํํ๋ ์กด์ฌ์ ๋๋ค.
Microsoft Agent Framework
Semantic Kernel๊ณผ AutoGen์ ํตํฉ:
- 2024๋ ํตํฉ: ๋ ํ๋ ์์ํฌ๊ฐ Microsoft Agent Framework๋ก ํฉ์ณ์ง
- Microsoft.Extensions.AI ๊ธฐ๋ฐ: ๋์ผํ ๋น๋ฉ ๋ธ๋ก ์ฌ์ฉ
- ์์ด์ ํธ ๊ฐ๋ฐ ๊ฐ์ํ: ์์ ํ๊ณ ์ฑ ์๊ฐ ์๋ ๋ํํ AI ์ฑ ๊ตฌ์ถ
- ๊ณต๊ฐ ํ๋ฆฌ๋ทฐ: .NET ๋ฐ Python ํจํค์ง๋ฅผ GitHub์ NuGet์์ ์ฃผ๊ฐ ๋ฆด๋ฆฌ์ค
์ต์ ๋ฆด๋ฆฌ์ค ๊ธฐ๋ฅ:
- AG UI ํ๋กํ ์ฝ ์ง์: ์์ด์ ํธ์ UI ๊ฐ ํ์ค ํต์
- ๋ํํ ๊ฐ๋ฐ์ UI: ์์ด์ ํธ ๋ฐ ์ํฌํ๋ก์ฐ ์๊ฐํ, ๋๋ฒ๊ทธ, ํ ์คํธ
Model Context Protocol (MCP)
MCP๋ AI์ USB์ ๋๋ค:
- ํ์ค ๋ฉ์ปค๋์ฆ: AI ๋ชจ๋ธ์ด ๋๊ตฌ์ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ง์๊ณผ ๋ฅ๋ ฅ ํ์ฅ
- LLM ์ด๊ธฐ ํ๋ จ ์ด์์ ํ์ฅ: ๋น์ฆ๋์ค๋ณ ์ปจํ ์คํธ์ ๋๊ตฌ ์ฐ๊ฒฐ
- ๊ฐ๋ฐ ๋๊ตฌ ํตํฉ: Visual Studio, Visual Studio Code์ MCP ์ง์ ๋ด์ฅ
- MCP ์๋ฒ: Azure, Playwright, GitHub ๋ฑ
๊ณต์ C# SDK:
- 2024๋ 3์๋ถํฐ Anthropic๊ณผ ํ๋ ฅ
- ๊ณต์ C# SDK ์์ฑ ๋ฐ ์ ์ง๊ด๋ฆฌ
- Microsoft ์ ํ ์ฌ์ฉ: Windows, Visual Studio, Copilot Studio
MCP ํ์ฉ ์์:
๋ฌธ์ : GitHub Copilot์ด GitHub ์ด์์ ์ ๊ทผ ๋ถ๊ฐ
ํด๊ฒฐ: Ally์ MCP ์๋ฒ ์ค์น ๋ฐ๋ชจ
- Visual Studio์์ MCP ๋ ์ง์คํธ๋ฆฌ ํ์:
Extensions โ MCP Registries
- ์ฌ์ ๊ตฌ์ถ๋ MCP ์๋ฒ ๋ชฉ๋ก:
- Azure DevOps
- Chrome DevTools
- Figma
- GitHub
- ๊ธฐํ ๋ค์ํ ์๋ฒ
- GitHub MCP ์๋ฒ ์ค์น ๋ฐ ์ธ์ฆ:
Tools โ GitHub ์๋ฒ ์ ํ
Authentication โ GitHub ์๊ฒฉ ์ฆ๋ช
์ ๊ณต
- Copilot Chat์์ ์ฌ์ฉ:
"์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ์คํ ์ด์๋ฅผ ์์ฝํด์ค"
โ GitHub์์ ์ค์๊ฐ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
โ ์ด์ ์ ๋ชฉ๊ณผ ์์ฝ ์ ๊ณต
โ ๊ธฐ์กด ์ด์ ๋งํฌ
MCP์ ์ฅ์ :
- ์ฐ๊ฒฐ ํด์ ๋ ๋ชจ๋ธ์์ ์ฐ๊ฒฐ๋ ์ปจํ ์คํธ ์ธ์ ์ด์์คํดํธ๋ก ์ ํ
- CI/CD ํ์ดํ๋ผ์ธ, ๊ณ ๊ฐ ํผ๋๋ฐฑ, ๋ถ์ ๋ฑ ๋ชจ๋ ์์คํ ์ฐ๊ฒฐ ๊ฐ๋ฅ
- ์ฌ์ฉ์ ์ ์ MCP ์๋ฒ ๊ตฌ์ถ ๊ฐ๋ฅ
ํ๋ก์ ํธ ํ ํ๋ฆฟ์ผ๋ก ์ฌ์ด MCP ์๋ฒ ์์ฑ:
# NuGet ํจํค์ง ์ค์น
dotnet new install Microsoft.MCP.Templates
# MCP ์๋ฒ ์์ฑ
dotnet new mcp-server -n MyCustomServer
# NuGet ํจํค์ง๋ก ๊ณต์
๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ์์ ์ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ณณ ์ด๋๋ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
.NET ์์ด์ ํธ ๊ตฌ์ถ ์ค์ต
Maria์ Agent Framework ๋ฐ๋ชจ
Maria๋ .NET ๊ฐ๋ฐ์๋ฅผ ์ํ ์์ด์ ํธ ๊ตฌ์ถ์ ์ค์๊ฐ์ผ๋ก ์์ฐํ์ต๋๋ค:
1๋จ๊ณ: ๊ธฐ๋ณธ ์์ด์ ํธ ์์ฑ
// NuGet ํจํค์ง ์ค์น
using Microsoft.Agent.Framework;
// Writer ์์ด์ ํธ ์์ฑ
var writer = new AgentBuilder()
.WithModel(GitHubModel.GPT4)
.WithInstruction("๋น์ ์ ์ฐฝ์์ ์ธ ์๊ฐ์
๋๋ค.")
.Build();
// ์ด์ผ๊ธฐ ์์ฑ
var response = await writer.InvokeAsync("์งง์ ์ด์ผ๊ธฐ๋ฅผ ์จ์ฃผ์ธ์");
Console.WriteLine(response);
2๋จ๊ณ: ์คํธ๋ฆฌ๋ฐ ์๋ต
// ์๋ต์ ์ค์๊ฐ์ผ๋ก ์คํธ๋ฆฌ๋ฐ
await foreach (var chunk in writer.InvokeStreamingAsync("์ด์ผ๊ธฐ๋ฅผ ์จ์ฃผ์ธ์"))
{
Console.Write(chunk);
}
์ ๋์ ์ธ ์ฑํ ๊ฒฝํ์ผ๋ก ์ฝ์์ด ์ด์ ์๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค.
3๋จ๊ณ: ์์ด์ ํธ ํ์
// Writer ์์ด์ ํธ
var writer = new AgentBuilder()
.WithInstruction("์ฐฝ์์ ์ธ ์ด์ผ๊ธฐ๋ฅผ ์์ฑํฉ๋๋ค")
.Build();
// Editor ์์ด์ ํธ
var editor = new AgentBuilder()
.WithInstruction("์ด์ผ๊ธฐ๋ฅผ ๊ณต์์ ์ด๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๊ฐ์ ํฉ๋๋ค")
.Build();
// ์์ฐจ ์ํฌํ๋ก์ฐ
var workflow = new SequentialWorkflow()
.AddAgent(writer)
.AddAgent(editor);
var result = await workflow.RunAsync("๋ชจํ ์ด์ผ๊ธฐ๋ฅผ ์จ์ฃผ์ธ์");
Agent Framework๋ ์ฌ๋ฌ ์์ด์ ํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ์กฐ์จํ์ฌ ๋ณต์กํ ์์ ์ ์๋ฃํฉ๋๋ค.
4๋จ๊ณ: ๋๊ตฌ ์ถ๊ฐ
// Formatter ๋๊ตฌ
public class FormatterTool
{
[AgentTool("format_story")]
public string FormatStory(string content)
{
return $"# {GenerateTitle(content)}\n\n{content}";
}
private string GenerateTitle(string content)
{
// ์ ๋ชฉ ์์ฑ ๋ก์ง
}
}
// Editor์ ๋๊ตฌ ์ถ๊ฐ
var editor = new AgentBuilder()
.WithInstruction("์ด์ผ๊ธฐ๋ฅผ ๊ฐ์ ํ๊ณ ํ์์ ์ง์ ํฉ๋๋ค")
.WithTool<FormatterTool>()
.Build();
๋๊ตฌ๋ ์์ด์ ํธ๋ฅผ ๋ ๊ฐ๋ ฅํ๊ฒ ๋ง๋ญ๋๋ค.
ASP.NET Core ์์ด์ ํธ API ํ ํ๋ฆฟ
์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์น API:
dotnet new agent-api -n BookPublisher
์์ฑ๋ ๊ตฌ์กฐ:
// Program.cs
var builder = WebApplication.CreateBuilder(args);
// Writer ์์ด์ ํธ
builder.Services.AddAgent("writer", agent =>
{
agent.WithInstruction("์ฐฝ์์ ์ธ ์๊ฐ");
});
// Editor ์์ด์ ํธ
builder.Services.AddAgent("editor", agent =>
{
agent.WithInstruction("ํธ์ง์");
});
// ์ํฌํ๋ก์ฐ
builder.Services.AddWorkflow("publish", workflow =>
{
workflow.Sequential()
.AddAgent("writer")
.AddAgent("editor");
});
var app = builder.Build();
// OpenAI ์๋ต API
app.MapPost("/chat", async (ChatRequest request, IAgent agent) =>
{
return await agent.InvokeAsync(request.Message);
});
// ๋ํํ API (AG UI)
app.MapConversation("/conversation");
app.Run();
Map Dev UI - ๊ฐ๋ฐ์ UI:
- ์๊ฐ์ ์ผ๋ก ํ ์คํธ ๋ฐ ๋๋ฒ๊ทธ
- ์๋ต, ์ด๋ฒคํธ, ํธ๋ ์ด์ค, ๋๊ตฌ ํ์ธ
- ์์ด์ ํธ ํ๋ก์ฐ ์๊ฐํ
- ์ ๋ ฅ์ ์ฝ๋๋ก ๋์๊ฐ์ง ์๊ณ ์ ๋ฐ์ดํธ
- ํ์ต ๋ฐ ๊ฐ๋ฐ์ ํ์ํ ๊ฒฝํ
๊ตฌ์ฑ๋ง์ผ๋ก ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ:
builder.Services.AddMapDevUI();
AG UI ํ๋กํ ์ฝ
AG UI๋ ๊ฐ๋ฒผ์ด ํ๋กํ ์ฝ๋ก ํด๋ผ์ด์ธํธ์ ๋ฐฑ์๋ ๊ฐ ์ฑํ ์๋ต์ ์คํธ๋ฆฌ๋ฐํฉ๋๋ค.
Maria์ ์ค์๊ฐ ๋ฐ๋ชจ:
// Web API
app.MapConversation("/conversation");
// Blazor ์ฑ
@using Microsoft.Agent.UI
<AgentChat Endpoint="/conversation" />
ํจํค์ง ์ถ๊ฐ:
<!-- Web API -->
<PackageReference Include="Microsoft.Agent.UI.Server" />
<!-- Blazor -->
<PackageReference Include="Microsoft.Agent.UI.Blazor" />
3์ค์ ์ฝ๋๋ก ์ ์ฒด ์ฑํ UI ๊ตฌํ:
- ์๋ฒ์์ AG UI ์๋ํฌ์ธํธ ๋งคํ
- Blazor ์ปดํฌ๋ํธ์์ ํจํค์ง ์ฐธ์กฐ
- ์ปดํฌ๋ํธ ์ฌ์ฉ
AG UI๋ MCP ์์ ๊ตฌ์ถ๋ ์๋ก์ด ํ์ค์ ๋๋ค.
Aspire์์ AI ์ ํ๋ฆฌ์ผ์ด์ ์ถ์
Aspire์ AI ์คํํด ์์ด์ฝ:
- Aspire ์ด๋์๋ ์คํํด ์์ด์ฝ: AI ์ ํ๋ฆฌ์ผ์ด์ ํ์
- ์๋ต ์ถ์ : ์์ด์ ํธ ๊ฐ ํต์ ๋ชจ๋ํฐ๋ง
- Map Dev UI ๋๋ Aspire: ์ ํ์ ๋ฐ๋ผ ์ฌ์ฉ
๊ฐ๋ฐ์ ๋๊ตฌ์ ์งํ:
- REST API: F12 ๋๊ตฌ๋ก ๋๋ฒ๊น
- ์ฑํ ๋ด ๋ฐ ์์ด์ ํธ: Map Dev UI์ Aspire๋ก ๋๋ฒ๊น
- ์ถ์ ๊ฐ๋ฅํ ๋ํ: ์์ด์ ํธ ๊ฐ ํต์ ๊ฐ์ํ
Visual Studio 2026 ํ์
3๋ ํต์ฌ ๋ชฉํ
Mads์ Rachel์ Visual Studio 2026์ ์ค๊ณ ์ฒ ํ์ ๊ณต์ ํ์ต๋๋ค:
1. ์ฑ๋ฅ
- ์ฆ๋ถ ์ ๋ฐ์ดํธ๋ฅผ ๋์ด์ ๋๊ท๋ชจ ์ํคํ ์ฒ ๋ณ๊ฒฝ
- ๋ฉํฐ ์ฝ์ด ๋ณ๋ ฌํ: CPU ์ฝ์ด ์์ ๋ฐ๋ผ ์ฑ๋ฅ ํฅ์
- 30% ๋น ๋ฅธ ์์ ์๊ฐ
- ๊ฑฐ์ 2๋ฐฐ ๋น ๋ฅธ ์๋ฃจ์ ๋ก๋
- UI ํ๋ฆฌ์ฆ 50% ๊ฐ์: ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์ด๋ ๋ฐ ๋ณ๋ ฌํ
- ์๋ต์ฑ ํฅ์: ๊ฐ๋ณ๊ณ ๋น ๋ฅธ ๋๋
์ฑ๋ฅ ๋น๊ต:
Visual Studio 2026 vs VS Code ์์ ์๊ฐ
โ ๊ฑฐ์ ๋์ผ (<2์ด)
Visual Studio๊ฐ VS Code๋งํผ ๋น ๋ฅด๊ฒ ์์๋ฉ๋๋ค.
2. ์ถ์ ์ง(Quality of Life)
- 5,000๊ฐ ์ด์์ ์ฌ์ฉ์ ๋ณด๊ณ ๋ฒ๊ทธ ๋ฐ ์ด์ ์์ (12๊ฐ์๊ฐ)
- ์ผ์ผ ํ๊ท 23๊ฐ ์ด์ ์์ (๊ทผ๋ฌด์ผ ๊ธฐ์ค)
- 300๊ฐ ์ด์์ ๊ธฐ๋ฅ ์์ฒญ ๊ตฌํ
- Visual Studio ์ญ์ฌ์ ์ต๊ณ ๊ธฐ๋ก
- ์ฌ์ฉ์ ํผ๋๋ฐฑ ๊ธฐ๋ฐ ๋ฆด๋ฆฌ์ค
3. AI ํตํฉ
- ์์ฐ์ค๋ฌ์ด AI ๋์: ๊ธฐ์กด ์ํฌํ๋ก์ฐ์ ๋ง๊ฒ ํตํฉ
- ๊ทผ์ก ๊ธฐ์ต์ ๋ง๋ ์์น: ํ์ํ ๋ ์ ์ ํ ๊ณณ์ ํ์
- ์์ฐ์ฑ ํฅ์: ๊ฐ๋ฐ์์ ๊ธฐ์ ์์ค์ ๋์ด์ฌ๋ฆผ
์ค์น ๋ฐ ๋ง์ด๊ทธ๋ ์ด์ ํ์
Visual Studio ์ญ์ฌ์ ์ฒ์:
1. ์๋ ์ค์ ๋ง์ด๊ทธ๋ ์ด์
Visual Studio 2026 ์ค์น ์
โ Visual Studio 2022 ์ค์ ์๋ ํฌํธ
โ ์ํฌ๋ก๋ ๋ฐ ์ปดํฌ๋ํธ ๋ง์ด๊ทธ๋ ์ด์
โ ํด๋ฆญ ๋ช ๋ฒ์ผ๋ก ์ฆ์ ์คํ ๊ฐ๋ฅ
2. ํ์ฅ(Extension) ํ์ ํธํ์ฑ
4,000๊ฐ ์ด์์ Visual Studio 2022 ํ์ฅ
โ Visual Studio 2026์์ ๊ทธ๋๋ก ์๋
โ ์๋ ๋ง์ด๊ทธ๋ ์ด์
์ต์
โ ๋ง์ผํ๋ ์ด์ค ํ์ฅ ์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ
์์ ํ ์ต์ํ ํ๊ฒฝ์์ ๋ฐ๋ก ์์ํ ์ ์์ต๋๋ค.
ํ๋์ ์ธ UI ๋ฐ ํ ๋ง
์๋ก์ด UI:
- ์ ๋ช ํ ์ฃ์ง
- ์๋ฆ๋ค์ด ์์
- ์๋ก์ด ์์ด์ฝ
- ํ๋ํ๋ ์ ์ฒด์ ์ธ ๋๋
11๊ฐ์ ์๋ก์ด ์์ ํ ๋ง:
- ํํฌ ํ ๋ง: Rachel์ ์ค์จํฐ์ ๋งค์นญ
- ์ฟจ ์ฌ๋ ์ดํธ: Mads๊ฐ ์ ํธํ๋ ์ด๋์ด ํ ๋ง
- ๋ง์ผํ๋ ์ด์ค์์ ๋ ๋ง์ ํ ๋ง ๋ค์ด๋ก๋ ๊ฐ๋ฅ
- ์ฌ์ฉ์ ์ ์ ํ ๋ง ์์ฑ: ์ด์ ๋ณด๋ค ์ฌ์์ง
๋งค์ผ ๋ณด๋ ๋๊ตฌ์ด๋ฏ๋ก ์ธ๊ด๊ณผ ํธ์ํจ์ด ์ค์ํฉ๋๋ค.
IDE์ ํ๋ซํผ ๋ถ๋ฆฌ
ํ์ ์ ์ธ ๋ณํ:
๊ธฐ์กด: IDE โ ํ๋ซํผ ๊ฒฐํฉ
โ ์
๊ทธ๋ ์ด๋ ์ ๋น๋ ๋๊ตฌ๋ ํจ๊ป ์
๋ฐ์ดํธ
์๋ก์ด ๋ชจ๋ธ: IDE โฅ ํ๋ซํผ ๋ถ๋ฆฌ
โ Visual Studio ๋
๋ฆฝ ์
๋ฐ์ดํธ
โ ๋น๋ ๋๊ตฌ ๋
๋ฆฝ ์ ํ
โ ์์ ์ ์๋๋ก ์
๊ทธ๋ ์ด๋
์ด์ :
- Visual Studio ์ต์ ๋ฒ์ ์ ์ง: ์์ฌํ๊ณ ์ ๋ฐ์ดํธ
- ํ์ํ ๋น๋ ๋๊ตฌ ์ ์ง: ํ๋ก์ ํธ ์์ ์ฑ ๋ณด์ฅ
- ์ ์ ํ ์๊ธฐ์ ํ๋ซํผ ์ ๊ทธ๋ ์ด๋: ์ ์ฐ์ฑ ์ ๊ณต
๋ฆด๋ฆฌ์ค ์ฑ๋
์์ (Stable) ๋ฐ ์ธ์ฌ์ด๋(Insiders) ์ฑ๋:
Insiders ์ฑ๋
โ ์๋ก์ด ๊ธฐ๋ฅ ๋จผ์ ์ถ์
โ ๋น ๋ฅธ ์
๋ฐ์ดํธ ์ฃผ๊ธฐ
โ ํผ๋๋ฐฑ ์์ง
Stable ์ฑ๋
โ ๊ฒ์ฆ๋ ๊ธฐ๋ฅ
โ ์์ ์ ์ธ ํ๊ฒฝ
โ ํ๋ก๋์
์ค๋น
๋ณ๋ ฌ ์ค์น:
- Visual Studio 2022
- Visual Studio 2026 (Stable)
- Visual Studio 2026 (Insiders)
์ธ ๊ฐ์ง ๋ฒ์ ์ ๋์์ ์ฌ์ฉํ์ฌ ๊ธฐ๋ฅ ํ์ ๋ฐ ํ ์คํธ ๊ฐ๋ฅํฉ๋๋ค.
์๊ฐ ์ ๋ฐ์ดํธ
์๋ก์ด ๋ฆด๋ฆฌ์ค ์ฃผ๊ธฐ:
๊ธฐ์กด: ๋ถ๊ธฐ๋ณ ์
๋ฐ์ดํธ (์ฐ 3-4ํ)
์๋ก์ด: ์๊ฐ ์
๋ฐ์ดํธ (์ฐ 12ํ)
์์ ๋ ์ ๋ฐ์ดํธ:
- 2024๋ 11์: GA ๋ฆด๋ฆฌ์ค
- 2024๋ 12์: WinForms ์ ๋ฌธ๊ฐ ์์ด์ ํธ, Copilot ์ฝ๋ฉ ์์ด์ ํธ
- 2025๋ 2์: Hot Reload ์ฑ๋ฅ ๋ํญ ๊ฐ์ (Co-hosting)
์ธ์์ด ๋๋ฌด ๋น ๋ฅด๊ฒ ๋ณํ๋ฏ๋ก Visual Studio๋ ๋น ๋ฅด๊ฒ ๋ฐ๋ผ๊ฐ๋๋ค.
WinForms ์ ๋ฌธ๊ฐ ์์ด์ ํธ
Insiders ์ฑ๋์์ ์ค๋ ์ถ์:
WinForms์ ๊ณผ์ :
- ์ค๋๋ ๊ธฐ์ ์ด์ง๋ง ์ฌ์ ํ ํ๋ฐํ ์ฌ์ฉ
- ์๋ก์ด ์ฑ ๊ฐ๋ฐ์๋ ์ฌ์ฉ
- ๋ณต์ก์ฑ: ๋์์ด๋ ํ์ผ, MVVM, async/await ํจํด ๋ฑ
WinForms ์ ๋ฌธ๊ฐ ์ญํ :
- WinForms ํ์ด ์ง์ ์์ฑ: ์ ๋์ ์ธ ์ ๋ฌธ๊ฐ
- ์์ด์ ํธ ๋ชจ๋์์ ์๋: WinForms ๋ฒ ์คํธ ํ๋ํฐ์ค ์ง์
- ํ ๋ฉค๋ฒ์ฒ๋ผ: WinForms ํ์์ด ์์ ์์ ํ์ด ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ๊ณผ ๊ฐ์
12์ ์์ ์ฑ๋์์ ์ถ์ ์์ ์ ๋๋ค.
GitHub Copilot ํตํฉ ๊น์ด
์ ์ฒด ๊ฐ๋ฐ ์ฃผ๊ธฐ ์ง์
Rachel๊ณผ Ally์ Copilot ๋ฐ๋ชจ ์์ฝ:
1. ๊ณํ ๋จ๊ณ
Copilot Chat (์์ด์ ํธ ๋ชจ๋)
โ "์๊ฐ๋ ๋์ฐ๋ฏธ ์ฑ์ ๋ง๋ค๊ณ ์ถ์ด์"
โ ๊ณํ ์์ฑ ๋ฐ ์คํ
โ ๋จ๊ณ๋ณ ์งํ ์ํฉ ์
๋ฐ์ดํธ
โ ๋น๋ ๊ฒ์ฆ
โ ์์ ํ UI์ ๋ก์ง ์ค๋น
Planning์ ๊ณต๊ฐ ํ๋ฆฌ๋ทฐ์ด๋ฉฐ Visual Studio 2026 ๋๋ Dev Box์์ ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
2. ์ฝ๋ ์์ฑ
- ์ธ๋ผ์ธ ์ฝ๋ ์ ์: ํธ์ง๊ธฐ์์ ์ค์๊ฐ
- ์์ด์ ํธ ๋ชจ๋: ๋๊ท๋ชจ ์ฝ๋ ๋ณ๊ฒฝ์ ํญ์ ๋๊ธฐ
3. ํ ์คํธ
ํ ์คํธ ์์ด์ ํธ:
- ํฌ๊ด์ ์ธ ๋จ์ ํ ์คํธ ์์ฑ
- ํจ์จ์ ์ธ ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง
- ์์ Kathy ๋ฐ๋ชจ ์ฐธ์กฐ
4. ๋๋ฒ๊น
์์ธ ๋ถ์:
// ์ค๋จ์ ์ค์
var timezones = GetTimezones();
timezones.Remove(selectedZone);
// Copilot์๊ฒ ์ง๋ฌธ
"์ญ์ ๋ ์๊ฐ๋๊ฐ ๋ชฉ๋ก์์ ์ ๊ฑฐ๋์๋์ง ํ์ธํด์ค"
โ Copilot์ด ๋ชฉ๋ก ๊ฒ์ฌ
โ ์๋ฐฑ/์์ฒ ํญ๋ชฉ์์ ์ ์ํ ๊ฒ์ฌ
๋ณ์ ๊ฒ์ฌ ๊ฐ์ :
- ๋๊ท๋ชจ ์ปฌ๋ ์ ๊ฒ์ฌ ๊ฐ์ํ
- ์๊ฐ ์ ์ฝ
5. ์ฑ๋ฅ ์ต์ ํ
Copilot Chat
โ "์ต์ ํ ์ ์์ ํด์ค"
โ CPU ํ๋กํ์ผ๋ฌ ์คํ ๊ถ์ฅ
โ ์ฑ๋ฅ ์ถ์ ์ ์ํด ์ฑ ํด๋ฆญ
โ ๋ช
ํํ๊ณ ์คํ ๊ฐ๋ฅํ ์ธ์ฌ์ดํธ ์ ๊ณต
โ ์ ํํ ๋ฌด์์ ์์ ํด์ผ ํ๋์ง ํ์
์ฑ๋ฅ ์ ๋ฌธ๊ฐ๊ฐ ์๋์ด๋ ์ต์ ํ ๊ฐ๋ฅ:
- ์ ๋ฌธ ์ง์ ๊ฒฉ์ฐจ ํด์
- ํ๊ณผ ๋ ๋์ ํ์
6. ์ฝ๋ ๋ฆฌ๋ทฐ
Git ๋ณ๊ฒฝ ์ฌํญ ์ฐฝ์์:
์ฝ๋ ๋ฆฌ๋ทฐ ์์ด์ฝ ํด๋ฆญ
โ ์๋ ์์ฑ๋ ๋ฆฌ๋ทฐ ์ฝ๋ฉํธ
โ ํ
์คํธ ๋ฌธ๊ตฌ, ์ ๊ทผ์ฑ ์์ ๋๋น ํ์ธ
โ IDE์์ ์ง์ ์ ์ ์๋ฝ
โ ํธ์ ์ ์ฝ๋ ์กฐ์
์์ฒด ๊ฒํ ๋ก ์ ๋ขฐ๋ ํฅ์ ๋ฐ ํ ์๊ฐ ์ ์ฝ
7. ๋ฐฐํฌ
Azure MCP ์๋ฒ ๋๊ตฌ ์ฌ์ฉ:
Copilot Chat
โ Azure ๋๊ตฌ๋ก ์ฑ ๋ฐฐํฌ
โ Azure Container Apps ์ธ์คํด์ค๋ก ์ด๋
โ ๋ชจ๋ ์ฌ๋์ด ์ก์ธ์ค ๊ฐ๋ฅ
8. ํ๋ํ
์์ด์ ํธ ํ๋ํ ๊ธฐ๋ฅ:
- .NET 10์ผ๋ก ์ ๊ทธ๋ ์ด๋
- Brady์ ์์ ๋ฐ๋ชจ ์ฐธ์กฐ
Copilot์ผ๋ก ๋ชจ๋ ๊ฒ์ ํ ์ ์์ผ๋ฉฐ, Visual Studio 2026์์ ๊ทธ ์ด๋ ๋๋ณด๋ค ๋น ๋ฅด๊ณ ์ฝ์ต๋๋ค.
Copilot ์์ํ๊ธฐ
Visual Studio 2026 ๋ค์ด๋ก๋ ํ:
- Copilot ๊ณ์ ์ ๋ก๊ทธ์ธ
- ์ ๊ท ์ฌ์ฉ์: ์ค๋ ๋ฌด๋ฃ๋ก ์์
100๋ง ๋ช ์ด์์ ๊ฐ๋ฐ์๊ฐ ์ด๋ฏธ Visual Studio์์ GitHub Copilot์ ์ฌ์ฉํ์ฌ ์์ฐ์ฑ์ ๊ทน๋ํํ๊ณ ์์ต๋๋ค.
ํํธ๋์ญ ๋ฐ ์ค์ ์ฌ์ฉ ์ฌ๋ก
Shoreless AI์ Texas A&M ๋ํ๊ต
๋น๋์ค ์์ฝ:
Shoreless AI:
- .NET์ผ๋ก ๊ตฌ์ถ: ๋ชจ๋ ๊ฒ์ด .NET ๊ธฐ๋ฐ
- ์์ด์ ํธ ์กฐ์ง ๋ชจ๋ธ๋ง: ๊ฐ์ ์กฐ์ง ์์ฑ
- AI ํ๋ก์์์ AI ๋ฆฌ๋๋ก ์ ํ: ๊ณ ๊ฐ ์ง์
- ๋น ๋ฅธ ๋ฐฐํฌ: ๋ช ๋ฌ์ด ์๋ ๋ฉฐ์น ๋ง์ ๊ตฌํ
- Visual Studio์ Copilot ํตํฉ: ๋น ๋ฅธ ๊ฐ๋ฐ ๋ฐ ๋ฐฐํฌ
Texas A&M University Mays Business School:
- ๋น์ : ๋น์ฆ๋์ค๋ฅผ ํตํด ๋ ๋์ ๋ฏธ๋ ๊ตฌ์ถ
- ์ ๊ตญ ์ต์ด ๊ฒฝ์: 37๊ฐ ๋ํ, 100๊ฐ ์ด์์ ์ ์ฒญ
- AI ๋น์ฆ๋์ค ์์ด๋์ด ๋ฐํ: ํ๋ถ์ ์ฐฝ์ ์
- Shoreless AI ์ฌ์ฉ: 100๊ฐ ์ด์์ ์ ์ถ๋ฌผ ํ๊ฐ
- ๊ธฐ์ ๊ธ AI ๋๊ตฌ: ํ๊ฐ ์๊ฐ ๋จ์ถ ๋ฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง
- .NET ๋ฐ Azure ํ๋ซํผ: ์ ํ์ ๋ช ํํ ์ด์
- ๋ ๋ฆฝ์ ์ธ ์ฌ์ฌ: ํธ๊ฒฌ ์ ๊ฑฐ ๋ฐ ๋ ํนํ ์ธ์ฌ์ดํธ ์ ๊ณต
๋ฏธ๋๋ฅผ ์ํ ํํธ๋์ญ:
- Texas A&M, Shoreless, Microsoft: ์์์ ๋ถ๊ณผ
- AI๊ฐ ๋ฏธ๋๋ฅผ ์ ์ํ๊ณ ํ์ฑ: ํ์๋ค์ด ์ฃผ๋
์ค์ฉ์ ์ธ ํ๊ณผ ์ฃผ์์ฌํญ
.NET 10 ์ ๊ทธ๋ ์ด๋
ํ:
- ๋ฐฑ์ ํ์: ์ ๊ทธ๋ ์ด๋ ์ ์ฝ๋ ๋ฐฑ์
- ํ ์คํธ ํ๊ฒฝ์์ ๋จผ์ ์๋: ํ๋ก๋์ ์ ๊ฒ์ฆ
- GitHub Copilot ์ฑ ํ๋ํ ์ฌ์ฉ: ์๋ํ๋ก ์๊ฐ ์ ์ฝ
- LTS ๋ฒ์ ํ์ฉ: 3๋ ๊ฐ ์ง์ ๋ณด์ฅ
์ฃผ์์ฌํญ:
- ์ข ์์ฑ ํ์ธ: NuGet ํจํค์ง ํธํ์ฑ ์ ๊ฒ
- API ๋ณ๊ฒฝ ๊ฒํ : Deprecated API ์ฌ์ฉ ์ฌ๋ถ ํ์ธ
- ์ฑ๋ฅ ํ ์คํธ: ์ ๊ทธ๋ ์ด๋ ํ ๋ฒค์น๋งํฌ ์ํ
Visual Studio 2026 ์ค์น
ํ:
- ๋ณ๋ ฌ ์ค์น: VS 2022์ 2026 ๋์ ์ฌ์ฉ ๊ฐ๋ฅ
- ํ์ฅ ๋ง์ด๊ทธ๋ ์ด์ : ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ต์ ํ์ฉ
- Insiders ์ฑ๋: ์ต์ ๊ธฐ๋ฅ ๋ฏธ๋ฆฌ ์ฒดํ
- Dev Box ํ์ฉ: ํด๋ผ์ฐ๋ ๊ฐ๋ฐ ํ๊ฒฝ ํ์ฉ
์ฃผ์์ฌํญ:
- ๋์คํฌ ๊ณต๊ฐ ํ๋ณด: ์ฌ๋ฌ ๋ฒ์ ์ค์น ์ ๊ณต๊ฐ ํ์
- ํ๋ก์ ํธ ํธํ์ฑ: ํ์๊ณผ ๋ฒ์ ์กฐ์จ
- ํ๋ซํผ ๋ ๋ฆฝ์ฑ: ๋น๋ ๋๊ตฌ ๋ฒ์ ๋ณ๋ ๊ด๋ฆฌ
Aspire ํ์ฉ
ํ:
- ๋จ์ผ ํ์ผ ์ฑ ํธ์คํธ: ๊ฐ๋จํ ํ๋ก์ ํธ๋ก ์์
- ๊ธฐ์กด ํตํฉ ํ์ฉ: NuGet ํจํค์ง๋ก ์ฝ๊ฒ ํตํฉ
- Blazor ๋์๋ณด๋: ์๊ฐ์ ๋ชจ๋ํฐ๋ง ํ์ฉ
- CI/CD ํตํฉ: Azure ๋ฐฐํฌ ์๋ํ
์ฃผ์์ฌํญ:
- ํด๋ฆฌ๊ธ๋ ๋ณต์ก์ฑ: ๋ค์ค ์ธ์ด ํ๋ก์ ํธ๋ ์ธ์ฆ์ ์ ๋ขฐ ์ค์ ํ์
- ๋ฆฌ์์ค ๊ด๋ฆฌ: ๋ก์ปฌ ๊ฐ๋ฐ ์ ๋ฆฌ์์ค ์๋น ๋ชจ๋ํฐ๋ง
- ๋ฒ์ ํธํ์ฑ: .NET 10๊ณผ Aspire 1.3 ๋ฒ์ ๋งค์นญ
AI ์์ด์ ํธ ๊ฐ๋ฐ
ํ:
- Agent Framework ํ
ํ๋ฆฟ ์ฌ์ฉ:
dotnet new agent-api์์ - Map Dev UI ํ์ฉ: ์๊ฐ์ ๋๋ฒ๊น ์ผ๋ก ํ์ต
- ์์ฐจ ์ํฌํ๋ก์ฐ: ๊ฐ๋จํ ์์ด์ ํธ ์กฐํฉ๋ถํฐ ์์
- MCP ์๋ฒ ํ์: ๊ธฐ์กด ์๋ฒ๋ก ๋น ๋ฅธ ํตํฉ
์ฃผ์์ฌํญ:
- ๋น์ฉ ๋ชจ๋ํฐ๋ง: LLM API ํธ์ถ ๋น์ฉ ๊ด๋ฆฌ
- ์๋ฌ ์ฒ๋ฆฌ: ์์ด์ ํธ ์คํจ ์๋๋ฆฌ์ค ๋๋น
- ๋ณด์: ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์ ๊ทผ ์ ์ด
- ํ ์คํธ: ์์ด์ ํธ ์๋ต์ ์ผ๊ด์ฑ ๊ฒ์ฆ