[Day 1 / .NET Conf 2025] Welcome to .NET 10 & Visual Studio 2026! | ํ‚ค๋…ธํŠธ


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

ํ”„๋กœ์„ธ์Šค:

  1. ํ”„๋กœ์ ํŠธ ๋ถ„์„
  2. ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (์—†๋Š” ๊ฒฝ์šฐ)
  3. MS Test, XUnit, NUnit ์ง€์›
  4. ๊ธฐ์ค€ ์ปค๋ฒ„๋ฆฌ์ง€ ๊ณ„์‚ฐ
  5. ํ•ต์‹ฌ ์„œ๋น„์Šค, ๋ชจ๋ธ, ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ƒ์„ฑ
  6. ์‹คํŒจํ•œ ํ…Œ์ŠคํŠธ ์ž๋™ ์ˆ˜์ •
  7. ์ตœ์ข… ์ปค๋ฒ„๋ฆฌ์ง€ ์ธก์ •

๊ฒฐ๊ณผ ์š”์•ฝ:

  • ์ถ”๊ฐ€๋œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ์ˆ˜: ์ˆ˜๋ฐฑ ๊ฐœ
  • ๋ณ€๊ฒฝ๋œ ํ”„๋กœ์ ํŠธ ๋ฐ ํŒŒ์ผ
  • ์ด์ „/์ดํ›„ ์ปค๋ฒ„๋ฆฌ์ง€: ๋ช…ํ™•ํ•œ ์ˆœ ์ฆ๊ฐ€
  • ํ’ˆ์งˆ ์ง€ํ‘œ: ํ†ต๊ณผ/์‹คํŒจ ์š”์•ฝ
  • ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ์„ฑ ๊ฒฉ์ฐจ: ๊ฐœ์„ ์ด ํ•„์š”ํ•œ ์˜์—ญ ์‹๋ณ„
  • ์ƒˆ ํŒŒ์ผ ๋งํฌ: ์ƒ์„ฑ๋œ ํŒŒ์ผ๋กœ ์ง์ ‘ ์ด๋™

์‹œ๊ฐ„ ์ ˆ์•ฝ:

  • ์ œ๋กœ ์ปค๋ฒ„๋ฆฌ์ง€์—์„œ ์‹ค์ œ ์ปค๋ฒ„๋ฆฌ์ง€๊นŒ์ง€ 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 ์„œ๋ฒ„ ์„ค์น˜ ๋ฐ๋ชจ

  1. Visual Studio์—์„œ MCP ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํƒ์ƒ‰:
Extensions โ†’ MCP Registries
  1. ์‚ฌ์ „ ๊ตฌ์ถ•๋œ MCP ์„œ๋ฒ„ ๋ชฉ๋ก:
  • Azure DevOps
  • Chrome DevTools
  • Figma
  • GitHub
  • ๊ธฐํƒ€ ๋‹ค์–‘ํ•œ ์„œ๋ฒ„
  1. GitHub MCP ์„œ๋ฒ„ ์„ค์น˜ ๋ฐ ์ธ์ฆ:
Tools โ†’ GitHub ์„œ๋ฒ„ ์„ ํƒ
Authentication โ†’ GitHub ์ž๊ฒฉ ์ฆ๋ช… ์ œ๊ณต
  1. 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 ๊ตฌํ˜„:

  1. ์„œ๋ฒ„์—์„œ AG UI ์—”๋“œํฌ์ธํŠธ ๋งคํ•‘
  2. Blazor ์ปดํฌ๋„ŒํŠธ์—์„œ ํŒจํ‚ค์ง€ ์ฐธ์กฐ
  3. ์ปดํฌ๋„ŒํŠธ ์‚ฌ์šฉ

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 ๋‹ค์šด๋กœ๋“œ ํ›„:

  1. Copilot ๊ณ„์ •์— ๋กœ๊ทธ์ธ
  2. ์‹ ๊ทœ ์‚ฌ์šฉ์ž: ์˜ค๋Š˜ ๋ฌด๋ฃŒ๋กœ ์‹œ์ž‘

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 ํ˜ธ์ถœ ๋น„์šฉ ๊ด€๋ฆฌ
  • ์—๋Ÿฌ ์ฒ˜๋ฆฌ: ์—์ด์ „ํŠธ ์‹คํŒจ ์‹œ๋‚˜๋ฆฌ์˜ค ๋Œ€๋น„
  • ๋ณด์•ˆ: ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ œ์–ด
  • ํ…Œ์ŠคํŠธ: ์—์ด์ „ํŠธ ์‘๋‹ต์˜ ์ผ๊ด€์„ฑ ๊ฒ€์ฆ
3 Likes