Runtime: ์„ค๋ฌธ์กฐ์‚ฌ: ๋„ค์ดํ‹ฐ๋ธŒ AOT

์— ๋งŒ๋“  2020๋…„ 08์›” 06์ผ  ยท  55์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/runtime

์„ฑ๋Šฅ์€ .NET์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์กด ์˜ต์…˜์€ ์˜ค๋Š˜๋‚  .NET์ด ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„ ์ค‘ ์ผ๋ถ€๋Š” ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅธ ํŠน์„ฑ์„ ๊ฐ€์ง„ ๊ธฐ๋ณธ AOT ์ปดํŒŒ์ผ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋‹ฌ๋ผ๊ณ  ์š”์ฒญํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ AOT์˜ ๋šœ๋ ทํ•˜๊ฒŒ ๋‹ค๋ฅธ ํŠน์„ฑ์—๋Š” .NET ๋Ÿฐํƒ€์ž„ ํผ ํŒฉํ„ฐ ์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด ์žˆ๋Š” ๋‚ฎ์€ ํ˜ธํ™˜์„ฑ๊ณผ ๊ฐ™์€ ์ ˆ์ถฉ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ AOT ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฏธ๋ž˜๋ฅผ ์œ„ํ•œ ์˜ฌ๋ฐ”๋ฅธ ๊ณ„ํš์„ ์„ธ์šธ ์ˆ˜ ์žˆ๋„๋ก ์˜๊ฒฌ์„ ๋ณด๋‚ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ์‘๋‹ต์€ ์ต๋ช…์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์„ค๋ฌธ์กฐ์‚ฌ: https://www.surveymonkey.com/r/7THQK5K

์‹œ๊ฐ„ ๋‚ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

area-Meta

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

๊ฒŒ์‹œ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์กด ์˜ต์…˜์€ ์˜ค๋Š˜๋‚  .NET์ด ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

...

AOT๋Š” ์ฃผ๋กœ GUI ์•ฑ์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์ค‘์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•˜๋Š” webapp, ์„œ๋น„์Šค ๋“ฑ์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ตœ๊ณ ์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž UX๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฒŒ์ž„ ์—”์ง„ , ์„œ๋ฒ„๋ฆฌ์Šค ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค , ๋ฐ์Šคํฌํƒ‘ GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ , iOS ๋ฐ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, WASM ๊ธฐ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ์ธก SPA/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐ๋ณธ CLI ๋„๊ตฌ (~๋ช‡ MB)์— ์ •์  ๋งํฌ๊ฐ€ ํฌํ•จ๋œ AOT๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ C#์—์„œ ์œ„์˜ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹œ๋„ํ•˜๋ฉด์„œ ๋‚ด ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ AOT ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๊ณ  Rust์™€ ๊ฐ™์€ LLVM ๊ธฐ๋ฐ˜ ์–ธ์–ด์— ๋น„ํ•ด .NET์ด ๋งŽ์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ฒŒ์‹œ ์˜ต์…˜์ด "์ž˜ ์ž‘๋™"ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด์œ ๋Š” .NET์ด ์—ญ์‚ฌ์ ์œผ๋กœ ์œ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•˜์ง€ ์•Š์•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด C#์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฒด AOT(์˜ˆ: Unity, UWP, Mono)๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€(์˜ˆ: ReadyToRun)๋Š” ๋ชจ๋†€๋ฆฌ์‹ ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์Šคํฌํ†ฑ ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝœ๋“œ ์Šคํƒ€ํŠธ โ€‹โ€‹์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ "๋„์›€"์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๋Š” ์—ฌ์ „ํžˆ ์ „์ฒด AOT ๋Ÿฐํƒ€์ž„์ด ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ช‡ ๋ฐฐ ๋” ํฝ๋‹ˆ๋‹ค.

.NET์€ ์ด๋ฏธ ์„œ๋ฒ„๋ฆฌ์Šค/์ปจํ…Œ์ด๋„ˆํ™”๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๋Œ€ํ•ด "์ž˜ ์ž‘๋™"ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” AOT ์ปดํŒŒ์ผ, ๊ฐ์†Œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ ๋ฐ ์ตœ์†Œํ•œ์˜ ์ข…์†์„ฑ์œผ๋กœ ์ƒ๋‹นํ•œ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .
ํ˜„์žฌ ReadyToRun + Tiered Compilation + IL Linker ์†”๋ฃจ์…˜์€ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ AWS Lambda๊ฐ€ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ž์ฒด ํฌํ•จ๋œ ๋ฐฐํฌ์— ์„ฑ๊ฐ€์‹  ํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ์— ์ด๋ฏธ ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง„์งœ ๋ฌธ์ œ๋Š” IL2CPP/Burst(Unity), Mono์˜ AOT ๋ฐฑ์—”๋“œ(Xamarin/Blazor/Uno), .NET Native/CoreRT(UWP), Mono์˜ LLVM ๋ฐฑ์—”๋“œ, CrossGen/ReadyToRun(.NET Core) ๋“ฑ์ด๋ฉฐ .NET์— ํ‘œ์ค€ํ™”๋œ AOT ์ปดํŒŒ์ผ ๋„๊ตฌ ๋ชจ์Œ์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ํŒ€์ด CoreRT, Mono LLVM ๋ฐฑ์—”๋“œ ๋˜๋Š” ํ˜„์žฌ ๋ฒ„๋ ค์ง„ dotnet/lilic ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์— ๋Œ€ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ์„ ๊ฒฐํ•ฉํ–ˆ๋‹ค๋ฉด AOT๋Š” .NET ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ›จ์”ฌ ๋” ๋‚˜์€ ๊ฒฝํ—˜์ด ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AOT w/ static linking์€ ์ด์ œ ๋Œ€์ค‘์„ ์œ„ํ•œ CI/CD๋ฅผ ํ†ตํ•ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋” ์ด์ƒ ์„ฑ๋Šฅ์ด ๋ฏธ๋ฏธํ•œ ์ฆ๊ฐ€์— ๋Œ€ํ•œ ์„ฑ๊ฐ€์‹ฌ์ด ์•„๋‹™๋‹ˆ๋‹ค.

C# endgame: ๊ธฐ๋ณธ ์ฝ”๋“œ, ๊ธฐ๋ณธ UI, ๋น ๋ฅด๊ณ  ์‰ฌ์šด ์ƒํ˜ธ ์šด์šฉ์„ฑ, ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ์„ฑ๋Šฅ ์ง€ํ–ฅ API(์˜ˆ: System.IO.Pipelines, System.Text.Json).

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

์ด ๋ฌธ์ œ์— ์ถ”๊ฐ€ํ•  ์ตœ์ ์˜ ์ง€์—ญ ๋ ˆ์ด๋ธ”์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ์˜์—ญ ๋ ˆ์ด๋ธ” ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ์„ธ์š”.

์˜คํƒ€์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. - * 9. Which of these tasks are apart of your production debugging workflow? (Please select all that apply) "~์˜ ์ผ๋ถ€"๋ผ๊ณ  ํ•ด์•ผ ํ• ๊นŒ์š”?

์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ฒŒ ๋˜์–ด ์ •๋ง ๊ธฐ์ฉ๋‹ˆ๋‹ค! ๐Ÿ˜„๐Ÿš€

์งˆ๋ฌธ: .NET ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ ์ฒด์ธ์œผ๋กœ ์ž‘์—…ํ•œ UWP ๊ฐœ๋ฐœ์ž์˜ ๊ฒฝ์šฐ ์ด์ „์— CoreRT๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๋งํ•˜๊ฑฐ๋‚˜ .NET ๋„ค์ดํ‹ฐ๋ธŒ๊ฐ€ CoreRT์™€ ๋งŽ์€ ์œ ์‚ฌ์ (์ผ๋ถ€ ๊ณต์œ  ์ฝ”๋“œ๋„ ํฌํ•จ)์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค๋ฌธ์กฐ์‚ฌ์— ์‘๋‹ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋…ธํŠธ์—์„œ ์ด๊ฒƒ์„ ์–ธ๊ธ‰ํ•œ ๋‹ค์Œ .NET Native์— ๋Œ€ํ•œ ๊ฒฝํ—˜๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋‹ค๋ฅธ CoreRT ์งˆ๋ฌธ์— ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค”

@ Sergio0694 UWP ์งˆ๋ฌธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฐธ๊ณ ๋กœ ์–ธ๊ธ‰ํ•˜๊ณ  ์˜คํ”ˆ ์†Œ์Šค ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ corert์— ํšŒ์‹ ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์„ค๋ฌธ ์กฐ์‚ฌ๋ฅผ ๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

.NET ๋„ค์ดํ‹ฐ๋ธŒ๋งŒ ์‚ฌ์šฉํ•ด ์˜จ UWP ๊ฐœ๋ฐœ์ž๋กœ์„œ ํŠน์ • ์งˆ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๋Œ€๋‹ตํ•ด์•ผ ํ• ์ง€ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. UWP์˜ .NET ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ ๋ชจ์Œ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์ ์–ด ๋‘˜ ๊ณณ์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ด ์„ค๋ฌธ์กฐ์‚ฌ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด๋ฉด ๊ดœ์ฐฎ์ง€๋งŒ ๋ช…ํ™•ํžˆ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ".NET Native๊ฐ€ UWP ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๊ณ  Store์—์„œ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—"๊ฐ€ ์•„๋งˆ๋„ ์‚ฌ๋žŒ๋“ค์ด AOT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ด์œ ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์งˆ๋ฌธ 5์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ฑ„์›Œ์ง„ ๋‹ต๋ณ€ ์ค‘ ํ•˜๋‚˜๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

GUI ์˜ต์…˜์— Avalonia๋ฅผ ํฌํ•จ์‹œ์ผœ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :) ์šฐ๋ฆฌ๋Š” ์ด์ „์— CoreRT+Avalonia๋ฅผ ์‹คํ—˜ํ–ˆ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋Š” ๋ฉ‹์ง„ ๋„ค์ดํ‹ฐ๋ธŒ GUI ์•ฑ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

.net์—์„œ ์ข…์ข… ์žŠํ˜€์ง€๋Š” ๋ถ€๋ถ„์€ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ํ”Œ๋žซํผ์—์„œ JIT ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ˜์†”์ด๋‚˜ IOS ์žฅ์น˜๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
.net ์ƒํƒœ๊ณ„์˜ ์ผ๋“ฑ ์‹œ๋ฏผ์œผ๋กœ์„œ .net ๋„ค์ดํ‹ฐ๋ธŒ AOT๋ฅผ ์–ป๋Š” ๊ฒƒ์€ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์˜ ๋ฏธ๋ž˜๋ฅผ ์œ„ํ•ด ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ถ€ ๊ฒŒ์ž„ ์—”์ง„์€ ์ž์ฒด AOT๋ฅผ ์‹คํ–‰ํ–ˆ์ง€๋งŒ(์˜ˆ๋ฅผ ๋“ค์–ด Unity๋Š” il2cpp๋กœ ์ˆ˜ํ–‰), ์ด๋Š” ์ ˆ๋Œ€์ ์ธ ๋‚œํŒŒ์„ ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ณต์‹ ์†”๋ฃจ์…˜์€ ํ™˜์˜ํ•  ๋งŒํ•œ ๊ฒƒ ์ด์ƒ์ž…๋‹ˆ๋‹ค. ์—…๊ณ„๋ฅผ ๋ฐ”๊พธ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒŒ์ž„ ์‚ฐ์—…์ด ์ˆ˜์ต๊ณผ ๋งค์ถœ ๋ชจ๋‘์—์„œ ์˜ํ™” ์‚ฐ์—…์„ ์ถ”์›”ํ•˜๊ณ  ์žˆ์Œ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
์ฝ˜์†”์€ ์ฃผ์š” ์ˆ˜์ต์ด ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์กด ์˜ต์…˜์€ ์˜ค๋Š˜๋‚  .NET์ด ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

...

AOT๋Š” ์ฃผ๋กœ GUI ์•ฑ์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง‘์ค‘์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•˜๋Š” webapp, ์„œ๋น„์Šค ๋“ฑ์ด ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ตœ๊ณ ์˜ ์ตœ์ข… ์‚ฌ์šฉ์ž UX๋ฅผ ์œ„ํ•ด์„œ๋Š” ๊ฒŒ์ž„ ์—”์ง„ , ์„œ๋ฒ„๋ฆฌ์Šค ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค , ๋ฐ์Šคํฌํƒ‘ GUI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ , iOS ๋ฐ Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, WASM ๊ธฐ๋ฐ˜ ํด๋ผ์ด์–ธํŠธ ์ธก SPA/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๊ธฐ๋ณธ CLI ๋„๊ตฌ (~๋ช‡ MB)์— ์ •์  ๋งํฌ๊ฐ€ ํฌํ•จ๋œ AOT๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ C#์—์„œ ์œ„์˜ ๋ชจ๋“  ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์‹œ๋„ํ•˜๋ฉด์„œ ๋‚ด ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ AOT ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๊ณ  Rust์™€ ๊ฐ™์€ LLVM ๊ธฐ๋ฐ˜ ์–ธ์–ด์— ๋น„ํ•ด .NET์ด ๋งŽ์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ฒŒ์‹œ ์˜ต์…˜์ด "์ž˜ ์ž‘๋™"ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด์œ ๋Š” .NET์ด ์—ญ์‚ฌ์ ์œผ๋กœ ์œ„์˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ํ•ฉํ•˜์ง€ ์•Š์•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด C#์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฒด AOT(์˜ˆ: Unity, UWP, Mono)๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ด๋ฏธ์ง€(์˜ˆ: ReadyToRun)๋Š” ๋ชจ๋†€๋ฆฌ์‹ ์„œ๋ฒ„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ๋Œ€๊ทœ๋ชจ ๋ฐ์Šคํฌํ†ฑ ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝœ๋“œ ์Šคํƒ€ํŠธ โ€‹โ€‹์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ "๋„์›€"์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๋Š” ์—ฌ์ „ํžˆ ์ „์ฒด AOT ๋Ÿฐํƒ€์ž„์ด ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ช‡ ๋ฐฐ ๋” ํฝ๋‹ˆ๋‹ค.

.NET์€ ์ด๋ฏธ ์„œ๋ฒ„๋ฆฌ์Šค/์ปจํ…Œ์ด๋„ˆํ™”๋œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ๋Œ€ํ•ด "์ž˜ ์ž‘๋™"ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” AOT ์ปดํŒŒ์ผ, ๊ฐ์†Œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ ๋ฐ ์ตœ์†Œํ•œ์˜ ์ข…์†์„ฑ์œผ๋กœ ์ƒ๋‹นํ•œ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .
ํ˜„์žฌ ReadyToRun + Tiered Compilation + IL Linker ์†”๋ฃจ์…˜์€ ๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๋ฌผ์—์„œ AWS Lambda๊ฐ€ ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ž์ฒด ํฌํ•จ๋œ ๋ฐฐํฌ์— ์„ฑ๊ฐ€์‹  ํŒŒ์ผ ํฌ๊ธฐ ์ œํ•œ์— ์ด๋ฏธ ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง„์งœ ๋ฌธ์ œ๋Š” IL2CPP/Burst(Unity), Mono์˜ AOT ๋ฐฑ์—”๋“œ(Xamarin/Blazor/Uno), .NET Native/CoreRT(UWP), Mono์˜ LLVM ๋ฐฑ์—”๋“œ, CrossGen/ReadyToRun(.NET Core) ๋“ฑ์ด๋ฉฐ .NET์— ํ‘œ์ค€ํ™”๋œ AOT ์ปดํŒŒ์ผ ๋„๊ตฌ ๋ชจ์Œ์ด ์—†๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๋ชจ๋“  ํŒ€์ด CoreRT, Mono LLVM ๋ฐฑ์—”๋“œ ๋˜๋Š” ํ˜„์žฌ ๋ฒ„๋ ค์ง„ dotnet/lilic ๊ณผ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์— ๋Œ€ํ•œ ์—”์ง€๋‹ˆ์–ด๋ง ๋…ธ๋ ฅ์„ ๊ฒฐํ•ฉํ–ˆ๋‹ค๋ฉด AOT๋Š” .NET ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ›จ์”ฌ ๋” ๋‚˜์€ ๊ฒฝํ—˜์ด ๋˜์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

AOT w/ static linking์€ ์ด์ œ ๋Œ€์ค‘์„ ์œ„ํ•œ CI/CD๋ฅผ ํ†ตํ•ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋” ์ด์ƒ ์„ฑ๋Šฅ์ด ๋ฏธ๋ฏธํ•œ ์ฆ๊ฐ€์— ๋Œ€ํ•œ ์„ฑ๊ฐ€์‹ฌ์ด ์•„๋‹™๋‹ˆ๋‹ค.

C# endgame: ๊ธฐ๋ณธ ์ฝ”๋“œ, ๊ธฐ๋ณธ UI, ๋น ๋ฅด๊ณ  ์‰ฌ์šด ์ƒํ˜ธ ์šด์šฉ์„ฑ, ๊ธฐ๋ณธ ๋‚ด๋ณด๋‚ด๊ธฐ ๋ฐ ์„ฑ๋Šฅ ์ง€ํ–ฅ API(์˜ˆ: System.IO.Pipelines, System.Text.Json).

๋‚˜๋Š” webapps๊ฐ€ ์ด๊ฒƒ์œผ๋กœ๋ถ€ํ„ฐ ์ด์ต์„ ์–ป์ง€ ๋ชปํ•  ๊ฒƒ์ด๋ผ๋Š” ์ง„์ˆ ์— ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AOT๋Š” ์„œ๋ฒ„๋ฆฌ์Šค ์›Œํฌ๋กœ๋“œ(Azure Functions๋ผ๊ณ ๋„ ํ•จ)์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. CLI ๋„๊ตฌ์— ๋Œ€ํ•œ ์‹œ์ž‘ ์‹œ๊ฐ„์˜ ์ด์ ์€ ๋งํ•  ๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค.

์„ค๋ฌธ ์กฐ์‚ฌ์— ๋‹ต๋ณ€ํ–ˆ์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ .NET Core 1.0์ด ์‹œ์ž‘๋œ ์ดํ›„๋กœ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๋ฐฉํ–ฅ ์—†์ด๋Š” ์ด๋Ÿฌํ•œ ์ง€์†์ ์ธ ์„ค๋ฌธ ์กฐ์‚ฌ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

.NET ๋„ค์ดํ‹ฐ๋ธŒ๋Š” Ext-VOS ํ”„๋กœ์ ํŠธ๊ฐ€ ์‹œ์ž‘๋˜์—ˆ์„ ๋•Œ .NET์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด์—ˆ๊ณ , Singularity์™€ Midori์˜ ๊ฒฝํ—˜์ด ์žˆ์–ด ์—ฌ๋Ÿฌ๋ถ„์ด ํ™•์‹คํžˆ ๊ณต๊ฐํ•˜๊ฑฐ๋‚˜ ๋‚ด๋ถ€ ์„œ๋ฒ„๋ฅผ ํ™•๋ณดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

Java์กฐ์ฐจ๋„ ํŒ€์—์„œ ๋ˆ„๋ฝ๋œ AOT ๊ธฐ๋Šฅ์„ ๋”ฐ๋ผ์žก๊ธฐ ์œ„ํ•ด ์–ด๋–ค ์›Œํฌ๋กœ๋“œ๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š”์ง€ ๋ฌป์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

.NET ๋ฆด๋ฆฌ์Šค ์ดํ›„ ์ฝ”๋“œ ํ’ˆ์งˆ ์ƒ์„ฑ์ด ๊ฐœ์„ ๋˜์ง€ ์•Š์•˜๊ณ  ๋ฐฐํฌ ์›Œํฌํ”Œ๋กœ๊ฐ€ ๋‹ค๋ฅธ AOT ์ปดํŒŒ์ผ ์–ธ์–ด์— ๋น„ํ•ด ๊ณ ํ†ต์Šค๋Ÿฝ๊ธฐ ๋•Œ๋ฌธ์— NGEN์„ ๊ฑฐ์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์•ž์œผ๋กœ AOT๊ฐ€ .NET์—์„œ ๋‹ค์‹œ ์‚ญ์ œ๋˜๋ฉด ๊ด€๋ฆฌ๋˜๋Š” ์–ธ์–ด์˜ ๋ชจ๋“  ๊ฒฝ์Ÿ์ด ์ด์ œ AOT ๋„๊ตฌ ์ฒด์ธ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์œผ๋ฉฐ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์›Œํฌํ”Œ๋กœ๋„ ๋ฌป์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ €๋Š” .NET์ด ๊ณ„์†ํ•ด์„œ ๋ฒˆ์ฐฝํ•˜๊ณ  ์‹œ๋‚˜๋ฆฌ์˜ค์— ๊ด€๊ณ„์—†์ด ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์ด ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Microsoft๊ฐ€ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ AOT ์ปดํŒŒ์ผ ์–ธ์–ด์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋Š” C++๋ฅผ .NET๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์š”ํ•˜๋Š” ์›Œํฌํ”Œ๋กœ๋ฅผ ์ธ์ˆ˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์„ค๋ฌธ ์กฐ์‚ฌ์— ๋‹ต๋ณ€ํ–ˆ์ง€๋งŒ ์†”์งํžˆ ๋งํ•ด์„œ .NET Core 1.0์ด ์‹œ์ž‘๋œ ์ดํ›„๋กœ ์ง„ํ–‰ ์ƒํ™ฉ์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ๋ฐฉํ–ฅ ์—†์ด๋Š” ์ด๋Ÿฌํ•œ ์ง€์†์ ์ธ ์„ค๋ฌธ ์กฐ์‚ฌ๋ฅผ ๋ฐ›์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

MS๊ฐ€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ์ง€์‹œํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์†Œ๋ฆฌ์— ๊ท€๋ฅผ ๊ธฐ์šธ์ด๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์€ ๋Œ€๋‹จํ•œ ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@jkotas ์ด ์„ค๋ฌธ์กฐ์‚ฌ์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋งํฌ๊ฐ€ ํผ์ง„ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ?
https://www.surveymonkey.com/r/7THQK5K
https://www.surveymonkey.com/r/SQV8JQK

@texasbruce ๋Š” ํฌ๋กœ์Šค ํ”Œ๋žซํผ GUI, WCF ๋ฐ EF ๋„๊ตฌ ์ง€์›์— ๊ด€ํ•œ ์œ ์‚ฌํ•œ ์„ค๋ฌธ ์กฐ์‚ฌ์— ์‘๋‹ตํ•œ ๋™๋ฃŒ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ๋„์›€์ด ๋˜์—ˆ๋Š”์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ทธ๋“ค์ด ์šฐ๋ฆฌ์—๊ฒŒ ๋ฌป๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ ์‹ค์ œ๋กœ ํ–‰๋™์ด ์ผ์–ด๋‚  ๋•Œ ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ GUI์˜ ๊ฒฝ์šฐ์—๋„ MAUI๊ฐ€ ์‹ค์ œ๋กœ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด Web Widgets์˜ Blazor๊ฐ€ ์†”๋ฃจ์…˜์œผ๋กœ ๋ฐ€๋ ค๋‚ ์ง€๋Š” ๋‘๊ณ  ๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ํ—ˆ์šฉ๋˜๋Š” ์œ ์ผํ•œ AOT ์†”๋ฃจ์…˜์€ ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ JIT๊ฐ€ ์ „ํ˜€ ์—†๋Š” ์ง„์ •ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ƒ์„ฑํ•˜๊ณ (๋ณ‘๋ ฌ ์†”๋ฃจ์…˜ ๋ณ„์นญ์ด ์‹คํ–‰ ์ค€๋น„๊ฐ€ ๋˜์ง€ ์•Š์Œ) ๋ชจ๋“ ยน .NET ํ”„๋กœ์ ํŠธ์—์„œ ์ž‘๋™ํ•  ๋•Œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผœ์ง. ์—ฌ๊ธฐ์—๋Š” ํŠนํžˆ Winforms ๋ฐ WPF๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๊ฒฝ์šฐ์—๋Š” 3MB์—์„œ 80MB๋กœ ํ™•์žฅ๋˜์ง€ ์•Š๊ณ  ๋Ÿฐํƒ€์ž„ ์ข…์†์„ฑ ์—†์ด ๋…๋ฆฝ ์‹คํ–‰ํ˜•์œผ๋กœ๋„ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ยน ๊ธฐ์ˆ ์ ์ธ ์ด์œ ๋กœ AOT๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋ก€/apis๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "๋ชจ๋‘์—"๋ผ๋Š” ๊ฒƒ์€ ๋ชจ๋“  API๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ชจ๋“  ํ”„๋กœ์ ํŠธ ์ข…๋ฅ˜๋ฅผ ์ง€์›ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. .NET Core๋Š” ๋‹ค์Œ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. dll / winforms / wpf / winui / console / maui / ... ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์กด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ธ์ˆ˜ํ•˜๋Š” ๊ฒƒ์ด ์ œ๊ฐ€ ์—ผ๋‘์— ๋‘๊ณ  ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

_๋˜ํ•œ Delphi๋กœ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ–ˆ๋Š”๋ฐ ๋‹จ์ผ Delphi ์‹คํ–‰ ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•œ ๋‹ค์Œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ๋‚ด๋ณด๋‚ด๋ฉด ๊ทธ๋ƒฅ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค. ํŠน์ • ๋ฐฉ์‹์œผ๋กœ ์ปดํŒŒ์ผํ•  ๋•Œ C++ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ชจ๋‘ ๋””๋ฒ„๊ทธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ PDB๋ฅผ ํฌํ•จํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ๋•Œ ๋‘ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋‘ ์—ฌ์ „ํžˆ ์œ ์šฉํ•œ ์Šคํƒ ์ถ”์ /๋คํ”„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ณด์•ˆ์ƒ์˜ ์ด์œ ๋กœ ํฌํ•จํ•˜์ง€ ์•Š๋„๋ก ๊ฒฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์™œ ์šฐ๋ฆฌ๋Š” C#์œผ๋กœ ๊ทธ๊ฒƒ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š”์ง€ ์Šค์Šค๋กœ์—๊ฒŒ ๋ฌป๋Š” ๊ฒƒ์ด ๊ณคํ˜น์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. AOT ๊ณ„ํš์„ ๋“ค์—ˆ์„ ๋•Œ ๋‚˜๋Š” ์ด๊ฒƒ์„ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค._

์ €๋Š” ํ•ญ์ƒ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ASP.net ์ฝ”์–ด๊ฐ€ ํฐ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

AOT๊ฐ€ ์–ด๋ ค์šด ์š”๊ตฌ ์‚ฌํ•ญ์ธ ๋Œ€๋ถ€๋ถ„์˜ ์žฅ์†Œ๋Š” CLI ๋„๊ตฌ, ๊ฒŒ์ž„ ๋ฐ UI ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฌํ•จํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ถ€ ๋ฐ˜์‚ฌ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์ˆœ์œ„๋Š” "ํด๋ฆฐ ์Šฌ๋ ˆ์ดํŠธ" ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ํ•ญ์ƒ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ASP.net ์ฝ”์–ด๊ฐ€ ํฐ ์‹คํ–‰ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๊ทธ๋ ‡๊ฒŒ ๋งŽ์ด ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Blazor WebAssembly๊ฐ€ ์ถœ์‹œ๋˜๋ฉด์„œ ์‹คํ–‰ ํŒŒ์ผ ํฌ๊ธฐ์™€ ์‹คํ–‰ ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•ด์งˆ ๊ฒƒ์ด๋ฉฐ AOT์˜ ์ด์ ์„ ํฌ๊ฒŒ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์–ด๋–ค ์ด์œ ๋กœ ๋“  ์„ค๋ฌธ ์กฐ์‚ฌ์—์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ์–ธ๊ธ‰๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด์˜๊ฒŒ ์ฃผ์„ธ์š”! ๋ฉ”๋ชจ๋ฆฌ ์•ˆ์ „์„ ์œ ์ง€ํ•˜๊ณ  ๊ธฐ๋ณธ ์†๋„๋ฅผ ์–ป๊ณ  ๋‚ด ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ณธ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Rust ๋˜๋Š” CoreRT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ .NET์—์„œ AOT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํ’๋ถ€ํ•˜๊ณ  ๊ฐ•๋ ฅํ•˜๋ฉฐ Rust๊ฐ€ ํ™˜์ƒ์ ์ด์ง€๋งŒ ์ „ํ™˜ํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ™˜์ƒ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jkotas ์ด ์„ค๋ฌธ์กฐ์‚ฌ์— ๋Œ€ํ•œ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๋งํฌ๊ฐ€ ํผ์ง„ ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๋‹ค๋ฅธ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ SurveyMonkey ๋งํฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋งํฌ๋Š” ๋™์ผํ•œ ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ๋“ค์ด ์„ค๋ฌธ์กฐ์‚ฌ๋ฅผ ์ฐพ์€ ์œ„์น˜์— ๋”ฐ๋ผ ์‘๋‹ต ๋ถ„ํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋‹ฌ๋ผ์ง€๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

gamedev๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” C++๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์—”์ง„์— ์ฐฌ์„ฑํ•˜์—ฌ ๋‚ด ๊ฒŒ์ž„ ์—”์ง„ https://github.com/amerkoleci/alimer_sharp ์ž‘์—…์„ ์ผ์‹œ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. DirectX ๋ฐ vulkan์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ๋„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์„ฑ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

gamedev๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” C++๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์—”์ง„์— ์ฐฌ์„ฑํ•˜์—ฌ ๋‚ด ๊ฒŒ์ž„ ์—”์ง„ https://github.com/amerkoleci/alimer_sharp ์ž‘์—…์„ ์ผ์‹œ ์ค‘๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. DirectX ๋ฐ vulkan์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ๋„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์„ฑ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ผ์‹œ ์ค‘๋‹จํ•˜์ง€ ์•Š์•˜๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด ์—ฌ๊ธฐ ๐Ÿ˜„์™€ ๋™์ผํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋” ๋‚˜์€ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์œ„ํ•ด AOT๋ฅผ ์ข‹์•„ํ•˜์ง€๋งŒ(๋‚ด ๊ฒฝ์šฐ์—๋Š” ๋” ์ค‘์š”ํ•˜๊ฒŒ๋„) ๋” ์ตœ์ ํ™”๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. t ์ •๋ง JIT์˜ ํƒœ๋„

10% ์†๋„ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋นŒ๋“œ ์‹œ๊ฐ„์ด 50% ์ฆ๊ฐ€ํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋ถ„๋ช…ํžˆ JIT์˜ ํƒœ๋„๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์ƒํƒœ๊ณ„๋กœ ์ „ํ™˜ํ•˜๋Š” ๋Œ€์‹  .NET์—์„œ AOT๋ฅผ ์›ํ•˜๋Š” ํฐ ๋ถ€์ฐจ์ ์ธ ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๋Œ€๊ทœ๋ชจ C++ ๋˜๋Š” Rust ํ”„๋กœ์ ํŠธ์™€ ๋น„๊ตํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ .NET ํ”„๋กœ์ ํŠธ์˜ ๋น ๋ฅธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์— ์™„์ „ํžˆ ๋ง์ณค์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ์ค‘ ๋น ๋ฅธ ๋ฐ˜๋ณต์„ ์œ„ํ•ด JIT๋ฅผ ์›ํ•˜์ง€๋งŒ ์ผ๋‹จ ๊ณ ๊ฐ์—๊ฒŒ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐฐ์†กํ•˜๋ฉด AOT๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

CoreRT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋กœ์Šค ํ”Œ๋žซํผ(๋ฐ ํฌ๋กœ์Šค ํ”Œ๋žซํผ) ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

AOT w/ static linking์€ jit๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์—ฌ๋Ÿฌ aot ์ปดํŒŒ์ผ ๋ชจ๋“œ๋ฅผ ์›ํ•˜๋Š” iOS ๋ฐ ์ฝ˜์†” ํ”Œ๋žซํผ์˜ ๊ฒŒ์ž„ ์—”์ง„์— ๊ธด๊ธ‰ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ์™„์ „ํ•œ
  2. jit + aot ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ + aot ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ aot
    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ot๋Š” ๊ฒŒ์ž„ ์‚ฐ์—…์— ์ •๋ง ์ค‘์š”ํ•˜๋ฉฐ ๊ฒŒ์ž„ ์ฒด์ธ์ €๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AOT w/ static linking์€ jit๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๊ณ  ์—ฌ๋Ÿฌ aot ์ปดํŒŒ์ผ ๋ชจ๋“œ๋ฅผ ์›ํ•˜๋Š” iOS ๋ฐ ์ฝ˜์†” ํ”Œ๋žซํผ์˜ ๊ฒŒ์ž„ ์—”์ง„์— ๊ธด๊ธ‰ํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  1. ์™„์ „ํ•œ
  2. jit + aot ๋˜๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ + aot ์‹คํ–‰ ๋ชจ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ํ•˜์ด๋ธŒ๋ฆฌ๋“œ aot
    ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ot๋Š” ๊ฒŒ์ž„ ์‚ฐ์—…์— ์ •๋ง ์ค‘์š”ํ•˜๋ฉฐ ๊ฒŒ์ž„ ์ฒด์ธ์ €๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

iOS ํ”Œ๋žซํผ์˜ ๋ชจ๋…ธ, ot+์ธํ„ฐํ”„๋ฆฌํ„ฐ ์‹คํ–‰ ๋ชจ๋“œ์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Full Aot, ๋‹จ์ผ exe, ๋…๋ฆฝ ๋Ÿฐํƒ€์ž„ ๋ฐ ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ ํด๋ฆฌํ•‘์œผ๋กœ ์ธํ•ด ํ™•์‹คํžˆ kreygasm XD

๋‚˜๋Š” 10๋…„ ๋™์•ˆ ์ด ์งˆ๋ฌธ์„ ๊ธฐ๋‹ค๋ ค์™”๋‹ค. ์  ์žฅ, ๋‚˜๋Š” ํ•˜๋“œ ๋“œ๋ผ์ด๋ธŒ์— ๋จผ์ง€๋ฅผ ๋ชจ์œผ๋Š” 5๊ฐœ์˜ ๋ฉ‹์ง„ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ๊ณต๊ฐœํ•˜๋ฉด ์–ด๋–ค ์–ด๋ฆฐ์ด๋ผ๋„ ๊ทธ๊ฒƒ์„ ๋˜๋Œ๋ฆด ์ˆ˜ ์žˆ๊ณ  GUI์— ์•ฝ๊ฐ„์˜ ๋ณ€๊ฒฝ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์ž์‹ ์˜ ๊ฒƒ์œผ๋กœ ํŒ๋งคํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ €๋Š” PC ํ”Œ๋žซํผ์—์„œ Unity๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Robocraft, Cardlife ๋ฐ Gamecraft๋ฅผ ๊ฐœ๋ฐœํ–ˆ์œผ๋ฉฐ ๊ฒŒ์ž„ ์„œ๋ฒ„์—์„œ๋„ ํ•„์š”ํ•˜์ง€ ์•Š์€ ํ•œ(Xbox one ์ฝ๊ธฐ) ํ•„์š”ํ•˜์ง€ ์•Š๋Š” ํ•œ IL2CPP๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์„ฑ๋Šฅ์ด ํ•„์š”ํ•  ๋•Œ JIT ์ปดํŒŒ์ผ๊ณผ ๋ฒ„์ŠคํŠธ(๋ช…์‹œ์  ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ)์™€ ๊ฐ™์€ ์†”๋ฃจ์…˜์ด ํ˜ผํ•ฉ๋˜์–ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ AOT๋Š” ์™„์ „ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•œ ํ”Œ๋žซํผ๊ณผ ํ•˜๋“œ์›จ์–ด ๋ฆฌ์†Œ์Šค๊ฐ€ ์†Œ์ค‘ํ•œ ํ”Œ๋žซํผ์— ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. .net ํ”Œ๋žซํผ ๊ฐœ๋ฐœ์ž๊ฐ€ AOT์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์—‡๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜์ง€๋งŒ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—์„œ ๋” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์ฑ„ํƒ๋˜๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋ฉด ์„ ํƒ ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์†”์งํžˆ ๋งํ•ด์„œ Unity๊ฐ€ IL2CPP ๋ฐ Burst์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ๋…์ ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ์กฐ๊ธˆ ๋‘๋ ต์Šต๋‹ˆ๋‹ค.

๊ณ ์„ฑ๋Šฅ, ๊ณ ํ™•์žฅ์„ฑ ๊ธˆ์œต/๊ณผํ•™ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๊ฐœ๋ฐœํ•ฉ๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ด์…˜์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ๋ชจ๋ธ์˜ ๋ณต์žก์„ฑ์— ๋”ฐ๋ผ ๋ช‡ ๋ถ„์—์„œ ๋ฉฐ์น ๊นŒ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹œ๋ฎฌ๋ ˆ์ด์…˜ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์— ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ์†Œํ”„ํŠธ์›จ์–ด/๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๋Š” ๊ฑฐ์˜ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์ ์—์„œ ์ œํ’ˆ์„ ์„ค์น˜ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๋„ ์•„๋‹™๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ปดํŒŒ์ผ์ด ์„ค์น˜์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ค๋žœ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋”๋ผ๋„ ์™„์ „ํžˆ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ์ค‘ ์ฝ”๋“œ์˜ ์•ฝ 25%๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ฐฉ์‹์ด ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค. AOT์™€ JIT ์ปดํŒŒ์ผ์˜ ์ผ๋ถ€ ์กฐํ•ฉ. ๋™์  ๋น„ํŠธ๋ฅผ ํ•ด์„ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ ์–ด๋„ ์šฐ๋ฆฌ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” AOT์˜ ์ด์ ์ด ๋งŽ์ด ์ค„์–ด๋“ค ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

GC๋Š” ๋” ๋†’์€ ํ™•์žฅ์„ฑ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ๋ฐฉํ•ด๊ฐ€ ๋˜๋Š” ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค(์˜ˆ: ์•ฝ 44๊ฐœ์˜ ์ฝ”์–ด๋ฅผ ํ™•๋ณดํ•œ ๊ฒฝ์šฐ). ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋” ์‹ฌ๋„ ์žˆ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ๊ฐ„ ์ตœ์ ํ™”, ์ ๊ทน์ ์ธ ์ธ๋ผ์ธ ๋ฐ ์ด์Šค์ผ€์ดํ”„ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ฉด ํž™ ๋Œ€์‹  ์Šคํƒ์— ๋” ์งง์€ ์ˆ˜๋ช…์˜ ๊ฐœ์ฒด๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์—๋Š” JIT ์ฝ”๋“œ ํ’ˆ์งˆ์ด ํŠนํžˆ ๋ ˆ์ง€์Šคํ„ฐ ํ• ๋‹น๊ณผ ๋งŽ์€ ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด JIT ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์กฐ์ž‘ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์ผ์„ ํ•˜๊ฑฐ๋‚˜(์—ฐ์•ฝํ•˜๊ณ , ๋‚œ๋…ํ™”๋˜๋ฉฐ, ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ค์šด ์ค„๋‹ค๋ฆฌ๊ธฐ) ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ „ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ GC/PInvoke ์ „ํ™˜์˜ ์˜ค๋ฒ„ํ—ค๋“œ).

๋•Œ๋กœ๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ์˜ ์ž‘์€ ๊ฐœ์„ ์ด ์ˆ˜๋งŽ์€ ์ฝ”์–ด์—์„œ ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ๋ชจ๋ธ ๊ณผ์ •์—์„œ ์—„์ฒญ๋‚œ ์Šน๋ฆฌ๋ฅผ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์—๊ฒŒ JIT๋Š” ๊ฐœ๋ฐœ๊ณผ ํ•จ๊ป˜ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์— ์žˆ์–ด ์•ฝ๊ฐ„ ์ทจ์•ฝํ•ด์กŒ์Šต๋‹ˆ๋‹ค(์‹ฌ์ง€์–ด ๋œ ๊ฒฐ์ •์ ์ž„). ์šฐ๋ฆฌ์˜ ํฌ๋ง์€ AOT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํ›จ์”ฌ ๋” ๋†’์€ ํ’ˆ์งˆ์˜ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜๊ณ  ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ›จ์”ฌ ๋” ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ  ๋ถˆํ•„์š”ํ•œ ์„ฑ๋Šฅ ๋ณ€๋™์„ ์ค„์ด๊ณ  C#์—์„œ ๋” ๋งŽ์€ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ JIT์™€ AOT ๊ธฐ์ˆ  ๋ชจ๋‘์— ๋” ๋งŽ์€ ํˆฌ์ž๋ฅผ ํ–ˆ์œผ๋ฉด ํ•ฉ๋‹ˆ๋‹ค.

cc @AndyAyersMS

AOT w/ static linking์€ jit๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” iOS ๋ฐ ์ฝ˜์†” ํ”Œ๋žซํผ์˜ ๊ฒŒ์ž„ ์—”์ง„์— ์‹œ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(๋น„ Unity ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ฒŒ์ž„ ์ฝ˜์†”์—์„œ ์‹คํ–‰๋˜๋Š” C# ์ฝ”๋“œ) Mono-AOT ๊ธฐ๋ฐ˜ ๋„๊ตฌ ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ์‹ฌ๊ฐํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉฐ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” 3๊ฐœ์˜ ํฌํ”Œ๋Ÿฌ ๊ฒŒ์ž„ ์ฝ˜์†”(XBox One, PlayStation 4 ๋ฐ Nintendo Switch)์—์„œ CoreRT๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์˜ ์ดˆ๊ธฐ ๊ต์ˆ˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ(์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Œ) Mono ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜๊ณผ ๋น„๊ตํ•˜์—ฌ ์ด๋ฏธ ์ƒ๋‹นํ•œ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒŒ์ž„ ์ฝ˜์†”์„ ๋‘˜๋Ÿฌ์‹ผ NDA ์ƒํ™ฉ์—์„œ ์ด ์‚ฌ์šฉ ์›์ธ์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์›์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณต์‹ ๋„ค์ดํ‹ฐ๋ธŒ AOT๋ฅผ ์–ป๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์—๊ฒŒ JIT๋Š” ๊ฐœ๋ฐœ๊ณผ ํ•จ๊ป˜ ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด ๋ณ€๊ฒฝ๋จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์— ์žˆ์–ด ์•ฝ๊ฐ„ ์ทจ์•ฝํ•ด์กŒ์Šต๋‹ˆ๋‹ค(์‹ฌ์ง€์–ด ๋œ ๊ฒฐ์ •์ ์ž„).

@jpapp05 ๊ท€ํ•˜์˜ ์•ฑ, ํŠนํžˆ ์œ„์˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ œ ์ฃผ์š” ๊ด€์‹ฌ์‚ฌ ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋„์›€์ด ๋˜์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ์˜คํ”„๋ผ์ธ์œผ๋กœ(ํ”„๋กœํ•„์˜ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด) ์ €์—๊ฒŒ ์—ฐ๋ฝํ•ด ์ฃผ์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š” @AndyAyersMS ์ž…๋‹ˆ๋‹ค. ์ข€ ๋” ์ž์œ ๋กญ๊ฒŒ ์ด์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜คํ”„๋ผ์ธ์—์„œ ์—ฐ๋ฝ์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ด์ต์„ ์œ„ํ•ด ํ† ๋ก ์˜ ์š”์•ฝ์„ ๋‹ค์‹œ ๊ฒŒ์‹œํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฌธ์ œ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์—ฌ๊ธฐ์—์„œ ์–ธ๊ธ‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ์—๊ฒŒ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์€ ๋Ÿฐํƒ€์ž„์— ๋„ค์ดํ‹ฐ๋ธŒ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋™์ ์œผ๋กœ ๋กœ๋“œ ๋ฐ ์–ธ๋กœ๋“œํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋‚ด ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” UWP Native๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ ์–ด๋„ ๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•œ ํ•œ .NET์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๋””์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. "์ •์ƒ์ ์ธ" ํšŒ์‚ฌ ์‚ฌ๊ณ  ๋ฐฉ์‹์ด ์•„๋‹Œ ๋ˆ„๊ตฐ๊ฐ€๋Š” ์‰ฝ๊ฒŒ ๋””์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์— ๋งŽ์€ IP๋ฅผ ๋„ฃ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
Linux๋Š” ๊ดœ์ฐฎ์ง€๋งŒ ๋ชจ๋“  ๋ฐ์Šคํฌํ†ฑ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์˜ Windows์šฉ์ž…๋‹ˆ๋‹ค.

์‚ถ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ™•์ธ๋ž€์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.
๊ธฐ๋ณธ ์ปดํŒŒ์ผ(Windows 10 ๋ฐ์Šคํฌํƒ‘์—์„œ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!)
๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋” ์ด์ƒ AOT์— ๊ด€์‹ฌ์ด ์—†์Šต๋‹ˆ๋‹ค. ASP.NET Core์—์„œ ์ž‘๋™ํ•œ๋‹ค๋ฉด ๋ฉ‹์ง€๋‹ค! ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‚˜๋Š” ์ •๋ง๋กœ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์งˆ๋ฌธ์„ ๋งŒ๋“ค๊ณ  ์„ค๋ฌธ ์กฐ์‚ฌ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์—…๋ฌด์—์„œ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์˜๊ฒฌ์„ ๋ฌป๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜๊ณ ํ•˜์…จ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ƒ๊ฐ์— (์‚ฌ์‹ค ๋‚˜๋Š” ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค) ๋‹น์‹ ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹Github์—์„œ ์ด๋Ÿฐ ์ผ์— ๊ด€์—ฌํ•˜์ง€ ์•Š๋Š” ์ˆ˜๋งŽ์€ ๋ฐ์Šคํฌํƒ‘ ๊ฐœ๋ฐœ์ž ์˜๊ฒฌ์„ ๊ทธ๋ฆฌ์›Œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ์ด .NET ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๋””์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ธฐ์–ต(๋˜๋Š” ์•Œ๊ณ ) ์žˆ์ง€๋Š” ์•Š์œผ๋ฉฐ ์ƒ์‚ฌ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์‹ค์„ ์•Œ๋ฉด ๋ฏธ์ณ๋ฒ„๋ฆด ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค .

๋ชจ๋“  ์‚ฌ๋žŒ์ด .NET ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ๋””์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ฑฐ๋‚˜ ์•„๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์‰ฟ... Unity ๋˜๋Š” ํƒ€์‚ฌ ํŒจํ‚ค์ง€์˜ ๋ฐฐํ›„์—์„œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•  ๋•Œ Rider๊ฐ€ ์ž๋™์œผ๋กœ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋†€๋ž์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ฝ”๋“œ๊ฐ€ ์ฒ˜์Œ์— ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ, ์ œ ๋ง์„ ์ดํ•ดํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@jcbeppler ๋‹น์‹ ์€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์™€ ๋„ค์ดํ‹ฐ๋ธŒ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์˜คํ•ด์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

https://www.hex-rays.com/products/decompiler/compare/compare_vs_disassembly/

Hex-Rays๋Š” ๊ฐ€๋Šฅํ•œ ์†”๋ฃจ์…˜์ผ ๋ฟ์ด๋ฉฐ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@MostHated ์˜ˆ, ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค .NET์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋””์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์—ฌ ๋งˆ์น˜ ์˜คํ”ˆ ์†Œ์Šค์™€ ๊ฐ™์œผ๋ฉฐ ๋งŽ์€ ํšŒ์‚ฌ์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์˜คํ”ˆ ์†Œ์Šค๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "๊ณต์งœ ์ ์‹ฌ์€ ์—†๋‹ค" ๐Ÿ˜„

@pjmlp ๋””์ปดํŒŒ์ผ๊ณผ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ์˜ ์ฐจ์ด์ ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์•„๋ฌด ๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†์ง€๋งŒ ์‚ฌ๋žŒ์ด ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๋””์ปดํŒŒ์ผ์„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ์ปดํŒŒ์ผ์€ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””์Šค์–ด์…ˆ๋ธ”๋œ ์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ™•์‹คํžˆ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ด๊ณ  ๋””์Šค์–ด์…ˆ๋ธ”๋œ ์ฝ”๋“œ๋Š” ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@jcbeppler ๋‹น์‹ ์€ ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ์™€ ๋„ค์ดํ‹ฐ๋ธŒ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์˜คํ•ด์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋„๊ตฌ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋””์ปดํŒŒ์ผ๋œ .NET ํ”„๋กœ๊ทธ๋žจ์€ ์ „์ฒด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ ์ด๋ฆ„๊ณผ ๋ณ€์ˆ˜ ์ด๋ฆ„๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋””๋ฒ„๊น…์— ์œ ์šฉํ•˜๋ฉฐ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ "์ฝ์„ ์ˆ˜ ์žˆ๋Š”" ์Šคํƒ ์ถ”์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—„์ฒญ๋‚œ ๋ณด์•ˆ ๊ฒฐํ•จ๊ณผ .NET ๋‚œ๋…ํ™” ์žฅ์น˜์— ๋Œ€ํ•œ ๊ฑฐ๋Œ€ํ•œ ์‹œ์žฅ์ด ์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋””์Šค์–ด์…ˆ๋ธ”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „์ฒด C++/๋ธํŒŒ์ด ๋“ฑ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ณต๊ฐœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์ด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ์ผ๋ถ€ ๋„๊ตฌ๊ฐ€ ์žˆ์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ๋”์ฐํ•ฉ๋‹ˆ๋‹ค). ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๊ธฐ๊ปํ•ด์•ผ ์–ด์…ˆ๋ธ”๋Ÿฌ ์ฝ”๋“œ์™€ ์ œ์–ด ์ˆœ์„œ๋„์ž…๋‹ˆ๋‹ค. ์šด์ด ์ข‹๊ณ  ๊ธฐํ˜ธ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋Šฅ ์ด๋ฆ„๋„ ์–ป์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ ์ด ๊ธฐํ˜ธ ํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณด์•ˆ์„ ์œ„ํ•ด ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ ๋ณดํ˜ธ ๊ธฐ๋Šฅ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ์„ธ๋ถ€ ์‚ฌํ•ญ์— ๋น ์ ธ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” ํฌ๋ž˜ํ‚น(์ „์ฒด ๋ฉ”์„œ๋“œ/๋ณ€์ˆ˜ ์ด๋ฆ„ ๋ฐ ์ „์ฒด C# ์†Œ์Šค ์ƒ์„ฑ ๋•๋ถ„์— ํŠน๋ณ„ํ•œ ์ง€์‹ ์—†์ด ๋ผ์ด์„ ์Šค ํ™•์ธ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Œ) ๋˜๋Š” ๋””๋ฒ„๊น… ์ธก๋ฉด์—์„œ ๋ณดํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šคํ‹ธ๋Ÿฌ์— ๋Œ€ํ•œ ๋ณดํ˜ธ์ž…๋‹ˆ๋‹ค. dnSpy์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ .NET ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ „์ฒด VS ํ”„๋กœ์ ํŠธ๋กœ ๋‚ด๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋„๊ตฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ƒ์šฉ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ํฐ ์Šน๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์ตœ์ข… ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ์™€ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๋ฐ ์—ฐ๊ฐ„ ์ˆ˜์ฒœ ๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์‚ฌ์‹ค ์™ธ์—๋„ ๋ง์ž…๋‹ˆ๋‹ค.

์ด๋ฒˆ ์„ค๋ฌธ์กฐ์‚ฌ ๊ฒฐ๊ณผ๊ฐ€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์–ด๋–ป๊ฒŒ ํˆฌํ‘œํ–ˆ๋Š”์ง€ ๊ณต๊ฐœํ•  ๊ณ„ํš์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@Symbai IP๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ NDK๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ Android ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ๋ ค์ค„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒƒ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์–ธ๊ธ‰ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ C ๋˜๋Š” C++ ์ฝ”๋“œ๋ฅผ ์›๋ณธ ์†Œ์Šค ์ฝ”๋“œ๋กœ ๊ฐ€์ •ํ•˜์ง€๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ ์‹œ๊ฐ„์ด ์ •๋ง ์ค‘์š”ํ•œ Rust, Go, Swift, C++, Java(GraalVM), ๋ฐ์Šคํฌํ†ฑ, ์ฝ˜์†” ๋ฐ ๋ชจ๋ฐ”์ผ/IoT ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•ด .NET์ด ์žฅ๊ธฐ์ ์œผ๋กœ ์†์‹ค๋˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์˜ ๊ฒฝ์šฐ AOT๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ œ์•ฝ์ด ๋†’์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ASP.NET ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ ๋กœ๋“œ ์‹œ JIT๋กœ ์ธํ•œ ์†๋„ ์†์‹ค์€ 100๊ฐœ์˜ K8S ํฌ๋“œ ์ธ์Šคํ„ด์Šค๋ฅผ ํ™•์žฅํ•  ๋•Œ AOT ์ฝ”๋“œ๊ฐ€ ๊ด€๋ จ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” JIT ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๊ณ  JIT๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ์Œ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‘ ์ปดํŒŒ์ผ ๋ชจ๋ธ์„ ๋ชจ๋‘ ์ œ๊ณตํ•˜๋Š” ์–ธ์–ด๊ฐ€ ๋งŽ์ด ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„ ํƒํ•˜๊ณ  ์„ ํƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ JIT๋ฅผ ์œ ์ง€ํ•˜๊ณ  AOT ์Šคํ† ๋ฆฌ๋ฅผ .NET ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐœ์„ ํ•˜๋ฉด์„œ NGEN์ด๋ผ๋Š” ์†Œ์‹ฌํ•œ ์‹œ๋„๋ฅผ ์žŠ์–ด๋ฒ„๋ฆฌ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

@Symbai IP๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์œผ๋กœ NDK๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ Android ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ๋ ค์ค„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ค ๊ฒƒ์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋„ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์–ธ๊ธ‰ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์€ ํ•œ ๋ฒˆ์˜ ํด๋ฆญ์œผ๋กœ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ C ๋˜๋Š” C++ ์ฝ”๋“œ๋ฅผ ์›๋ณธ ์†Œ์Šค ์ฝ”๋“œ๋กœ ๊ฐ€์ •ํ•˜์ง€๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋„์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์‚ด ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์˜ค๋Š˜๋‚  .NET์ด ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ›”์น˜๋Š” ๊ฒƒ(์˜ˆ: WPF), ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ VS ํ”„๋กœ์ ํŠธ๋กœ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋ฆ„๋‹ต๊ณ  ์‰ฝ๊ฒŒ ์™„์ „ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ค€๋น„ํ•˜๋Š” ๊ณณ. ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์ด ํฌํ•จ๋œ UWP๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ๋””์Šค์–ด์…ˆ๋ธ”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ข‹์€ ์ผ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ข‹์•„์š”, ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค! ๋‚˜๋Š” ๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ํ•ญ์ƒ ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งํ•  ์ˆ˜ ์—†๋Š” Android ์„ธ๊ณ„, Xamarin Forms๋กœ AOT๋ฅผ ํ•œ ๋ฒˆ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์ด ํฌํ•จ๋œ UWP๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ๋””์Šค์–ด์…ˆ๋ธ”ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ข‹์€ ์ผ์„ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ข‹์•„์š”, ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค! ๋‚˜๋Š” ๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ํ•ญ์ƒ ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งํ•  ์ˆ˜ ์—†๋Š” Android ์„ธ๊ณ„, Xamarin Forms๋กœ AOT๋ฅผ ํ•œ ๋ฒˆ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์Šคํฌ์ผ๋Ÿฌ - ์†Œ์Šค๋ฅผ ์–ป์œผ๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์€ ์•„๋งˆ๋„ ๋‹น์‹ ์„ ๊นŽ์•„๋‚ด๋ฆฌ์ง€ ์•Š๊ณ  ๊ฐœ์„ /ํ™•์žฅ/ํ†ตํ•ฉํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋‹น์‹ ์„ ์ฐข์–ด ๋ฒ„๋ฆฌ๋ ค๊ณ ํ•œ๋‹ค๋ฉด, ๋‹น์‹ ์˜ ๋ฉ”ํŠธ๋ฆญ์€ ์ •๋ง ์–ด๋ฆฌ์„์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฑ…์„ ์“ด๋‹ค๋ฉด ์ถœํŒํ•˜๊ธฐ ์ „์— ๋ˆ„๊ตฐ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ผ๋ณธ์–ด๋กœ ๋ฒˆ์—ญํ•ด ์ค„ ๊ฒƒ์„ ์š”์ฒญํ•˜์‹ญ์‹œ์˜ค. ๋‚˜๋Š” ์ผ๋ณธ์–ด๋ฅผ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ณ  ๋‚ด ์นœ๊ตฌ๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ •๋ง ๋˜‘๋˜‘ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์€ ๊ทธ ์ฑ…์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‚˜๋ผ๊ฐ€ ์ „์„ธ๊ณ„์— ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹ค๋ฅธ ์ฒ™ ํ•˜๋ฉด ์Šค์Šค๋กœ๋ฅผ ์†์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋””์Šค์–ด์…ˆ๋ธ”๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์—†๊ณ  Star Citizen์—์„œ ์•”ํ˜ธํ™” ๋ฐ ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋งํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ด ๋ง์„ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์ „ ๊ฒฝํ—˜์ด ์ „ํ˜€ ์—†๋Š” ์ €์—๊ฒŒ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋…์  ๋ฐ์ดํ„ฐ ํ˜•์‹์„ XML/JSON์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ–์ถ”๋Š” ๋ฐ 2์ฃผ๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค.

๊ทธ 2์ฃผ๊ฐ€ ์ง€๋‚˜๋ฉด VS ํ”„๋กœ์ ํŠธ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์™„์ „ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ๋„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‚ด ์ž์‹ ์˜ ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ณ  ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ

์•”ํ˜ธํ™”๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋น„๋””์˜ค ๊ฒŒ์ž„์„ ๋””์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์€ ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์ž๋Š” ํŒฌ์ด ๋ชจ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ  ๊ฒŒ์ž„์— ๋Œ€ํ•œ ์—ด์ •๊ณผ ์‚ฌ๋ž‘์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ "์•”ํ˜ธํ™”"๋Š” ์ „ํ˜€ ์•”ํ˜ธํ™”๊ฐ€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ ํŒŒ์ผ์€ ๋” ์ž‘์€ ํฌ๊ธฐ๋กœ ์••์ถ•๋˜์—ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ˆ˜์ฒœ ๊ฐœ์˜ ๋‹จ์ผ ํŒŒ์ผ์„ ๋””์Šคํฌ์— ์ €์žฅํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ๋„ ์ด์œ ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค... ๋””์Šคํฌ์—์„œ ๋งŽ์€ ์ž‘์€ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ํฐ ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒƒ๋ณด๋‹ค ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  2์ฃผ ํ›„์— ํฌ์žฅ๋œ ์ด๋ฏธ์ง€์˜ ์••์ถ•์„ ํ’€ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ๋‚ด์—์„œ ํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋‚˜ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์ด JIT๋ฅผ ์—†์• ๊ณ  ์‹ถ์–ดํ•˜๋Š” ์ด์œ ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฌธ์ œ๋Š” JIT ์ฝ”๋“œ๊ฐ€ ์™„์ „ํ•œ ์†Œ์Šค ์ฝ”๋“œ๋กœ ์™„์ „ํžˆ ๋””์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ๊ณ  Java๋Š” ๋‹ค๋ฅธ JIT ์–ธ์–ด์™€ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋Š” ๋””์Šค์–ด์…ˆ๋ธ”๋  ์ˆ˜ ์žˆ๊ณ (์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค), ๋„ค์ดํ‹ฐ๋ธŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ถฉ๋ถ„ํ•œ ์—ฌ์œ ๊ฐ€ ์žˆ์œผ๋ฉด ํฌ๋ž™๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ๊ฒƒ์ด ์‚ฌ์‹ค์ด์ง€๋งŒ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. C++ ์ฝ”๋“œ์šฉ dnSpy์™€ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋ธํŒŒ์ด ์ฝ”๋“œ? ๋‚˜๋Š”ํ•˜์ง€ ์•Š์•˜๋‹ค. ๋ณ€์ˆ˜ ๋ฐ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์–ป์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ปดํŒŒ์ผ๋˜๋ฉด ๋” ์ด์ƒ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ C++๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๋Š” ์™„์ „ํžˆ ์ž‘๋™ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒ์—…์šฉ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์—„์ฒญ๋‚œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” .NET ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ง€์‹์ด ์ „ํ˜€ ์—†๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐœ ์ฑ…์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์—†์• ๊ณ  ์‹ถ์„ ๋ฟ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์—ฐ๊ตฌ์— ์ˆ˜์ฒœ ๋‹ฌ๋Ÿฌ๋ฅผ ํˆฌ์žํ•  ๋•Œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์„ ๋ณด๊ณ  ๋ช‡ ์ดˆ ์•ˆ์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋” ์ด์ƒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ด๊ณ  "๋ผ์ด์„ ์Šค"๋ฅผ ๊ฒ€์ƒ‰ํ•˜์—ฌ ์ฆ‰์‹œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋„๋ก ๋ชจ๋“  ๋ณ€์ˆ˜์™€ ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋งŒ ๋ชฉ์ ์ธ ๋‚œ๋…ํ™” ์žฅ์น˜์— ๋Œ€ํ•ด ์ˆ˜์ฒœ ๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•˜๋Š” ์ผ์„ ์—†์• ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. obfuscator์˜ ๋น„์šฉ(๋Œ€๋ถ€๋ถ„) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ obfuscator๊ฐ€ ์ถ”๊ฐ€ ๋ฌธ์ œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ํŠนํžˆ .NET Core ๋ฆด๋ฆฌ์Šค์˜ ๋นˆ๋„๋กœ ์ž์ฃผ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. obfuscator๊ฐ€ ์ตœ์‹  .NET Core ๋ฒ„์ „์—์„œ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ํŒจ์น˜๋ฅผ ์œ„ํ•ด ๋ช‡ ์ฃผ๋งŒ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๋กœ์„œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋Š” ๋™์•ˆ ๋น„์ฆˆ๋‹ˆ์Šค ๊ด€๋ฆฌ์ž์—๊ฒŒ๋„ ์„ค๋ช…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋Š ์‹œ์ ์—์„œ ๊ทธ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์ง€ ์•Š์€์ง€ ๋ฌป์Šต๋‹ˆ๋‹ค.

C++์™€ ๋ธํŒŒ์ด์—์„œ๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜คํ”ˆ ์†Œ์Šค ๊ฐœ๋ฐœ์ž๋Š” JIT๊ฐ€ ๋” ํฅ๋ฏธ๋กญ๊ณ  ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ด๋ฆฐ ์ฑ…์ด ๋” ๋‚ซ๋‹ค๊ณ  ๋ฏฟ์„ ๋•Œ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž์‹ ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋‹ซํžŒ ์ฑ…์ด ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ด์œ ๋ฅผ ๊ทธ๋“ค์—๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ƒ์ ์œผ๋กœ๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ด€์ ์„ ์„œ๋กœ ์„ค๋ช…ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ AOT๋Š” ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฆด๋ฆฌ์Šค ๋ชจ๋“œ์—์„œ ์ผค ์ˆ˜ ์žˆ๋Š” ์Šค์œ„์น˜์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์›ํ•˜์ง€ ์•Š์œผ๋ฉด JIT๋กœ ์ง„ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

AOTโค๋ฅผ ์›ํ•˜๋Š” ์ด์œ ๋กœ "๋ณดํ˜ธ"๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€ .NET ํŒ€์— ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์ด ์ผ๋ถ€ ์‚ฌ๋žŒ๋“ค์˜ ํ•„์š”๋ฅผ ์•Œ๊ณ  ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋ก  ์กฐ์‚ฌ์—์„œ ์‚ฌ๋žŒ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ํˆฌํ‘œํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์ง€๋ฉด ๋งˆ์นจ๋‚ด AOT ๊ตฌํ˜„์ด C++ ์ปดํŒŒ์ผ๋Ÿฌ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ๊ธฐํšŒ๋ฅผ ๊ฐ–๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ : AOT๊ฐ€ ์‹ค์ œ๋กœ ์–ผ๋งˆ๋‚˜ ๋ณดํ˜ธํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋…ผ์˜๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ธ์šฉ๋ฌธ์„ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ณด์•ˆ์€ ์ „๋ถ€ ๋˜๋Š” ์ „๋ฌด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. IL์„ ์ œ๊ฑฐํ•œ๋‹ค๊ณ  ํ•ด์„œ ๊ฒฐ์ •๋œ ๊ณต๊ฒฉ์ž๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ์‹ค์šฉ์ ์ธ ์˜๋ฏธ์—์„œ ๊ด€๋ จ์ด ์žˆ๋Š” ์žฅ์• ๋ฌผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์‹ฌ์ธต ๋ฐฉ์–ด์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด IL ๋‚œ๋…ํ™” ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

๋‚ด ์นœ๊ตฌ๊ฐ€ IL์„ C#์œผ๋กœ ๋””์ปดํŒŒ์ผํ•˜๊ณ  ์‚ฌ์†Œํ•œ ์ˆ˜์ •์„ ํ†ตํ•ด .NET ์ œํ’ˆ์„ ๊นจ๋œจ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๊ธฐ๋ณธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ•ด๋…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ›จ์”ฌ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋˜ํ•œ ๋””์ปดํŒŒ์ผ๋Ÿฌ ๋„๊ตฌ๊ฐ€ ํ•ด๋‹น ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ ์ถฉ๋Œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— IL ๋‚œ๋…ํ™”์ž๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํฌ๊ธฐํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ํ•ด๋‹น ์ œํ’ˆ์€ ์‹ค์šฉ์ ์ธ ์˜๋ฏธ์—์„œ ๋ณดํ˜ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋‹ค.

@์‹ฌ๋ฐ”์ด

Have you ever seen a tool like dnSpy for C++ code? Delphi code?

Hex-Rays๋Š” C์— ๋Œ€ํ•ด ์ข‹์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ฒฐ์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ๋•๋Š” ๋งคํฌ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

C ์†Œ์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ๊ทธ๊ฒƒ์„ C++ ๋˜๋Š” ๋ธํŒŒ์ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์•„์ด๋“ค์˜ ๋†€์ด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด์ œ ์šฐ๋ฆฌ๋Š” ๊ธฐ์ˆ ์ด ๋ถ€์กฑํ•œ ์‚ฌ๋žŒ๋“ค์„ ๋•๊ธฐ ์œ„ํ•ด AI๋ฅผ ๊ฐ–๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ฑฐ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์‹ ๊ฒฝ ์—ญ๊ณตํ•™

Hex-Rays๋Š” C์— ๋Œ€ํ•ด ์ข‹์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ฒฐ์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ๋•๋Š” ๋งคํฌ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Hex-Rays ๋˜๋Š” ๋‚œ๋…ํ™” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํŒ๋งคํ•˜๋Š” ํšŒ์‚ฌ์—์„œ ์ผํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ๊ทธ๊ฒƒ์„ C๋กœ ๋ณ€ํ™˜ํ•˜๋”๋ผ๋„ ์ฝ”๋“œ๋Š” ์ข‹์€ C# ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์„ ์–ป๋”๋ผ๋„ ๋ณ€๊ฒฝ, ๊ฐœ์„  ๋“ฑ์„ ์œ„ํ•ด ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค....
๋‹น์‹ ์„ ์œ„ํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์ด ๊ด€๋ จ์ด ์—†๋‹ค๋ฉด, ok. ๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ทธ๊ฒƒ์€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

BTW: ๋‹น์‹ ์€ JIT ์ปดํŒŒ์ผ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์–ด ๋ณด์ด๋ฉฐ ์†Œํ”„ํŠธ์›จ์–ด ๋ถ„ํ•ด์— ๋งŽ์€ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ, ์–ด๋””์— ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹œ์ฃ ?!

IL ๋Œ€ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ์˜ ๋””์ปดํŒŒ์ผ ์šฉ์ด์„ฑ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ๋ถ„ ์ค‘ ๋ˆ„๊ตฌ๋ผ๋„ ๋Š๋ผ๋Š” ๊ฒƒ๊ณผ ์ƒ๊ด€์—†์ด ๊ทธ๊ฒƒ์ด ์‹ค์ œ ๋น„์ฆˆ๋‹ˆ์Šค์—์„œ ์‹ค์ œ ์š”๊ตฌ ์‚ฌํ•ญ์ด๋ผ๋Š” ์‚ฌ์‹ค์€ ๋ณ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์†Œ๊ฐ€ ์ง‘์— ๋Œ์•„์˜ฌ ๋•Œ๊นŒ์ง€ ๊ทธ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์–ผ๋งˆ๋‚˜ ์œ ํšจํ•œ์ง€ ๋˜๋Š” ๋ฌดํšจํ•œ์ง€์— ๋Œ€ํ•ด ๋…ผ์Ÿํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋‚ด ์ด์ „ ๊ณ ์šฉ์ฃผ๋Š” ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ .NET ๋˜๋Š” JVM ๋„๊ตฌ๋ฅผ ์™ธ๋ถ€์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ช…์‹œ์ ์œผ๋กœ ๊ธˆ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋– ๋‚˜๊ธฐ ์ง์ „์— ํ•œ ํŒ€์€ ๋†’์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋‚œ๋…ํ™”๊ฐ€ ์ ์šฉ๋œ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ์„ค๋“ํ–ˆ์ง€๋งŒ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์šฐ๋ฆฌ๋Š” ๊ธฐ์—… ์ •์ฑ…์„ ์ถฉ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด C++๋กœ ์™ธ๋ถ€ ๋„๊ตฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์€ ๊ถค๋„์—์„œ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. AOT๊ฐ€ IP ๋ณดํ˜ธ์™€ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๋ชจ๋‘ ๋…ผ์Ÿ์„ ๋ฒŒ์ด๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•˜์‹ญ์‹œ์˜ค.

Hex-Rays๋Š” C์— ๋Œ€ํ•ด ์ข‹์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ๊ฒฐ์ • ํ”„๋กœ์„ธ์Šค๋ฅผ ๋•๋Š” ๋งคํฌ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Hex-Rays ๋˜๋Š” ๋‚œ๋…ํ™” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํŒ๋งคํ•˜๋Š” ํšŒ์‚ฌ์—์„œ ์ผํ•˜์‹ญ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“ , ๊ทธ๊ฒƒ์„ C๋กœ ๋ณ€ํ™˜ํ•˜๋”๋ผ๋„ ์ฝ”๋“œ๋Š” ์ข‹์€ C# ์•„ํ‚คํ…์ฒ˜์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ์กฐ๊ฐ์„ ์–ป๋”๋ผ๋„ ๋ณ€๊ฒฝ, ๊ฐœ์„  ๋“ฑ์„ ์œ„ํ•ด ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค....
๋‹น์‹ ์„ ์œ„ํ•ด ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ์ด ๊ด€๋ จ์ด ์—†๋‹ค๋ฉด, ok. ๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ทธ๊ฒƒ์€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

BTW: ๋‹น์‹ ์€ JIT ์ปดํŒŒ์ผ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์–ด ๋ณด์ด๋ฉฐ ์†Œํ”„ํŠธ์›จ์–ด ๋ถ„ํ•ด์— ๋งŽ์€ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™œ, ์–ด๋””์— ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹œ์ฃ ?!

๊ทธ์— ๋ฐ˜ํ•ด ์ €๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ œ3์ž๊ฐ€ ๋” ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์Šค ์ฝ”๋“œ๋กœ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋งํ•˜๋Š” ๊ธฐ์ˆ ์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์€ ์Šคํฌ๋ฆฝํŠธ ํ‚ค๋””๋“ค์—๊ฒŒ ์žฅ์• ๋ฌผ์ผ ๋ฟ์ด๋ผ๋Š” ๊ฒƒ์„ ์ถฉ๋ถ„ํžˆ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ.

ํŽธ์ง‘: ๋˜ํ•œ ๋‚ด ์˜๊ฒฌ์„ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ธ์‹ ๊ณต๊ฒฉ์— ๋‹ตํ•˜๊ณ  ์‹ถ์—ˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ WPF๋Š” AOT์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
Windows ํด๋ผ์ด์–ธํŠธ ๋Ÿฐํƒ€์ž„ ์—†์Œ! JIT ์—†์Œ

์„ค๋ฌธ์กฐ์‚ฌ ๊ฒฐ๊ณผ๊ฐ€ ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค( https://github.com/dotnet/runtime/issues/41522). ํ˜„์žฌ ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํ›„์† ์กฐ์น˜๋ฅผ ์ทจํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค.

AOT w/ static linking์€ jit๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” iOS ๋ฐ ์ฝ˜์†” ํ”Œ๋žซํผ์˜ ๊ฒŒ์ž„ ์—”์ง„์— ์‹œ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—(๋น„ Unity ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๊ฒŒ์ž„ ์ฝ˜์†”์—์„œ ์‹คํ–‰๋˜๋Š” C# ์ฝ”๋“œ) Mono-AOT ๊ธฐ๋ฐ˜ ๋„๊ตฌ ์ฒด์ธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ๊ฐ€์ง€ ์‹ฌ๊ฐํ•œ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉฐ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” 3๊ฐœ์˜ ํฌํ”Œ๋Ÿฌ ๊ฒŒ์ž„ ์ฝ˜์†”(XBox One, PlayStation 4 ๋ฐ Nintendo Switch)์—์„œ CoreRT๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์˜ ์ดˆ๊ธฐ ๊ต์ˆ˜๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜์ง€๋งŒ(์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Œ) Mono ๊ธฐ๋ฐ˜ ์†”๋ฃจ์…˜๊ณผ ๋น„๊ตํ•˜์—ฌ ์ด๋ฏธ ์ƒ๋‹นํ•œ ๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ ๊ฐœ์„ ์ด ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ฒŒ์ž„ ์ฝ˜์†”์„ ๋‘˜๋Ÿฌ์‹ผ NDA ์ƒํ™ฉ์—์„œ ์ด ์‚ฌ์šฉ ์›์ธ์— ๋Œ€ํ•œ ๊ณต์‹ ์ง€์›์€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ณต์‹ ๋„ค์ดํ‹ฐ๋ธŒ AOT๋ฅผ ์–ป๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ ์ ˆํ•ฉ๋‹ˆ๋‹ค.

@RalfKornmannEnvision Xamarin Xbox One/PS4 Mono ํฌํŠธ๋ฅผ LLVM codegen๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@RalfKornmannEnvision Xamarin Xbox One/PS4 Mono ํฌํŠธ๋ฅผ LLVM codegen๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@lateralusX ํ†ตํ•ฉ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์„ธํžˆ๋Š” ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ XBox One/PS4์šฉ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ชจ๋…ธ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์Šค์œ„์น˜์šฉ์œผ๋กœ ๊ฐ„๋‹จํ•œ ํฌํŠธ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ž์‹ .

@RalfKornmannEnvision ์—ฐ๋ฝํ•˜์—ฌ ์ด์™€ ๊ด€๋ จ๋œ ๊ฒฝํ—˜์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. LLVM codegen์€ (ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ) ์ƒ์„ฑ๋œ ์ฝ”๋“œ์— ๋งค์šฐ ๊ธ์ •์ ์ธ ์„ฑ๋Šฅ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ(ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•จ) ์ผ๋ฐ˜์ ์œผ๋กœ ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ๋งŽ์€ ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DotNetEvolution discord ์„œ๋ฒ„์— ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์˜คํ”„๋ผ์ธ ํ† ๋ก ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@lateralusX ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ ํŒ€์›๋“ค์ด LLVM ์ฝ”๋“œ์  ์„ ํ™œ์„ฑํ™”ํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์‹œ๋„ํ–ˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „ ๊ทธ๋“ค์˜ ๋งˆ์ง€๋ง‰ ์ง„์ˆ ์€ ์ด๊ฒƒ์ด ๊ทธ๋“ค์ด ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์„ ์ด๋ผ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์กฐ์‚ฌ์˜ ์ผํ™˜์œผ๋กœ Xamarin Android๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋ฒค์น˜๋งˆํฌ๋ฅผ ๋นŒ๋“œํ•˜๊ณ  Tegra X1 ๊ธฐ๋ฐ˜ ์žฅ์น˜์—์„œ ์‹คํ–‰ํ•˜์—ฌ Mono์˜ ์‚ฌ์šฉ์ž ์ง€์ • ์Šค์œ„์น˜ ํฌํŠธ ๋ฌธ์ œ๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ์†์‹ค๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ Xamarin ํ”„๋กœ์ ํŠธ์˜ ์„ฑ๋Šฅ์€ ์Šค์œ„์น˜์—์„œ ๋ณธ ๊ฒƒ๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ๋ถˆํ™” ์„œ๋ฒ„์— ์žˆ์ง€ ์•Š๊ณ  ์†”์งํžˆ ๋งํ•ด์„œ ๊ทธ๋“ค์ด ํ˜„์žฌ MONO ํ†ตํ•ฉ์— ๋Œ€ํ•ด ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ๋งŽ์ง€ ์•Š๋‹ค๋Š” ์ ์„ ์œ ๊ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๊ด€์ ์—์„œ ์ด๊ฒƒ์€ ์–ด์จŒ๋“  ์ด ํ”„๋กœ์ ํŠธ์˜ ๋ง‰๋‹ค๋ฅธ ๊ณจ๋ชฉ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ CoreRT ํ”„๋กœํ† ํƒ€์ž…(๊ณต์‹ ์ง€์›์€ ํ›จ์”ฌ ์ ์Œ)์€ ์ด๋ฏธ ์„ฑ๋Šฅ๊ณผ ์œ ์šฉ์„ฑ ๋ฉด์—์„œ ํ›จ์”ฌ ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

@RalfKornmannEnvision ์ข‹์Šต๋‹ˆ๋‹ค . ๊ท€ํ•˜์˜ ์ •๋ณด์™€ ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋งค์šฐ ์†Œ์ค‘ํ•ฉ๋‹ˆ๋‹ค.

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