์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
๊ณต์‹ ์‚ฌ์ดํŠธ
1. ๊ฐœ์š”2. ๋ฒ„์ „
2.1. 5.x
3. .NET Framework
3.1. CIL3.2. ์ฃผ์š” ์ง€์› ์–ธ์–ด3.3. ๋ฒ„์ „๋ณ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ
4. .NET Core
4.1. ์ง€์› ์–ธ์–ด4.2. ์š”๊ตฌ ์‚ฌํ•ญ
4.2.1. Windows4.2.2. macOS4.2.3. ๋ฆฌ๋ˆ…์Šค
4.3. ์ฐธ๊ณ 
5. ๊ธฐํƒ€6. ๊ด€๋ จ ๋ฌธ์„œ

1. ๊ฐœ์š”[ํŽธ์ง‘]

๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ Windows ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ๋ฐ ์‹คํ–‰ ํ™˜๊ฒฝ(ํ”„๋ ˆ์ž„์›Œํฌ). MS๊ฐ€ ๊ณต์‹ ์ง€์›ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฒ„์ „์œผ๋กœ Mono ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค.

FCL(Framework Class Library, ํ”„๋ ˆ์ž„์›Œํฌ ํด๋ž˜์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) ํด๋ž˜์Šค๋Š” .NET ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, CLR(Common Language Runtime, ๊ณต์šฉ ์–ธ์–ด ๋Ÿฐํƒ€์ž„) ํด๋ž˜์Šค๋Š” ๊ณตํ†ต ์–ธ์–ด ๋Ÿฐํƒ€์ž„ ํด๋ž˜์Šค๋กœ ์•Œ๋ ค์ ธ ์žˆ๋Š”๋ฐ ์ด ํด๋ž˜์Šค๋Š” ์–ธ์–ด ์™ธ์—๋„ ๋ณด์•ˆ, ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ๊ธฐํƒ€ ํ•ธ๋“ค๋ง ์—ญํ• ์„ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์ƒ๋จธ์‹ ์ด๊ธฐ๋„ ํ•˜๋‹ค. ์ด FCL๊ณผ CLR์ด ํ•ฉ์ณ์ง„ ๊ฒƒ์ด .NET Framework์ด๋‹ค.

2. ๋ฒ„์ „[ํŽธ์ง‘]

Microsoft .NET
5.0 Preview
2020๋…„ 03์›” 16์ผ
5.0 RC1
2020๋…„ 09์›” 14์ผ
5.0 RC2
2020๋…„ 10์›” 13์ผ
5.0
2020๋…„ 11์›” 10์ผ

2.1. 5.x[ํŽธ์ง‘]

.NET 5.0์€ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๋นŒ๋“œ 2019 ์ปจํผ๋Ÿฐ์Šค์—์„œ ์ฒ˜์Œ ๋ฐœํ‘œํ•˜๊ณ  2020๋…„ 11์›”์— ์ถœ์‹œํ•œ ๋ฒ„์ „์ด๋‹ค.

์ƒˆ๋กœ์šด .NET 5๋Š” .NET Core, Xamarin ๋“ฑ์ด ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์ง„ ๋ฒ„์ „์œผ๋กœ ์—ฌ๋Ÿฌ ์šด์˜์ฒด์ œ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ .NET Framework๋Š” ๋”์ด์ƒ ๋ฆด๋ฆฌ์ฆˆ ๋˜์ง€ ์•Š์œผ๋ฉฐ .NET Core๋Š” .NET Framework์˜ ์ƒˆ๋กœ์šด ํฌ๋กœ์Šค ํ”Œ๋ ›ํผ ๋ฒ„์ „์ด๋ฏ€๋กœ .NET 5์™€ .NET Framework๋Š” ์ถœ๋ฐœ ์ง€์ ์ด ๋‹ค๋ฅด๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ

3. .NET Framework[ํŽธ์ง‘]

3.1. CIL[ํŽธ์ง‘]

.NET ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋“ค๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋Š” ๊ฐ ์–ธ์–ด์— ๋งž๋Š” ์ปดํŒŒ์ผ๋Ÿฌ[1]๋ฅผ ๊ฑฐ์ณ .NET CLR์šฉ ์ค‘๊ฐ„ ์ฝ”๋“œ์ธ CIL(Common Intermediate Language)๋กœ ์ปดํŒŒ์ผ๋œ ํ›„ .exe ํŒŒ์ผ๋กœ ๋ž˜ํ•‘(wrapping)๋œ๋‹ค.[2] ๊ทธ๋ฆฌ๊ณ  .NET CLR์€ ์ด ํŒŒ์ผ์„ JIT ์ปดํŒŒ์ผ ๋ฐฉ์‹์œผ๋กœ ์ฝ์–ด๋“ค์—ฌ ๊ธฐ๊ณ„์–ด ๋ฒˆ์—ญ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. CIL์€ .NET CLR์ด ์„ค์น˜๋œ ๊ณณ์ด๋ผ๋ฉด ์–ด๋””์„œ๋“  ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์˜ˆ๋กœ ๋“ค์–ด์„œ Hello World๋ฅผ ์ถœ๋ ฅํ•˜๋Š” C# ์ฝ”๋“œ๊ฐ€
using System;

namespace HelloWorld
{
	public class Program
	{
		private static void Main(string[] args)
		{
			Console.WriteLine("Hello, World!\n");
			Console.ReadLine();
		}
	}
}

์ด๋ผ๋ฉด ์ปดํŒŒ์ผ ์‹œ ๋ฐ”๋€Œ๋Š” CIL ์ฝ”๋“œ๋Š”
.class public auto ansi beforefieldinit HelloWorld.Program
extends [mscorlib]System.Object
{
.method private hidebysig static
void Main (
string[] args
) cil managed
{
.maxstack 8
.entrypoint
IL_0000: ldstr "Hello, World!\n"
IL_0005: call void [mscorlib]System.Console::WriteLine(string)
IL_000A: call string [mscorlib]System.Console::ReadLine()
IL_000F: pop
IL_0010: ret
}
.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
.maxstack 8
IL_0000: ldarg.0
IL_0001: call instance void [mscorlib]System.Object::.ctor()
IL_0006: ret
}
}
์ด๋ ‡๊ฒŒ ๋œ๋‹ค.

3.2. ์ฃผ์š” ์ง€์› ์–ธ์–ด[ํŽธ์ง‘]

  • C# - ๋‹ท๋„ท์˜, ๋‹ท๋„ท์— ์˜ํ•œ, ๋‹ท๋„ท์„ ์œ„ํ•œ ์–ธ์–ด.
  • Visual Basic .NET - C#๋ณด๋‹ค ๋‹จ์ˆœํ•˜์ง€๋งŒ, ๊ธฐ๋Šฅ์€ ๋˜‘๊ฐ™์•„ .NET Framework ์ž…๋ฌธ์— ์ ์ ˆํ•˜๋‹ค.
  • DLR - ๋™์  ์–ธ์–ด ๋Ÿฐํƒ€์ž„(Dynamic Language Runtime)์œผ๋กœ CLR์—์„œ Python, Ruby ๋“ฑ์˜ ๋™์  ์–ธ์–ด๋“ค์„ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. IronPython๊ณผ IronRuby ๋“ฑ ํƒ€ ์–ธ์–ด๋ฅผ C#๊ณผ ๊ฐ™์ด ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • F# - GPU ์—ฐ์‚ฐ ๋“ฑ์„ ์ž์ฒด์ง€์›ํ•˜๋Š” ์—ฐ์‚ฐ์— ํŠนํ™”๋œ ์–ธ์–ด์ด๋‹ค
  • Delphi.NET

3.3. ๋ฒ„์ „๋ณ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ[3][ํŽธ์ง‘]

* ํ‘œ์‹œ๊ฐ€ ๋œ ํ•ญ๋ชฉ์€ ์ถœ์‹œ ์˜ˆ์ •์ด๋‹ค.
๋ฒ„์ „
๋ณ€๊ฒฝ์‚ฌํ•ญ
  1. 0
๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ ์ฒซ ๋ฒ„์ „์œผ๋กœ์„œ, ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์ฒ˜์Œ์œผ๋กœ ์™„์„ฑํ•œ ๋ฒ„์ „
  1. 1
ASP.NET ๊ธฐ๋Šฅ ๊ฐ•ํ™” ๋ฐ ์˜ค๋ผํด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ODBC, OLE DB ์ง€์›
2.0
์ œ๋„ค๋ฆญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ ์ œ๋„ค๋ฆญ ๋„์ž…, ADO/ASP.net ์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ  ์ถ”๊ฐ€, AMD64 ํ”„๋กœ์„ธ์„œ ์šฉ ๋ฒ„์ „ ์ถœ์‹œ
3.0[4]
4๊ฐœ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ: ์œˆ๋„์šฐ ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ํŒŒ์šด๋ฐ์ด์…˜[5], ์œˆ๋„์šฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ํŒŒ์šด๋ฐ์ด์…˜[6], ์œˆ๋„์šฐ ์›Œํฌํ”Œ๋กœ ํŒŒ์šด๋ฐ์ด์…˜[7], ์œˆ๋„์šฐ ์นด๋“œ์ŠคํŽ˜์ด์Šค[8] ์ถ”๊ฐ€.
3.5
๊ธฐ์กด ์–ธ์–ด๋“ค[9]์— ๋Œ€ํ•œ ์ง€์›๊ณผ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ๋Œ€๊ฑฐ ์ถ”๊ฐ€. ์„œ๋น„์Šค ํŒฉ 1์—์„œ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋“ค์ด ๋” ์ถ”๊ฐ€ ๋ฐ ํ™•์žฅ
4.0
๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Parallel Extension, Parallel Linq ๊ธฐ๋Šฅ ์ถ”๊ฐ€, C# 4.0์— ๋‹ค์ด๋‚˜๋ฏน ํƒ€์ž…, ์ž„์˜ ์ •๋ฐ€๋„ ์ •์ˆ˜[10] ํƒ€์ž…, ๋ณต์†Œ์ˆ˜[11] ํƒ€์ž… ์ถ”๊ฐ€.
4.5
๋ฉ”ํŠธ๋กœ ์•ฑ ๊ฐœ๋ฐœ ๊ณต์‹ ์ง€์›, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋œ C# 5.0 ๋ฐ Visual Basic .NET ์„ ์ง€์›
4.6
64๋น„ํŠธ๋ฅผ ์ง€์›ํ•˜๋Š” RyuJIT, SSE2์™€ AVX2 ์ง€์›, HiDPI ๋Œ€์‘, TCF 1.1๊ณผ TLS 1.2 ๋Œ€์‘
4.7
ECC๋ฅผ ์ด์šฉํ•œ ์•”ํ˜ธํ™” ๊ฐ•ํ™”, TLS 1.2 ๊ฐœ์„ , WPF์—์„œ ํ„ฐ์น˜ ๋ฐ ์Šคํƒ€์ผ๋Ÿฌ์Šค์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ง€์›, WPF๋ฅผ ์œ„ํ•œ ํ”„๋ฆฐํŠธ API ์ง€์›
4.8
UWP์˜ ํ”Œ๋ฃจ์–ธํŠธ ๋””์ž์ธ์„ ์œˆํผ, WPF์—์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ, ์œˆํผ์ด๋‚˜ WPF์—์„œ UWP์˜ ๋ชจ๋“  ์ปจํŠธ๋กค์„ ํ˜ธ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅ.

4. .NET Core[ํŽธ์ง‘]

.NET Core๋Š” ์œˆ๋„์šฐ ์™ธ์˜ ์šด์˜์ฒด์ œ๊ฐ€ ๋‹ท๋„ท์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ”„๋กœ์ ํŠธ. ๋ผ์ด์„ ์Šค๋Š” MIT ๋ผ์ด์„ ์Šค ๋ฐ ์•„ํŒŒ์น˜ ๋ผ์ด์„ ์Šค[12]์ด๋‹ค.

ํ”„๋กœํŽ˜์…”๋„ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ C#, ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๊ณ  ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๊ฐ•๋ ฅํ•œ Visual Basic.NET, ์—ฐ์‚ฐ์— ํŠนํ™”๋œ F#, ์ด ์„ธ๊ฐ€์ง€ ์–ธ์–ด๋กœ, ๋ฆฌ๋ˆ…์Šค, ๋งฅOS๋ฅผ ๊ฐœ๋ฐœ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์†Œ๋ฆฌ. ๊ทธ๋ฆฌ๊ณ  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์šฉ์œผ๋กœ ASP.NET Core๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ .NET Standard๋ฅผ ํ†ตํ•ด .NET Framework, Xamarin, Mono์— ํ˜ธํ™˜๋œ๋‹ค.

์œˆ๋„์šฐ ์™ธ์˜ ์šด์˜์ฒด์ œ์—์„œ๋„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ด์ง€๋งŒ, ์ปดํŒŒ์ผ ์‹œ ๊ฒฐ๊ณผ๋ฌผ์€ PE DLL ํŒŒ์ผ๋กœ ๋‚˜์˜จ๋‹ค. ์œˆ๋„์šฐ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ ์ปดํŒŒ์ผ ์‹œ EXE ํŒŒ์ผ๋„ ๋‚˜์˜ค์ง€๋งŒ, ์‹ค์ œ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฌผ์ธ DLL ํŒŒ์ผ์„ ๋กœ๋“œํ•˜์—ฌ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋ถˆ๊ณผํ•˜๋‹ค. DLL ํŒŒ์ผ์ด ์—†์œผ๋ฉด ๋‹น์—ฐํžˆ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

๋‹ค๋ฅธ ์šด์˜์ฒด์ œ๋“ค์€ ํ„ฐ๋ฏธ๋„๋กœ .NET Core ๋Ÿฐํƒ€์ž„์„ ์„ค์น˜ํ•œ ํ›„ dotnet (์‹คํ–‰ํ•  ๋‹ท๋„ท DLL ํŒŒ์ผ)๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ .NET Core๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ML.NET์ด๋ผ๋Š” ๊ธฐ๊ณ„ํ•™์Šต ํ”Œ๋žซํผ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ)๋„ ์กด์žฌํ•œ๋‹ค, ๊ทธ๋Ÿฐ๋ฐ ์ด์ƒํ•˜๊ฒŒ๋„ ๋ฆฌ๋ˆ…์Šค์—์„œ๋งŒ ์ง€์›๋œ๋‹ค.์•„๋‹ˆ ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์•ˆ๋ ๊ฑฐ๋ฉด ์™œ .NET Core๋ฅผ ์“ฐ๋Š”๊ฑด๋ฐ

๋ฒ„์ „ 3.0๋ถ€ํ„ฐ ๋“œ๋””์–ด GUI๋ฅผ ์ •์‹์œผ๋กœ ์ง€์›ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Windows๋งŒ ์ง€์›ํ•œ๋‹ค.
๊ธฐ์กด์—๋Š” CLI ๊ฐœ๋ฐœ๋งŒ ๊ฐ€๋Šฅ ํ–ˆ์—ˆ์ง€๋งŒ, 3.x ๋ฒ„์ „ ๋ถ€ํ„ฐ๋Š” Windows Form, WPF๋ฅผ ์ง€์›ํ•œ๋‹ค.

4.1. ์ง€์› ์–ธ์–ด[ํŽธ์ง‘]

4.2. ์š”๊ตฌ ์‚ฌํ•ญ[ํŽธ์ง‘]

2.0 ์ด์ƒ ๊ธฐ์ค€

4.2.1. Windows[ํŽธ์ง‘]

4.2.2. macOS[ํŽธ์ง‘]

4.2.3. ๋ฆฌ๋ˆ…์Šค[ํŽธ์ง‘]

  • Red Hat Enterprise Linux 7, 6 - 64๋น„ํŠธ
  • CentOS 7 - 64๋น„ํŠธ
  • Oracle Linux 7 - 64๋น„ํŠธ
  • Fedora 28, 27 - 64๋น„ํŠธ
  • Debian 9(64๋น„ํŠธ, arm32), 8.7 ์ด์ƒ ๋ฒ„์ „ - 64๋น„ํŠธ
  • Ubuntu 18.04(64๋น„ํŠธ, arm32), 16.04, 14.04, 64๋น„ํŠธ
  • Linux Mint 18, 17 - 64๋น„ํŠธ
  • openSUSE 42.3 ์ด์ƒ ๋ฒ„์ „ - 64๋น„ํŠธ
  • SUSE Enterprise Linux(SLES) 12 ์„œ๋น„์Šค ํŒฉ 2 ์ด์ƒ - 64๋น„ํŠธ
  • Alpine Linux 3.7 ์ด์ƒ ๋ฒ„์ „ - 64๋น„ํŠธ

4.3. ์ฐธ๊ณ [ํŽธ์ง‘]

5. ๊ธฐํƒ€[ํŽธ์ง‘]

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๊ณต๊ฐœ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์—ฌ๊ธฐ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. GitHub์—๋„ ์žˆ๋‹ค.#
  • .NET ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฐ”์ด๋Ÿฟ๊ณผ ๊ฐ™์€ ํŒŒ์ผ ๊ฐ์—ผํ˜• ๋ฐ”์ด๋Ÿฌ์Šค์— ๊ฐ์—ผ๋˜๋ฉด ์•„์˜ˆ ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.[14]
  • Any CPU ๊ธฐ๋Šฅ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ์šด์˜์ฒด์ œ 32, 64๋น„ํŠธ์— ๋งž๊ฒŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋กœ ๋“ค์–ด์„œ 64๋น„ํŠธ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋ฉด 64๋น„ํŠธ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ–‰๋˜๋Š” ์‹์ด๋‹ค. ๋‹ค๋งŒ 32/64 ๋น„ํŠธ C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜ธ์ถœ(32 ๋ฐ 64๋น„ํŠธ ๋ฒ„์ „ ๋Œ๋‹ค ์—†์„ ๊ฒฝ์šฐ)์ด๋‚˜ ์ผ๋ถ€ ์ฝ”๋“œ[15]๋Š” ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.
  • ํ•˜์œ„ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ๊ฐ™์ด ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. 3.5 ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ฉด 2.0์ด๋‚˜ 3.0๋„ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•œ๋ฐ, 3.5๋ฅผ ์„ค์น˜ํ•  ๋•Œ 2.0๊ณผ 3.0๋„ ๊ฐ™์ด ์„ค์น˜๋ผ์„œ ๊ทธ๋Ÿฐ ๊ฒƒ ๋ฟ์ด๋‹ค. ๊ทธ๋ž˜๋„ Windows 7๋ถ€ํ„ฐ๋Š” 3.5 SP1 ๋ฒ„์ „์ด ๊ธฐ๋ณธ ์„ค์น˜๋˜๋ฉฐ, Windows Update๋ฅผ ํ†ตํ•œ ์ž๋™ ์„ค์น˜๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋‹ด์ด ๋œํ•˜๋‹ค.
  • ์„ค์น˜๋ฅผ ๊ณ„์† ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ, ์•Œ๋ ค์ง„ ํ•ด๊ฒฐ์ฑ…์„ ์จ๋„ ํ•ด๊ฒฐ์ด ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. Windows๋ฅผ ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ๋‚œ ํ›„์— ์ด ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๋ฉด ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊น”์•„์„œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด๋ณด์ž. ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ฒ˜์Œ ์—…๊ทธ๋ ˆ์ด๋“œ ํ•  ๊ฒฝ์šฐ ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ „๋ถ€ ์‚ญ์ œ๋˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™” ๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ž์ฃผ ์žˆ์–ด์„œ ์ด๋Ÿฐ ๋“ฏ.
  • ํ”„๋ ˆ์ž„์›Œํฌ ์„ค์น˜๋‚˜ ์‚ฌ์šฉ ๊ณผ์ •์—์„œ ๋‚ฎ์€ ๋ฒ„์ „๊ณผ ์ƒ์œ„ ๋ฒ„์ „์ด ๊ผฌ์ด๋Š” ์˜ค๋ฅ˜ ๋“ฑ์œผ๋กœ๋„ ์„ค์น˜์‹คํŒจ๋‚˜ ์—๋Ÿฌ๊ฐ€ ๊ณ„์† ๋‚  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜๋ฉด ๊ฐœ๋ณ„ ๋ฒ„์ „์„ ์ง์ ‘ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ž˜๋„ ์•ˆ ๋˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” .NET Framework ํด๋ฆฐ ์ œ๊ฑฐ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์‹œ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค,
  • ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. .NET Framework๋Š” ์„ค์น˜ ์‹œ ์ปดํŒŒ์ผ๋Ÿฌ๋„ ๊ฐ™์ด ์„ค์น˜๋˜๋ฏ€๋กœ ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌ๋ˆ…์Šค, macOS, iOS, ์•ˆ๋“œ๋กœ์ด๋“œ ๋“ฑ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์œผ๋กœ ํฌํŒ…ํ•˜๋ ค๊ณ  ๋งŒ๋“ค์–ด์ง„ ์˜คํ”ˆ ์†Œ์ŠคํŒ๋“ค์ด ์กด์žฌํ•œ๋‹ค.
    • Mono ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฐ€์žฅ ์œ ๋ช…ํ•˜๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋œ ์ดˆ๊ธฐ์—๋Š” ๋ฆฌ์ฒ˜๋“œ ์Šคํ†จ๋จผ ๋“ฑ์ด Mono๋Š” ์ž ์žฌ์ ์œผ๋กœ MS์˜ ๊ณ ์†Œ ์œ„ํ˜‘์— ์‹œ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ ์“ฐ์ง€ ๋ง์•„์•ผ ํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•˜๊ธฐ๋„ ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์‚ฌํ‹ฐ์•„ ๋‚˜๋ธ๋ผ๊ฐ€ MS์˜ CEO๊ฐ€ ๋œ ์ดํ›„ ์˜คํ”ˆ ์†Œ์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ ๋Œ์–ด์•ˆ๊ธฐ์— ์ ๊ทน์ ์œผ๋กœ ๋‚˜์„œ๋ฉด์„œ MS๊ฐ€ ์„ธ์šด .NET Foundation๊ณผ MS๊ฐ€ ์ธ์ˆ˜ํ•œ Xamarin์ด ์•„์˜ˆ Mono์˜ ๊ณต์‹ ๊ฐœ๋ฐœ ํŒ€์ด ๋œ ์ƒํƒœ์ด๋‹ค. ์ด๋กœ์จ Mono ํ”„๋กœ์ ํŠธ๋Š” ๋ฒ•์  ๋ถ„์Ÿ ๊ฐ€๋Šฅ์„ฑ์ด ์ผ์†Œ๋˜์—ˆ์œผ๋ฉด์„œ .NET๊ณผ์˜ ํ˜ธํ™˜์„ฑ๋„ ํ™•์‹คํžˆ ๋ณด์žฅ๋˜๋Š” ํ™•์‹คํ•œ ์˜คํ”ˆ ์†Œ์ŠคํŒ์ด ๋˜์—ˆ๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
    • .NET Core๋ผ๋Š” ๋ฆฌ๋ˆ…์Šค์™€ macOS์—์„œ ์ปดํŒŒ์ผ๊ณผ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•œ Mono์™€ ๋ณ„๋„์˜ ์˜คํ”ˆ ์†Œ์Šค ํ”Œ๋žซํผ์ด ์กด์žฌํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ปดํŒŒ์ผ์„ ํ•  ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋ฌผ์ด PE๋กœ ๋‚˜์˜จ๋‹ค. ์ด๊ฒƒ๋„ .NET Foundation์ด ๊ฐœ๋ฐœ์„ ๋งก๊ณ  ์žˆ๊ณ  Mono ์ตœ์‹ ํŒ์— .NET Core๊ฐ€ ์ด์‹๋˜์—ˆ๋‹ค.
    • DotGNU๋ผ๋Š”, ํ•œ๋•Œ GNU ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์˜€์œผ๋‚˜ ํ˜„์žฌ๋Š” ์—ฌ๊ธฐ์„œ ์ œ์™ธ๋œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋„ ์žˆ๋‹ค.
  • .NET์œผ๋กœ ์šด์˜ ์ฒด์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค! ํ˜„์žฌ Cosmos๋ผ๋Š” C#์ด๋‚˜ VB.NET ๋“ฑ์œผ๋กœ ์šด์˜ ์ฒด์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ‚ท์ด GitHub์— ์˜ฌ๋ผ์™€ ์žˆ๋‹ค.[16]
  • ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ๊ฐ€ ๋นŒ๋“œ 2019 ์ปจํผ๋Ÿฐ์Šค์—์„œ 2020๋…„ 11์›” ๊ฒฝ์— ์ถœ์‹œ๋  ์˜ˆ์ •์ธ 5.0 ๋ฒ„์ „์—์„œ ํ˜„์žฌ๊นŒ์ง€ ์ถœ์‹œ๋œ .NET Framework์™€ .NET Core, Xamarin ๋“ฑ์ด ํ•˜๋‚˜์˜ ํ”Œ๋žซํผ์œผ๋กœ ํ•ฉ์ณ์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ๊ณ ํ–ˆ๋‹ค.# ์ •ํ™•ํžˆ๋Š” .NET Framework๋Š” ๋” ์ด์ƒ ์—…๊ทธ๋ ˆ์ด๋“œ ๋˜์ง€ ์•Š๊ณ  .NET Core๋งŒ ์—…๊ทธ๋ ˆ์ด๋“œ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋˜ํ•œ .NET Core๋Š” ๋„˜๋ฒ„๋ง์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด 3.0 ๋ฒ„์ „ ์ดํ›„ 4๋ฒˆ๋Œ€๋ฅผ ๋›ฐ์–ด๋„˜์—ˆ๊ณ , 4.8 ๋ฒ„์ „์ด ๊ธฐ์กด ๋‹ท๋„ท ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋งˆ์ง€๋ง‰ ๋ฉ”์ด์ € ๋ฒ„์ „์ด ๋˜์—ˆ๋‹ค.
  • 2019๋…„ 9์›” 1์ผ์— .NET Core๊ฐ€ 3.0์œผ๋กœ ์—…๋ฐ์ดํŠธ ๋˜๋ฉด์„œ .NET Core๋ฅผ ์‚ฌ์šฉํ•œ Windows Forms์™€ WPF์˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.
  • ์™€์ธ(์†Œํ”„ํŠธ์›จ์–ด)์—์„œ ๋‹ท๋„ท ๊ธฐ๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‹ค๋งŒ TmaxOS์˜ ๊ฒฝ์šฐ ํ˜ธํ™˜ ๋ ˆ์ด์–ด ์ž์ฒด๊ฐ€ ๋‹ท๋„ท์„ ์ง€์›ํ•˜์ง€ ์•Š์•„์„œ ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋นŒ๋“œ 2020 ์ปจํผ๋Ÿฐ์Šค์—์„œ Win32์™€ UWP๋กœ ํŒŒํŽธํ™”๋œ ์œˆ๋„์šฐ ์•ฑ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ์„ ํ†ตํ•ฉํ•˜๋Š” ํ”„๋กœ์ ํŠธ ๋ฆฌ์œ ๋‹ˆ์˜จ์ด ๊ณต๊ฐœ๋˜์—ˆ๋‹ค.

6. ๊ด€๋ จ ๋ฌธ์„œ[ํŽธ์ง‘]

[1] C#์˜ ๊ฒฝ์šฐ csc๋ผ๋Š” ์ด๋ฆ„์˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ตณ์ด ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•˜๊ธด ํ•˜๋‹ค.
[2] .NET Core ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ .dll ํŒŒ์ผ์„ ์ถœ๋ ฅํ•œ๋‹ค.
[3] ์ถœ์ฒ˜๋Š” MSDN ๋ฐ ์œ„ํ‚คํ”ผ๋””์•„
[4] ์ด ๋ฒ„์ „์€ .NET Framework ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค.
[5] Windows Presentation Foundation
[6] Windows Communication Foundation
[7] Windows Workflow Foundation
[8] Using Cardspace in Windows Communication Foundation
[9] C# 3.0 ๋ฐ Visual Basic .NET ๋“ฑ
[10] System.Numerics.BigInteger
[11] System.Numerics.Complex
[13] .NET Core 1.x๋งŒ ์ง€์›
[14] Nt ํ—ค๋” > ์˜ต์…”๋„ ํ—ค๋” > ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์Šค ๋ฉค๋ฒ„ ์ค‘์— ๋งจ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์— ๋‹ท๋„ท ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์œ„์น˜๋ž‘ ํฌ๊ธฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ PE(Portable Executable)๊ฐ€ ๋ณ€์กฐ๊ฐ€ ๋˜๋ฉด ๊ทธ ์œ„์น˜๊ฐ€ ๋ฐ”๋€Œ๊ฑฐ๋‚˜ ์›๋ž˜์˜ ํ”„๋กœ๊ทธ๋žจ EP(Entry Point)๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋˜์–ด ์‹คํ–‰์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
[15] Process.MainModule ๋“ฑ
[16] ์ปดํŒŒ์ผ๋กœ ๋‚˜์˜จ IL ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฒˆ์—ญ์‹œํ‚ค๋Š”๋ฐ, ๊ทธ๋ ‡๊ฒŒ ๋ฒˆ์—ญ ๊ณผ์ •์„ ๋งˆ์ณ์„œ ๋‚˜์˜จ ASM ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ MB ๋‹จ์œ„๋กœ ๋‚˜์˜จ๋‹ค.