Runtime: ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ ์ง€์›

์— ๋งŒ๋“  2018๋…„ 10์›” 05์ผ  ยท  225์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dotnet/runtime

์ด ๋ฌธ์ œ๋Š” .NET Core 3.0 ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ ๊ธฐ๋Šฅ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋””์ž์ธ ๋ฌธ์„œ ๋ฐ ์ค€๋น„ ๊ณ„ํš ์ž…๋‹ˆ๋‹ค.

area-Single-File

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

์ฒซ ๋ฒˆ์งธ ์‹œ์ž‘์€ ํ›จ์”ฌ ๋Š๋ฆด ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์•ฑ์„ ๋””์Šคํฌ์— ์ถ”์ถœํ•˜๋ฏ€๋กœ IO๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋”์ฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๋”์ฐํ•œ ์„ ํƒ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ซ์–ดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@Safirion ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” .exe์—์„œ ์ง์ ‘ ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ผ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋‹ค์Œ ๊ฐœ์„  ์ž‘์—…์„ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค(๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜์ง€ ์•Š์Œ). ์•„์ง ์ถœ์‹œ ์—ด์ฐจ๋ฅผ ์•ฝ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ณง ๋ณ€๊ฒฝ๋  ์˜ˆ์ •์ธ ๊ฒฝ์šฐ ์ง€๊ธˆ ๊ณต์‹์ ์œผ๋กœ ์ถœ์‹œํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฏธ๋ฆฌ๋ณด๊ธฐ/์‹คํ—˜์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ์ด๊ฒƒ์€ ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. AOT ์ปดํŒŒ์ผ ๋ฐ ํŠธ๋ฆฌ ํ”๋“ค๊ธฐ์— ์ง‘์ค‘ํ•˜๊ณ  ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฑฐ๊ธฐ์— ๋„ฃ๊ณ  ํ•ดํ‚น์„ ์ค‘์ง€ํ•˜์‹ญ์‹œ์˜ค.

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

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์ด ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๋Š” CoreRT์™€ ์–ด๋–ป๊ฒŒ ๋น„๊ต๋ฉ๋‹ˆ๊นŒ? ๋น„์Šทํ•œ ๋…ธ๋ ฅ์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ฃ ?

' ์•„๋งˆ๋„ ๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž ์ฝ”๋“œ '์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฆ‰, AOT๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๋ฅผ JIT ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋˜ํ•œ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ(' ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ(๋Ÿฐํƒ€์ž„, ํ˜ธ์ŠคํŠธ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ถ€๋ถ„.. ')๊ฐ€ CoreCLR ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋‹น์‹ ์€ ํ›Œ๋ฅญํ•œ ์งˆ๋ฌธ์„ ํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์•„์ง ์ดˆ๊ธฐ ๋””์ž์ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์•„์ง ์ข‹์€ ๋Œ€๋‹ต์„ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํฅ๋ฏธ๋กญ๊ฒŒ๋„ ์ด ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ๋Š” CoreRT์™€ ์–ด๋–ป๊ฒŒ ๋น„๊ต๋ฉ๋‹ˆ๊นŒ? ๋น„์Šทํ•œ ๋…ธ๋ ฅ์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ฃ ?

๋‹ค์†Œ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ(๋‹จ์ผ ํŒŒ์ผ)๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๋””์ž์ธ์—๋Š” ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ์„ฑ๋Šฅ ํŠน์„ฑ ๋˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ .NET Core ์ž์ฒด ํฌํ•จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ 10MB์ด๊ณ  ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋  ์ˆ˜ ์žˆ์ง€๋งŒ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋กœ๋“œ, ๋ฐ˜์‚ฌ ๋ฐฉ์ถœ ๋ฐ ๊ณ ๊ธ‰ ์ง„๋‹จ์„ ํฌํ•จํ•˜์—ฌ CoreCLR์˜ ์ „์ฒด ๊ธฐ๋Šฅ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. CoreRT๋Š” ์ŠคํŽ™ํŠธ๋Ÿผ์˜ ๋‹ค๋ฅธ ์ชฝ ๋์œผ๋กœ ๊ฐ„์ฃผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ์ž๋ฆฌ MB์ด๊ณ  ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋งค์šฐ ๋น ๋ฅด์ง€๋งŒ JIT๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐฉ์ถœ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋ณด๋‹ค ๋Š๋ฆฝ๋‹ˆ๋‹ค. NET ๊ฐœ๋ฐœ์ž๋Š” ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์ง€๋งŒ .NET Core 3.0์—์„œ๋Š” ๊ฐœ์„ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋ฐ˜์‚ฌ๋ฅผ ์œ„ํ•œ ์ฃผ์„ ํ•„์š”, ์ผ๋ถ€ interop ์‹œ๋‚˜๋ฆฌ์˜ค ๋ˆ„๋ฝ, Linux์˜ ์ œํ•œ๋œ ์ง„๋‹จ). ๋˜ํ•œ ๋‘˜ ์‚ฌ์ด ์–ด๋”˜๊ฐ€์— ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์ ˆ์ถฉ์•ˆ์„ ๋งŒ๋“ค๊ณ /ํ”ผํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์ด์— ๋Œ€ํ•ด ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

'์•„๋งˆ๋„ ๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž ์ฝ”๋“œ'์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ฆ‰, AOT๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฝ”๋“œ๋ฅผ JIT ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

"๋„ค์ดํ‹ฐ๋ธŒ ์‚ฌ์šฉ์ž ์ฝ”๋“œ"๋ž€ ๊ท€ํ•˜์˜ ์•ฑ์— C++ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ(๊ท€ํ•˜ ๋˜๋Š” ํƒ€์‚ฌ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์ž‘์„ฑ)๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ฝ”๋“œ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์— ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. .dll๋กœ ์ปดํŒŒ์ผ๋œ ๊ฒฝ์šฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. .lib์ด๋ฉด ๋งํฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋Ÿฐํƒ€์ž„ ๊ตฌ์„ฑ ์š”์†Œ('๊ธฐ๋ณธ ์ฝ”๋“œ(๋Ÿฐํƒ€์ž„, ํ˜ธ์ŠคํŠธ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ๋ถ€๋ถ„..')๊ฐ€ CoreCLR ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋ชจ๋“  ๊ฒƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์–ด๋–ค repos๊ฐ€ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์•„๋‚ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. "ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ธฐ๋ณธ ๋ถ€๋ถ„"์—๋Š” ClrCompression ๋ฐ Unix PAL๊ณผ ๊ฐ™์€ CoreFX ๊ธฐ๋ณธ ํŒŒ์ผ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

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

์šฐ๋ฆฌ์—๊ฒŒ ํฅ๋ฏธ๋กœ์šด ๋ช‡ ๊ฐ€์ง€ ์‹œ๋‚˜๋ฆฌ์˜ค. ์ด๊ฒƒ์€ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ์ธก๋ฉด์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?
ํ”Œ๋žซํผ๋งˆ๋‹ค ๋ณ„๋„์˜ "ํŒŒ์ผ"์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ?

๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋„ค์ดํ‹ฐ๋ธŒ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

@ayende , ๋‚˜๋Š” @morganbr ์ฝ”๋ฉ˜ํŠธ ์—์„œ ์ธ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :

๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ .NET Core ์ž์ฒด ํฌํ•จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์ฒด ํฌํ•จ๋œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•œ ํ˜„์žฌ ํ”Œ๋žซํผ ๊ฐ„ ์ด์•ผ๊ธฐ๋Š” ํ”Œ๋žซํผ๋ณ„ ๋Ÿฐํƒ€์ž„๊ณผ ํ•จ๊ป˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์ƒ์œผ๋กœ ์ง€์ •ํ•˜๋ ค๋Š” ํ”Œ๋žซํผ๋ณ„๋กœ ๋ฐฐํฌ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@morganbr ์‹œ๊ฐ„์„ ๋‚ด์–ด ์ด๋ ‡๊ฒŒ ์ž์„ธํ•œ ๋‹ต๋ณ€์„ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋””์ž์ธ์ด ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ •๋ง ํฅ๋ฏธ๋กœ์šด ์ด๋‹ˆ์…”ํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์€ ์„ ํƒ์˜ ํญ์„ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)
  2. ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
  3. ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?
  4. ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  5. ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?
  6. ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?
  7. ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?
  8. ์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  1. ๋ชจ๋“  ํ”Œ๋žซํผ์˜ ์ฝ˜์†”/UI ์•ฑ.
  2. ์•„๋งˆ๋„ ํƒ€์‚ฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ.
  3. ์•„๋งˆ๋„ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
  4. ์˜ˆ, ํŠนํžˆ ClickOnce์™€ ์œ ์‚ฌํ•œ ๊ฐ„๋‹จํ•œ ์‹œ์Šคํ…œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์— ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
  5. ์•ฝ๊ฐ„์˜ ์ดˆ๊ธฐ ๋‘”ํ™”๋Š” ์šฉ์ธ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์ธํŠธ 3์ด ๋„์›€์ด ๋ ๊นŒ์š”?
  6. ์ž์‚ฐ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Hello World๋Š” MB ์ •๋„์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  7. ์ƒ์‚ฐ๋งŒ ํ•˜๋ฉด ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค.
  8. ๋ฐ˜์‚ฌ ํ•ญ๋ชฉ์„ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋„ค.

@morganbr , ์ด๋Ÿฌํ•œ ์งˆ๋ฌธ์ด ๋” ๋งŽ์€ ์ฒญ์ค‘์—๊ฒŒ ๋” ๋‚˜์€ ์งˆ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ๋‹ˆ๊นŒ? ์ฆ‰, ์ด GitHub ๋ฌธ์ œ์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๋ณด๋‹ค ๋” ๊ด‘๋ฒ”์œ„ํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ .NET Core ์ž์ฒด ํฌํ•จ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์„ ์••์ถ•ํ•˜๋Š” ๊ฒƒ์„๋ณด๊ณ ; ๋˜๋Š” ํŒŒ์ผ์— ์••์ถ• ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

@tpetrina , ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ํฌ์ธํŠธ 3์€ ๋ช‡ ๊ฐ€์ง€ ๋””์ž์ธ ๊ฐ๋„๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

  1. ํŠธ๋ฆฌ ์…ฐ์ดํ‚น์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ฆฌ ์…ฐ์ด์ปค๊ฐ€ ๋ณด์ง€ ๋ชปํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. CoreRT์—๋Š” ํ˜„์žฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.
    ํฌ์ธํŠธ 5๋Š” ํฌ๊ธฐ ๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„(๊ทธ๋ฆฌ๊ณ  ์–ผ๋งˆ๋‚˜)์„ ์ตœ์ ํ™”ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
    Point 8 ๋„ค, ์ฃผ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@TheBlueSky , ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋„ ์—ฐ๋ฝํ–ˆ์ง€๋งŒ GitHub ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์—ด์ •์ ์ธ ์‚ฌ๋žŒ๋“ค๋กœ๋ถ€ํ„ฐ ์˜๊ฒฌ์„ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

@benaadams , ์••์ถ•์€ ํ…Œ์ด๋ธ”์— ์žˆ์ง€๋งŒ ํ˜„์žฌ ์ „์ฒด ๋””์ž์ธ๊ณผ ์ง๊ตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€๋ฒผ์šด ์‹คํ—˜์— ๋”ฐ๋ฅด๋ฉด ์••์ถ•์€ ๋ช‡ ์ดˆ์˜ ์‹œ์ž‘ ์‹œ๊ฐ„(๋ฐ ๋นŒ๋“œ ์‹œ๊ฐ„)์„ ํฌ์ƒํ•˜์—ฌ ์•ฝ 50% ํฌ๊ธฐ ๊ฐ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•œ๋‹ค๋ฉด ์„ ํƒ ์‚ฌํ•ญ์ด ๋˜์–ด์•ผ ํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๊ธ‰์ง„์ ์ธ ์ ˆ์ถฉ์•ˆ์ž…๋‹ˆ๋‹ค.

@morganbr ์••์ถ•์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ๋ช‡ ์ดˆ์ž…๋‹ˆ๊นŒ? UPX ๊ฐ€ ์••์ถ• ํ•ด์ œ ์†๋„๋ฅผ

๊ณ ๋Œ€ Pentium 133์—์„œ ~10MB/์ดˆ, Athlon XP 2000+์—์„œ ~200MB/์ดˆ.

@morganbr , ๋‚˜์—๊ฒŒ ๋Œ€๋‹ต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1) ์„œ๋น„์Šค(๊ธฐ๋ณธ์ ์œผ๋กœ Kestrel์„ ์‹คํ–‰ํ•˜๋Š” ์ฝ˜์†” ์•ฑ). Windows ์„œ๋น„์Šค/๋ฆฌ๋ˆ…์Šค ๋ฐ๋ชฌ์œผ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ๋„์ปค์—์„œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
2) ์˜ˆ
3) ์˜ˆ, ์ผ๋ฐ˜์ ์œผ๋กœ AssemblyContext.LoadFrom ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
4) ์˜ˆ, ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์–ด์จŒ๋“  ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ทธ ๊ด€์ ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์—†์Šต๋‹ˆ๋‹ค.
5) ์„œ๋น„์Šค๋กœ์„œ ์šฐ๋ฆฌ๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์— ๊ทธ๋‹ค์ง€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 5์ดˆ๊ฐ€ ์ ๋‹นํ•ฉ๋‹ˆ๋‹ค.
6) 75MB๊ฐ€ ํ•œ๊ณ„์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ์••์ถ•๋˜์–ด ๋ฐฐ๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ์••์ถ• ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋งŽ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
7) ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ ๋” ๊ธด(ํ›จ์”ฌ ๋” ๊ธด) ๋นŒ๋“œ ์‹œ๊ฐ„์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
8) ์˜ˆ, ์ ˆ๋Œ€์ ์œผ๋กœ. ํฌ๊ธฐ๋Š” ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์ž‘์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜๊ณ  ๋งค์šฐ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด๊ฒƒ์˜ ๋””๋ฒ„๊น… ๊ฐ€๋Šฅ์„ฑ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์ด ์Šคํƒ ์ถ”์ ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค pdb ํŒŒ์ผ์ด๋‚˜ ์ผ์ข…์˜ ๋””๋ฒ„๊น… ๊ธฐํ˜ธ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

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

๊ณ ๋งˆ์›Œ, @ayende! ๋””๋ฒ„๊น… ๊ฐ€๋Šฅ์„ฑ์„ ์–ธ๊ธ‰ํ–ˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹จ์ผ ํŒŒ์ผ์—์„œ ํŽธ์ง‘ํ•˜๊ณ  ๊ณ„์†ํ•˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์›๋ž˜ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•˜๊ณ  ๋‹ค์‹œ ๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—).
  2. ๋‹จ์ผ ํŒŒ์ผ ๋นŒ๋“œ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์™€ ํ•จ๊ป˜ ์ œ๊ณต๋œ ํŒŒ์ผ ์™ธ์— ๋””๋ฒ„๊น…์— ํ•„์š”ํ•œ PDB ๋˜๋Š” ๊ธฐํƒ€ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. CoreRT๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ฑ„์›Œ์ง€๋Š” ์ผ๋ถ€ ๋””๋ฒ„๊น… ๊ธฐ๋Šฅ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํŠนํžˆ Linux/Mac์—์„œ).

"pdb ํŒŒ์ผ ํฌํ•จ"์ด๋ผ๊ณ  ๋งํ•  ๋•Œ ๋‹จ์ผ ํŒŒ์ผ _inside_๋ฅผ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ๋‹จ์ผ ํŒŒ์ผ ๋นŒ๋“œ๋ฅผ ๋””๋ฒ„๊ทธํ•ด์•ผ ํ•  ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ  ๋งค๋‹ฌ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์„ ์›ํ•˜์‹ญ๋‹ˆ๊นŒ?

1) ์šฐ๋ฆฌ์—๊ฒŒ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. E&C๋Š” ์ผ์ƒ์ ์ธ ๋ฐฐํฌ๊ฐ€ ์•„๋‹Œ ์‹ค์ œ ๋ฐฐํฌ์—๋งŒ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ๋Š” ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.
2) ์ด์ƒ์ ์œผ๋กœ๋Š” PDB๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด ์žˆ๊ณ  ์ธก๋ฉด์— ํ•˜๋‚˜์˜ ํŒŒ์ผ๊ณผ pdb ์„ธํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ž„๋ฒ ๋””๋“œ PDB ์˜ต์…˜์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘๋™ํ•œ๋‹ค๋ฉด ํ›Œ๋ฅญํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
3) ๋””๋ฒ„๊ทธ์— ๋Œ€ํ•ด ๋งํ•  ๋•Œ ๋‚˜๋Š” ๋””๋ฒ„๊ฑฐ๋ฅผ ๋ผ์ด๋ธŒ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ƒ์‚ฐ ์‹œ๊ฐ„์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ๊ตฌ์ฒด์ ์œผ๋กœ, ํŒŒ์ผ ๋ฐ ์ค„ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จํ•˜๋Š” ์Šคํƒ ์ถ”์  ์ •๋ณด, ๋คํ”„๋ฅผ ์ฝ์„ ๋•Œ ๊ธฐํ˜ธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋“ฑ

  1. ์ฃผ๋กœ ์„œ๋น„์Šค์ด์ง€๋งŒ ์ผ๋ถ€ UI
  2. ์ผ๋ถ€๋Š” ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๊ธด๊ธ‰ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค
  3. ๋„ค
  4. ๋„ค
  5. ๋ช‡ ์ดˆ๋ฉด OK
  6. ์šฐ๋ฆฌ์—๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dll ํฌ๊ธฐ์˜ ํ•ฉ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
  7. ์ด์ƒ์ ์œผ๋กœ๋Š”
  8. ํฌ๊ธฐ๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์—๊ฒŒ ๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ์€ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ(์•„๋งˆ๋„ ๋‹จ๊ณ„์ )์— ๋Œ€ํ•ด์„œ๋„ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งŽ์€ ์ข…์†์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ dll์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์„ ํŒจํ‚ค์ง•ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฒ„์ „ ๊ด€๋ฆฌ ๋“ฑ์˜ ์ˆ˜๊ณ ๋ฅผ ๋œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์ด ์ฐจ๋ก€๋กœ exe๋กœ ํŒจํ‚ค์ง•๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์„œ๋น„์Šค ๋ฐ ์ผ๋ถ€ UI.
  2. ์ง€๊ธˆ์€ ์•„๋‹™๋‹ˆ๋‹ค.
  3. ๋„ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ํด๋”์—์„œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๊ณ  ๋Ÿฐํƒ€์ž„์— ๋‹ค์‹œ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค.
  4. ๋„ค
  5. ์šฐ๋ฆฌ๊ฐ€ 10-15+๋ฅผ ๋ฐ€์–ด๋ถ™์ด์ง€ ์•Š๋Š” ํ•œ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  6. DLL ํฌ๊ธฐ์˜ ํ•ฉ๊ณ„ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  7. ๋„ค. ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์‹œ๊ฐ„์˜ ๊ฒฝ์šฐ ๋””๋ฒ„๊ทธ/ํ…Œ์ŠคํŠธ ๋นŒ๋“œ๊ฐ€ ์ƒ๋‹นํžˆ ๋น ๋ฅด๊ฒŒ ๋นŒ๋“œ๋˜๋Š” ํ•œ ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.
  8. ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ์˜ต์…˜์ด ํŽธ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  1. ์„œ๋น„์Šค์™€ UI.
  2. ๋•Œ๋•Œ๋กœ.
  3. ์˜ˆ, ์ผ๋ฐ˜์ ์œผ๋กœ.
  4. ๋„ค.
  5. 5์ดˆ ์ด๋‚ด๋กœ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  6. UI๋Š” 5์ดˆ ๋ฏธ๋งŒ์ด๋ฉฐ ์„œ๋น„์Šค๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  7. ๋นŒ๋“œ ์‹œ๊ฐ„์€ ์ค‘์š”ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ตœ์ ํ™” ํšจ๊ณผ๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
  8. ๋„ค.

@tpetrina @ayende @bencyoung @Kosyne @expcat ๋‹น์‹ ์€ ์งˆ๋ฌธ 3์— ์˜ˆ๋ผ๊ณ  ๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค("๋‹น์‹ ์˜ ์•ฑ์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๋‹น์‹ ์˜ ์•ฑ ๋นŒ๋“œ์— ์›๋ž˜ ํฌํ•จํ•˜์ง€ ์•Š์€ ๋‹ค๋ฅธ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?") - ๋‹น์‹ ์˜ ์‚ฌ์šฉ์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ๋ ค์ฃผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์‚ฌ๋ก€?

๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ์˜ ์ฃผ์š” ์žฅ์ ์€ ๋ฐฐํฌํ•  ํŒŒ์ผ์ด ํ•˜๋‚˜๋ฟ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•ฑ์— ๋ณ„๋„์˜ ํŒŒ์ผ์— ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ ํŒŒ์ผ์ด ์žˆ๋Š” ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์น˜๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? "app.exe+plugin1.dll+plugin2.dll"์ด "app.exe+coreclr.dll+clrjit.dll+...+plugin1.dll+plugin2.dll"๋ณด๋‹ค ๋‚˜์€ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

app.exe + 300+ dll - ์˜ค๋Š˜๋‚ ์˜ ํ˜„์žฌ ์ƒํƒœ๋Š” ์ •๋ง ์–ด์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.
app.exe + ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž ์ž์‹ ์ด ์ •์˜ํ•˜๋Š” 1-5๊ฐœ์˜ dll์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํ™•์žฅ์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹จ์ผ exe ๋งŒ ๋ฐฐํฌํ•˜๊ณ  ์‚ฌ์šฉ์ž๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•  _๊ณ„ํš_์€ ์•„๋‹ˆ์ง€๋งŒ, ํ•„์š”ํ•  ๊ฒฝ์šฐ ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ๋ฅผ _ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

@ayende ์šฐ๋ฆฌ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

@ayende ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๋ณ€ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋กœ๋“œํ•ด์•ผ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์ˆ˜์— ๋”ฐ๋ผ ์šฐ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ํ˜ธํ™˜๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด ์‹œ์ž‘ํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ณณ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด "ํฌ์žฅ ๋ฐ ์ถ”์ถœ" ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

์ด ๊ณ„ํš์˜ ๊ฐ€์žฅ ๊นŒ๋‹ค๋กœ์šด ์„ธ๋ถ€ ์‚ฌํ•ญ์€ ํŒŒ์ผ์„ ์ถ”์ถœํ•  ์œ„์น˜์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์ด ๋ชจ๋“  ๊ฒƒ์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  1. ์ž˜ ์•Œ๋ ค์ง„ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ(์˜ˆ: Windows์—์„œ๋Š” %LOCALAPPDATA%\dotnetApps, ๋‹ค๋ฅธ OS์—์„œ๋Š” ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ์œ„์น˜)
  2. ์ƒ์Šน๋œ ๋ณ„๋„์˜ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ
  3. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ID(exe ์ด๋ฆ„์ผ ์ˆ˜๋„ ์žˆ์Œ)
  4. ๋ฒ„์ „ ์‹๋ณ„์ž์ž…๋‹ˆ๋‹ค. ์ˆซ์ž ๋ฒ„์ „์€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ •ํ™•ํ•œ ์ข…์†์„ฑ ๋ฒ„์ „๋„ ํ†ตํ•ฉํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๋ณ„ guid ๋˜๋Š” ํ•ด์‹œ๊ฐ€ ์ ์ ˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ๋ณด๋ฉด c:\users\username\AppData\Local\dotnetApps\elevated\MyCoolApp\1.0.0.0_abc123\MyCoolApp.dll
(์•ฑ ์ด๋ฆ„์ด MyCoolApp์ธ ๊ฒฝ์šฐ ๋ฒ„์ „ ๋ฒˆํ˜ธ๋Š” 1.0.0.0์ด๊ณ  ํ•ด์‹œ/guid๋Š” abc123์ด๋ฉฐ ์ƒ์Šน๋œ ๋ฒ„์ „์œผ๋กœ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.)

์ถ”์ถœ๊ธฐ์— ํŒŒ์ผ์„ ์‚ฝ์ž…ํ•˜๋Š” ์ž‘์—…๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Windows์—์„œ๋Š” ๋‹จ์ˆœํžˆ ๊ธฐ๋ณธ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Linux ๋ฐ Mac์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ํ˜ธ์ŠคํŠธ(์ถ”์ถœ๋œ ํŒŒ์ผ ์ฐพ๊ธฐ) ๋ฐ ์ง„๋‹จ(DAC ๋˜๋Š” ๊ธฐํƒ€ ํŒŒ์ผ ์ฐพ๊ธฐ)์—์„œ ์กฐ์ •์ด ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

CC @swaroop-sridhar @jeffschwMSFT @vitek-karas

๋‚˜๋Š” ์ด ์น˜๋ฃŒ๋ฒ•์ด ์งˆ๋ณ‘๋ณด๋‹ค ๋” ๋‚˜์˜๋‹ค๊ณ  ๋Š๋‚€๋‹ค. ์™ธ๋ถ€ ๋””๋ ‰ํ† ๋ฆฌ(OS๋งˆ๋‹ค ๋‹ค๋ฆ„), ์—…๋ฐ์ดํŠธ, ์ œ๊ฑฐ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ฒ˜์Œ์— ์ด ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ์ด์œ (๋ชจ๋“  ๊ฒƒ์„ ๋‹จ์ˆœํ•˜๊ณ , ํœด๋Œ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋…๋ฆฝ์ ์ด๊ณ  ๊นจ๋—ํ•œ ์ƒํƒœ๋กœ ์œ ์ง€)์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ ˆ๋Œ€์ ์œผ๋กœ ์ด ๋ฐฉ์‹์ด์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ ๋‹จ์ผ ๊ธฐ๋ณธ ์‹คํ–‰ ํŒŒ์ผ๊ณผ ์••์ถ•์„ ํ‘ผ ํŒŒ์ผ์ด ํ•ด๋‹น ์‹คํ–‰ ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๊ฑฐ๋‚˜ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์–ด๋””๋กœ ๊ฐˆ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ํ›จ์”ฌ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ €๋งŒ ๊ทธ๋Ÿฐ๊ฑด์ง€ ๋‹ค๋ฅธ ๋ถ„๋“ค์˜ ์˜๊ฒฌ๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

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

@Kosyne ์— ๋™์˜ - ์ œ์•ˆ๋œ ์ดˆ๊ธฐ ์†”๋ฃจ์…˜์€ ์ผ์ข…์˜ "์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ"์„ ๋‹จ์ˆœํžˆ ์ž๋™ํ™”ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•œ ๋ช…์˜ ๊ฐ„๋ถ€๋กœ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๋ฌธ์ œ์˜ ํ•œ๊ณ„์˜€๋‹ค๋ฉด ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๊ทธ ์ž๋™ํ™”๋ฅผ ์Šค์Šค๋กœ ์ˆ˜ํ–‰ํ–ˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ผ ์‹คํ–‰ ์ œ์•ˆ์˜ ์ฃผ์š” ๋ชฉํ‘œ๋Š” ๊ด€๋ฆฌ๋˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์—์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒํ•œ ๋Œ€์ƒ "์„ค์น˜" ๋””๋ ‰ํ† ๋ฆฌ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ๋ˆ„๊ฐ€ ์•Œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋ฌผ๋ก  ์‹œ์ž‘ ํ›„ ์ž์ฒด์ ์œผ๋กœ ์ธ๊ณต๋ฌผ์„ ๋‚จ๊ธฐ์ง€ ์•Š์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ๊ฐ’ ์•„๋‹˜).

์œ„์˜ ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์ œ์•ˆ์„ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์— ์••์ถ•์„ ํ’€๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

๋‚˜๋จธ์ง€ ์˜๊ฒฌ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์••์ถ•์„ ํ‘ธ๋Š” ๊ฒƒ์€ _์ด๋ฏธ_ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ถ”์ถœ๋œ ๊ฐ’์„ ์ƒ๋‹นํžˆ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž์ฒด ์••์ถ• ํ•ด์ œ zip์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๊ฒƒ์ด ๋Œ€๋‹ตํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฉฐ ์„ค์น˜์˜ ๋˜ ๋‹ค๋ฅธ ์ด๋ฆ„์ผ ๋ฟ์ด๋ผ๋Š” ๋งŽ์€ ์šฐ๋ ค์— ๋Œ€๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ์˜ ์œ„์น˜๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

  • ๊ตฌ์„ฑ ํŒŒ์ผ ์ฐพ๊ธฐ(์—†์œผ๋ฉด ์ฆ‰์„์—์„œ ์ƒ์„ฑํ•˜๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ์ž ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Œ)
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์†Œ์Šค exe์™€ ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์ฐพ๊ธฐ/๋งŒ๋“ค๊ธฐ.
  • ์ ์ ˆํ•œ ๋ชจ๋‹ˆํ„ฐ๋ง/์ง€์›์„ ์œ„ํ•ด PID/ํ”„๋กœ์„ธ์Šค ์ด๋ฆ„์ด ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ์ค‘ ํ•œ ๋ช…์ด ์‹ค์ œ๋กœ HD๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์‹œ์Šคํ…œ์—์„œ DVD์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

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

์—ฌ๊ธฐ์„œ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ์‹ค์ œ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹จ์ง€ (ํšจ๊ณผ์ ์œผ๋กœ) ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์ˆ˜๋ฐฑ MB์˜ ํ•ฉ๋ฆฌ์ ์ธ ์•ฑ์— ๋Œ€ํ•œ ํŒŒ์ผ ํฌ๊ธฐ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ œ์•ˆ๋œ ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐ CLR ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์ด๋ฏธ ์ด์™€ ๊ฐ™์€ ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ CoreCLR์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ด์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์ƒ๋‹นํžˆ ์ข๊ณ  ๊ตฌ์ฒด์ ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@GSPP ์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋Š˜ 7z-Extra ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ๋ผ๋ฉด ์•„์˜ˆ ๊ฐ–์ง€ _์•Š๋Š”_ ๊ฒƒ์ด ๋‚ซ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒŒํ‹ฐ์— ๋Šฆ์–ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ถ”์  ์ค‘์ธ ์ค‘๋ณต ํ‹ฐ์ผ“์— ๊ฒŒ์‹œ๋œ ๋งํฌ๋ฅผ ๋”ฐ๋ผ๊ฐ€์„œ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์—์„œ ์ตœ์‹  ๋Œ“๊ธ€์„ ์ฝ์€ ํ›„ ํฌ์žฅ ๋ฐ ์ถ”์ถœ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณด๋‹ˆ ์œ ๊ฐ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ง€๋‚˜์นœ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ฝ˜์†” ์•ฑ์šฉ SFA ๋ฐฐํฌ ๊ธฐ๋Šฅ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‹จ์ผ ํŒŒ์ผ์— ์žˆ๋Š” ์ผ๋ถ€ ๋„คํŠธ์›Œํฌ, IO ๋ฐ ์ผ๋ถ€ ์™ธ๋ถ€ ์ข…์†์„ฑ(nuget ๋“ฑ)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋ณธ์ ์ธ ์ฝ˜์†” ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ๋งํ•˜๋ ค๋Š” ๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ๋Œ€์‹  ์•„๋ฌด๋„ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š” ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•˜๋Š” ๋Œ€์‹  ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋น ๋ฅด๊ฒŒ ์‚ฐ์ถœํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์œผ๋กœ ์ž‘๊ฒŒ ์‹œ์ž‘ํ•˜๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋Š˜ 7z-Extra๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ์†”๋ฃจ์…˜์ด ์˜ค๋Š˜๋‚  ๋งŽ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋งž์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒƒ ์ค‘ ๋˜ ๋‹ค๋ฅธ ์˜ˆ: https://www.boxedapp.com/exe_bundle.html

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

๊ฐœ์ธ์ ์œผ๋กœ, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์—ฌ๊ธฐ์„œ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์„ ํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํ•ต์‹ฌ ํŒ€ ๋‚ด์—์„œ ์ด์— ๋Œ€ํ•ด ๋งŽ์€ ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ด์„ ๋ฐฐ์น˜ํ•˜๊ณ  ๊ธ€๋กœ๋ฒŒ ๋„๊ตฌ(๊ถŒ์žฅ๋˜์ง€๋งŒ ์ง€์›๋˜์ง€๋Š” ์•Š์Œ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋ฉฐ ์„ค์น˜๋„ ์ƒ๋‹นํžˆ ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํšจ๊ณผ์ ์œผ๋กœ, ์šฐ๋ฆฌ๋Š” dotnet publish-single-file ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์ด๋Š” ๋ฌด๋Œ€ ๋’ค์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋‚ด๊ฐ€ ์ด ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ๋งŒํผ ์™ธ๋ถ€์—์„œ ์ž˜ ํ•  ์ˆ˜ ์žˆ๋Š” ์–ด๋–ค ๊ฒƒ(๊ทธ๊ฒƒ์ด _ํ•ญ์ƒ_ ์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์˜๋ฏธ)์€ ๊ฐ–๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋” ๋†’์€ ์ˆ˜์ค€์˜ ์งˆ๋ฌธ์„ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋ฅผ ์›ํ•˜๋Š” ๊ณ ๊ฐ์˜ ์ฃผ๋œ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ฃผ๋กœ:

  1. ํฌ์žฅ? ๊ทธ๋ ‡๋‹ค๋ฉด ์†”๋ฃจ์…˜์ด ๋ฐ›์€ ํŽธ์ง€ํ•จ์ด๋“  ํƒ€์‚ฌ ๋„๊ตฌ์ด๋“  ๊ด€๊ณ„์—†์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํŠน์„ฑ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
    a) ์‹œ์ž‘ ์‹œ๊ฐ„(์ฒซ ์‹คํ–‰ ์ดํ›„)
    b) ์“ฐ๊ธฐ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ
    c) ์‹คํ–‰ ํ›„ ํŒŒ์ผ์„ ๋‚จ๊ธฐ์ง€ ์•Š์Œ
    d) ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ํ•„์š” ์—†์Œ
    2) ์„ฑ๋Šฅ?
    a) ์†๋„(๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ์˜ ์ •์  ๋งํฌ, ๋‹ค์ค‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋กœ๋“œ ๋ฐฉ์ง€, ๋ชจ๋“ˆ ๊ฐ„ ์ตœ์ ํ™” ๋“ฑ)
    b) ์ฝ”๋“œ ํฌ๊ธฐ(์ธ์ฆ์„œ ํ•˜๋‚˜๋งŒ ํ•„์š”, ํŠธ๋ฆฌ ์‰์ดํ‚น ๋“ฑ)
    3) ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

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

์ปดํŒŒ์ผ๋œ ์‹คํ–‰ ํŒŒ์ผ์€ ๋‹ค์Œ์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๊ด€๋ จ ์ข…์†์„ฑ ํŒจํ‚ค์ง€
  • ์‹คํ–‰ ์•„ํ‹ฐํŒฉํŠธ ์—†์Œ(๋””์Šคํฌ ์“ฐ๊ธฐ ์—†์Œ)

Re @swaroop-sridhar ๊ฐํžˆ ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ๊ณ ์œ ํ•œ ์„ฑ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์œผ๋ฏ€๋กœ ํ•ต์‹ฌ ์†”๋ฃจ์…˜์„ ๋‹ค๋ฃฌ ํ›„ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋งค๋‹ฌ๋ฆฐ ๊ณผ์ผ์„ ๊ณจ๋ผ ๊ฑฐ๊ธฐ์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@swaroop-sridhar ์ €์—๊ฒŒ ์ด๊ฒƒ์€ ์ตœ์ข… ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ ํŒจํ‚ค์ง•๊ณผ ์‚ฌ์šฉ ์šฉ์ด์„ฑ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์นœ ์„ค์น˜๋ฅผ ์ฒ˜๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํด๋ฆญํ•˜๊ณ  ์‹คํ–‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ๋‹จ์ผ ํŒŒ์ผ ์• ๋“œ์˜จ์„ ๊ด€๋ฆฌํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

@strich ์ž„๋ฒ ๋”ฉ์— ๋Œ€ํ•œ ์š”์ ์€ ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‚ฌ์šฉ๋˜๋ฉฐ ๋ฐฐํฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ด๋ฉด ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ธ์ง€ ์•„๋‹Œ์ง€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์ œ์•ˆ๋œ ์†”๋ฃจ์…˜(์ด ์‹œ์ ์—์„œ ๋ณธ์งˆ์ ์œผ๋กœ ์••์ถ•)์ด _ํ•ต์‹ฌ์—_ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ•ต์‹ฌ์— ์žˆ๋Š” ๊ฒƒ์€ ๋ณ€๊ฒฝ์— ๋Œ€ํ•ด ํ›จ์”ฌ ๋” ๋†’์€ ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์™ธ๋ถ€ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜์ • ๋ฐ ํ™•์žฅ์ด ๋” ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

์†”์งํžˆ ๋งํ•ด์„œ ๋” ๋‚˜์€ ์˜ต์…˜์„ ๋ณด๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ ๋Œ€์‹  ๋ฉ”๋ชจ๋ฆฌ์—์„œ dll์„ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(์ผ๋ถ€ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€๋งŒ ๊ฐ€๋Šฅํ•จ).
๊ทธ๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ˆœ์ˆ˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์••์ถ• ํ’€๊ธฐ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋””์Šคํฌ ํžˆํŠธ ์—†์ด _์ „์ฒด_ ์ผ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ํ•ต์‹ฌ์— ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ๋Ÿฐํƒ€์ž„์„ ์ˆ˜์ •ํ•ด์•ผ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ๋†’๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ๊ทธ ์ž์ฒด๋กœ ๊ฐ€์น˜๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Hashicorp's Consul๊ณผ ๊ฐ™์€ Go ๋„๊ตฌ์˜ ๊ฒฝํ—˜์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ด ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์‹œ์Šคํ…œ์— ๋“œ๋กญํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ exe ํŒŒ์ผ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ์—†๊ณ , ํด๋”๋ฅผ ๋ณต์‚ฌํ•˜์ง€๋„ ์•Š๊ณ , ์ˆ˜๋ฐฑ ๊ฐœ์˜ ํŒŒ์ผ ๋ชฉ๋ก์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐพ์„ ํ•„์š”๋„ ์—†๊ณ , ์ •๋ง ์ข‹์€ ์ตœ์ข… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ dll์—์„œ๋„ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‚ด ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ž‘๋™ํ• ์ง€ ํ™•์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ญ์ œ๋Š” ์ข…์†์„ฑ ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ผ ํŒŒ์ผ์ด๊ธฐ๋„ ํ•จ). ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์ง„ํ–‰ ์ƒํ™ฉ์€ ์ž˜ํ•ด. ์šฐ๋ฆฌ๋Š” Fody.Costura๋ฅผ ์‚ดํŽด๋ณด์•˜๊ณ  ์ผ๋ถ€ ํ•ญ๋ชฉ์—์„œ๋Š” ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ .NET Core์— ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ข‹์€ ์˜ˆ๋Š” Hashicorp์˜ Consul๊ณผ ๊ฐ™์€ Go ๋„๊ตฌ์˜ ๊ฒฝํ—˜์„ ์‚ดํŽด๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด, ์˜์‚ฌ ๊ฐ™์€ ๋„๊ตฌ์˜ ๊ฒฝ์šฐ ์ด์ƒ์ ์ธ ์†”๋ฃจ์…˜์€ ์ด ์ž์ฒด ์ถ”์ถœ ์ฆ‰ํฅ ์—ฐ์ฃผ๊ฐ€ ์•„๋‹ˆ๋ผ corert์ž…๋‹ˆ๋‹ค.

@mikedn ์™œ ๊ทธ๋ž˜? AOT ๋˜๋Š” JIT ์ปดํŒŒ์ผ์ด ๋ฐฐํฌ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@strich ์˜ ๋ง์„ ๋‘ ๋ฒˆ์งธ๋กœ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋ฐฐํฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ช…๋ น์ค„์ด ์žˆ๋Š” ์ž‘์€ ๋„๊ตฌ์ด๊ฑฐ๋‚˜ ์ตœ์†Œํ•œ ์ˆ˜๋ช…์ด ์‹œ์ž‘๋˜๋Š” ๋ชจ๋“  ์ฝ˜์†” ์•ฑ์— ์‹ ์„ ํ•œ ๊ณต๊ธฐ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์Šค์œ„์น˜.

์™œ ๊ทธ๋ž˜? AOT ๋˜๋Š” JIT ์ปดํŒŒ์ผ์ด ๋ฐฐํฌ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒƒ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ exe ํŒŒ์ผ์„ ๋ชจ๋“  ์‹œ์Šคํ…œ(์ ์ ˆํ•œ OS๊ฐ€ ์žˆ๋Š” ๋ชจ๋“  ์‹œ์Šคํ…œ, ๊ฒฐ๊ตญ ๊ธฐ๋ณธ ํŒŒ์ผ)์— ๋†“๊ณ  ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์œผ๋ฏ€๋กœ ์˜์‚ฌ์™€ ๊ฐ™์€ ์—์ด์ „ํŠธ์—๊ฒŒ๋Š” ์ข‹์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž์ฒด ์ถ”์ถœ ์†”๋ฃจ์…˜ ์ด์ƒ์œผ๋กœ Go๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

@mikedn ์ถ”์ธกํ•˜์ง€๋งŒ

1) ์•„์ง ํ”„๋กœ๋•์…˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‚ด๊ฐ€ ์•„๋Š” ํ•œ)!
2) ๋™์  ๊ธฐ๋Šฅ์„ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(IL ์ƒ์„ฑ, ์ž„์˜ ๋ฐ˜์‚ฌ)
3) ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค(๋‹ค์‹œ ์ด์ƒ์ ์œผ๋กœ ์••์ถ•๋จ)

์ด ๋ฌธ์ œ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ๋ฌป๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ์˜ ์˜๊ฒฌ์„ ์ œ์‹œํ•  ๋ฟ์ž…๋‹ˆ๋‹ค! ์ด ์ด์ ์„ ์–ป๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋Ÿฐํƒ€์ž„ ๋ชจ๋ธ๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ๋“ค์€ ์ง๊ต์  ๊ด€์‹ฌ์‚ฌ๋‹ค.

AOT ๋˜๋Š” JIT ์ปดํŒŒ์ผ์ด ๋ฐฐํฌ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ค ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

JIT๊ฐ€ ์—†์œผ๋ฉด ๋””๋ฒ„๊น… ์Šคํ† ๋ฆฌ์™€ ๊ฐ™์€ ๋‚ด์šฉ์„ ์ถฉ๋ถ„ํžˆ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JIT ๋ถ€๋ถ„์€ ๋ฌธ์ œ๋ฅผ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— Go์—์„œ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—”์ง€๋‹ˆ์–ด๋ง์ด๋ฏ€๋กœ ๋” ์–ด๋ ค์šด ๋ฌธ์ œ์— ๋” ๋งŽ์€ ์—”์ง€๋‹ˆ์–ด๋ฅผ ํˆฌ์ž…ํ•˜๊ณ  ์ƒˆ๋กœ์šด ๋ณต์žก์„ฑ์œผ๋กœ ์‚ด์•„๊ฐ€๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ฒ”์œ„๋ฅผ ์ขํž ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Self-extractor๋Š” ํ•„์š”ํ•œ ๊ธฐ์ˆ ์„ ๊ฐ€์ง„ ์—”์ง€๋‹ˆ์–ด์˜ ์ˆ˜๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์œ„๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Go ํ”„๋กœ์ ํŠธ(JIT ์š”๊ตฌ ์‚ฌํ•ญ ์—†์Œ)์™€ ์œ ์‚ฌํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ๋“ค์€ "์‹คํ—˜์ " ๋ ˆ์ด๋ธ”๋งŒ ์žˆ์œผ๋ฉด CoreRT์— ๋งค์šฐ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฆ˜ ์€ ์‹œ๋„ํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์‰ฝ์Šต๋‹ˆ๋‹ค . ์ „์ฒด CoreCLR๊ณผ ๋™์ผํ•œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ, ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ, CoreFX ๋ฐ CoreLib์˜ ๋Œ€๋ถ€๋ถ„์„ ์‚ฌ์šฉํ•˜๊ณ  ์ž์ฒด ํฌํ•จ๋œ ์ž‘์€ ์‹คํ–‰ ํŒŒ์ผ(ํ•œ ์ž๋ฆฌ ๋ฉ”๊ฐ€๋ฐ”์ดํŠธ)์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์‹ค์ œ๋กœ ์•„์ง ์ƒ์‚ฐ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋‚ด๊ฐ€ ์•„๋Š” ํ•œ)!

์˜ˆ, ๋‚ด ์˜๊ฒฌ์€ ์ฃผ๋กœ MS ์‚ฌ๋žŒ๋“ค์„ ๋Œ€์ƒ์œผ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋“ค์€ ์ด ๋ชจ๋“  ๋ณ‘๋ ฌ, ๊ด€๋ จ, ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ/์•„์ด๋””์–ด(corert, illinger)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ด์ œ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž์ฒด ์ถ”์ถœ ๊ธฐ๋Šฅ์€ ์ด๋ฏธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ง€์ ํ–ˆ๋“ฏ์ด "์Œ, ์šฐ๋ฆฌ๋Š” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์ž์‹ " ๊ทธ๋Ÿฐ ๊ฒƒ. ๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ์„ "์ˆจ๊ฒจ์ง„" ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‹จ์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋งŽ์€ ๋™์  ๊ธฐ๋Šฅ(IL ์ƒ์„ฑ, ์ž„์˜ ๋ฐ˜์‚ฌ)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

@MichalStrehovsky ํ™•์‹คํžˆ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์‹คํ—˜์ ์ธ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉฐ(.NET Core๋กœ ์ด๋™ํ•  ๋•Œ๊ฐ€ ๋˜์—ˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค) ์ž„์‹œ ํด๋”๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋„ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ์ด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋น„๋ก ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์ง„ํ–‰๋œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค :)

@mikedn ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์ค‘ ๋ณ‘๋ ฌ ์†”๋ฃจ์…˜์€ ํ›จ์”ฌ ๋” ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ ์ด์ƒ์ ์ธ ์†”๋ฃจ์…˜์€ ์ผ์ข…์˜ ์Šˆํผ ILLinker/weaver ์ ‘๊ทผ ๋ฐฉ์‹์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์„ ์‹คํ–‰ํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์–ด๋””๋กœ ๊ฐ€๋Š”์ง€ ์•Œ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด ์ถœ์‹œ๋œ ๊ฒƒ์— ๋Œ€ํ•ด ์ •๋ง ํฅ๋ถ„๋˜์ง€๋งŒ @morganbr์„ ๊ฒŒ์‹œํ•œ ์ดˆ๊ธฐ ์ œ์•ˆ์— ๋Œ€ํ•ด์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํฅ๋ถ„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜๊ฐ€ ์ œ๊ธฐํ•œ ์งˆ๋ฌธ ๋ชฉ๋ก์— ๋Œ€ํ•œ ์ œ ๋‹ต๋ณ€์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ฒŒ์‹œํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ(๊ทธ๋ž˜์„œ ๊ณตํ†ต์ ์œผ๋กœ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ ์„ธํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค), IMHO๊ฐ€ ์ œ์•ˆํ•œ '๋””์Šคํฌ์— ์••์ถ• ํ’€๊ธฐ' ์†”๋ฃจ์…˜์€ ์ œ๊ฐ€ ๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๊ฒƒ์ด ์ „ํ˜€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ตฌํ˜„๋˜๊ณ  ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋งํ–ˆ๋“ฏ์ด '์งˆ๋ณ‘'๋ณด๋‹ค ๊ฑฐ์˜ ๋” ๋‚˜์  ๊ฒƒ์ž…๋‹ˆ๋‹ค. @jkotas

@strich ๋ฐ @ayende์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
์ปดํŒŒ์ผ๋œ ์‹คํ–‰ ํŒŒ์ผ์€ ๋‹ค์Œ์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ชจ๋“  ๊ด€๋ จ ์ข…์†์„ฑ ํŒจํ‚ค์ง€
์‹คํ–‰ ์•„ํ‹ฐํŒฉํŠธ ์—†์Œ(๋””์Šคํฌ ์“ฐ๊ธฐ ์—†์Œ)

๋””์Šคํฌ ๋Œ€์‹  ๋ฉ”๋ชจ๋ฆฌ์—์„œ .dll์„ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Š” IMO๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์˜ ์ œ์•ˆ๊ณผ ๋น„๊ตํ•˜์—ฌ MSFT ์ €์ˆ˜์ค€ ๊ฐœ๋ฐœ์ž์˜ ๊นŠ์€ ์ „๋ฌธ ์ง€์‹์„ ๊ฐ€์งˆ ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์™ธ๋ถ€ ๋„๊ตฌ(์ด๋ฏธ ๊ฐ€์ง€๊ณ  ์žˆ์Œ, https://github.com/dgiagio/warp ์ฐธ์กฐ). ์ด๊ฒƒ์ด ๋‹ฌ์„ฑ๋˜๋ฉด ์ฒซ ๋ฒˆ์งธ ์‹คํ–‰๊ณผ ํ›„์† ์‹คํ–‰ ์‚ฌ์ด์— ์‹œ๊ฐ„ ์ฐจ์ด๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋‚˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์˜๊ฐ/์˜ˆ๋ฅผ ๋“ค์–ด Linux 3.17+์—๋Š” dlopen์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” memfd_create๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ฃผ์ œ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ์ง€์› ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋””์ž์ธ ์ œ์•ˆ์„ ๊ณผ๋„ํ•˜๊ฒŒ ์ธ๋ฑ์‹ฑํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์„ ์˜ตํŠธ์ธํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ์‚ฌ๋žŒ๋งŒ ์ž ์žฌ์ ์ธ ๋ถˆ์ด์ต(ํŠธ๋ฆฌ ์‰์ดํ‚น ๋ถ€์กฑ ๋“ฑ)์„ ์ผ์œผํ‚ค๊ณ  ๋‹ค๋ฅธ ๋ชจ๋“  ์‚ฌ๋žŒ(๋Œ€๋‹ค์ˆ˜?)์€ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ  ์„ฑ๋Šฅ ์ด์ (?)

@swaroop-sridhar @MichalStrehovsky ๋กœ ํ•œ ๊ฑธ์Œ ๋ฌผ๋Ÿฌ๋‚˜๋ฉด, ํ•˜๋‚˜์˜ ์†”๋ฃจ์…˜์œผ๋กœ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์ˆ˜์šฉํ•˜๊ธฐ ์–ด๋ ค์šธ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ๋‹ค๋ฅธ ๋ชฉํ‘œ/์š•๊ตฌ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ๊ด‘๋ฒ”์œ„ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • CLI ๋„๊ตฌ๋Š” ๋งค๋ฒˆ ๋น ๋ฅด๊ฒŒ ์‹คํ–‰๋˜๊ณ  ์†Œ๊ทœ๋ชจ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ๋ฅผ ์ด์ƒ์ ์œผ๋กœ ์›ํ•ฉ๋‹ˆ๋‹ค. CoreRT์— ๋” ์ ํ•ฉํ• ๊นŒ์š”?
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” JIT ๋ฐ ๋™์  ์ฝ”๋“œ ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋” ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ์„ ๋Œ€๊ฐ€๋กœ ๋” ๊ธด ์ตœ์ดˆ ์‹คํ–‰(์ด์ƒ์ ์œผ๋กœ๋Š” <1s), ๋” ํฐ ๋ฐฐํฌ๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ธŒ๋ ˆ์ธ ๋คํ”„๊ฐ€ ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ฐ”๋ณด๊ฐ€ ๋˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ด ์ฃผ์ œ์— ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค. ๋ชจ๋“  ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฌ๋ฉฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์˜๊ฒฌ์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค! :)

ํ”Œ๋Ÿฌ๊ทธ์ธ ์ •๋ณด.
๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ์œ ์ผํ•œ ๊ฒƒ์€ Assembly.LoadFrom ๋˜๋Š” LoadLibrary ํ˜ธ์ถœ์—์„œ ์ฐจ๋‹จ๋˜๋Š” _not_ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๊ฑด ํ•„์š” ์—†๊ณ  ๋‚˜๋จธ์ง€๋Š” ํ˜ผ์ž ํ•  ์ˆ˜ ์žˆ์–ด์š”.

@ayende "LoadFrom ๋“ฑ์—์„œ ์ฐจ๋‹จ๋จ"์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ข€ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด์— ๋Œ€ํ•œ ์ œ์•ˆ ์ค‘ ์ผ๋ถ€๋Š” CoreRT๋ฅผ ํฌํ•จํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ (์•„๋งˆ๋„) ๊ด€๋ฆฌ๋˜๋Š” dll์„ ๋กœ๋“œํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๊ด€๋ฆฌ๋˜๋Š” dll์— ๋Œ€ํ•œ ๊ฒฝ๋กœ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ dll์—์„œ LoadLibrary ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

ํ”Œ๋Ÿฌ๊ทธ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” _๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ _์ฐจ๋‹จ_๋˜์–ด์„œ๋Š” ์•ˆ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ํŒŒํ—ค์น˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ณ , ์–ธ๋œป ๋ณด๊ธฐ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด _๊ฐ€๋Šฅ_ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค(Windows์— ๋Œ€ํ•ด์„œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋จ).

  • ์ „์ฒด CoreCLR์„ exec์— ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค(์ž„๋ฒ ๋””๋“œ ๋ฆฌ์†Œ์Šค ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค).
  • ๊ธฐ๋ณธ dll์„ ์—ด๊ฑฐํ•˜๊ณ  MemoryModule (https://github.com/fancycode/MemoryModule)์™€ ๊ฐ™์€ ๊ฒƒ์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
  • ๋Ÿฐํƒ€์ž„์„ ํ˜ธ์ถœํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ _์•Š์€_ ๊ฒƒ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ICLRRuntimeHost2::ExecuteAssembly ๋Š” ๋ฒ„ํผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋””์Šคํฌ์— ์žˆ๋Š” ํŒŒ์ผ๋งŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ (๋‚ด๊ฐ€ ํ™•์‹ ํ•˜๋Š” ๋งŽ์€ ๊ฒƒ ์ค‘) ์‹ค์ œ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ฒซ ๋ฒˆ์งธ ์‡ผ ์Šคํ† ํผ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๊ด€๋ จ ํ•ญ๋ชฉ์„ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด ์ œ๊ฐ€ ๋‹จ์ผ ํŒŒ์ผ ์‹คํ–‰์„ ์›ํ•˜๊ณ  ์™œ ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ์†”๋ฃจ์…˜์€ ์™ธ๋ถ€์—์„œ๊ฐ€ ์•„๋‹ˆ๋ผ CoreCLR์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(zip ์˜ˆ์ œ์—์„œ์™€ ๊ฐ™์ด).

MemoryModule๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

MemoryModule์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์ง„๋‹จํ•  ์ˆ˜ ์—†์œผ๋ฉฐ(์˜ˆ: ์ผ๋ฐ˜ ๋””๋ฒ„๊ฑฐ, ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋“ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Œ) MemoryModule์€ ๋‚ด์žฅ๋œ ๋ชจ๋“  OS ๋ณด์•ˆ ์กฐ์น˜(์˜ˆ: ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ๋“ฑ)๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ์†”๋ฃจ์…˜์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ด๋‹ค.

ํ™•์žฅ๋˜์ง€ ์•Š์€ ๋‹จ์ผ ํŒŒ์ผ ๋ฒˆ๋“ค์—์„œ ์‹คํ–‰์„ ์ง€์›ํ•˜๋ ค๋ฉด ์ƒˆ๋กœ์šด API(๊ด€๋ฆฌํ˜• ๋ฐ ๋น„๊ด€๋ฆฌํ˜• ๋ชจ๋‘)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” "๊ทธ๋ƒฅ ์ž‘๋™"ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•ˆํ‹ฐ ๋งฌ์›จ์–ด ๊ฒ€์‚ฌ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€
์ตœ๊ทผ์ฒ˜๋Ÿผ MemoryModule์—์„œ Windows ์—”์ง€๋‹ˆ์–ด๊ฐ€ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
mem์—์„œ ๋กœ๋“œ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  .net ์–ด์…ˆ๋ธ”๋ฆฌ?

https://twitter.com/WDSecurity/status/1047380732031762432?s=19

ํŽธ์ง‘: ํ  MemoryModule์€ ๊ธฐ๋ณธ ๋ชจ๋“ˆ์„ ๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด OS์— ๋‚ด์žฅ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ œ์•ˆ์„ ๋ฌด์‹œํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•œ ์ด์œ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2018๋…„ 12์›” 5์ผ ์ˆ˜์š”์ผ 01:46 Jan Kotas [email protected] ์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

MemoryModule๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค.

MemoryModule์„ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋“œ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์ง„๋‹จํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ:
์ผ๋ฐ˜ ๋””๋ฒ„๊ฑฐ, ํ”„๋กœํŒŒ์ผ๋Ÿฌ ๋“ฑ)์—์„œ ์ž‘๋™ํ•˜๊ณ  MemoryModule
๊ตฌ์ถ•๋œ ๋ชจ๋“  OS ๋ณด์•ˆ ์กฐ์น˜(์˜ˆ: ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ๋“ฑ)๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค
์ง€์›๋˜๋Š” ์†”๋ฃจ์…˜์œผ๋กœ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ด๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด API(๊ด€๋ฆฌํ˜• ๋ฐ ๋น„๊ด€๋ฆฌํ˜• ๋ชจ๋‘)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
ํ™•์žฅ๋˜์ง€ ์•Š์€ ๋‹จ์ผ ํŒŒ์ผ ๋ฒˆ๋“ค์—์„œ ์‹คํ–‰์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด
ํ”„๋กœ๊ทธ๋žจ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” "๊ทธ๋ƒฅ ์ž‘๋™"ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์Šค๋ ˆ๋“œ์— ๊ฐ€์ž…ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/dotnet/coreclr/issues/20287#issuecomment-444314969 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AEBfudvVHxpbeKa-L_vTQjbnNZZsn6Meks5u1xdlgaJpZM4XK-X_
.

๋ชจ๋“  ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์—…๋ฐ์ดํŠธ๋œ ๊ณ„ํš์„ ๊ณง ๊ฒŒ์‹œํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

@NinoFloris ์ฐธ์กฐ dotnet/coreclr#21370

์ด ํ† ๋ก ์— ๋Šฆ์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋„์›€์ด ๋˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

@mikedn ์ด ๋งํ•œ ๊ฒƒ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด, ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ‘๋ ฌ ์†”๋ฃจ์…˜์„ ๊ฐ–๋Š” ๊ฒƒ์€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฏธ๋ž˜์— MS์˜ ์ดˆ์ ์ด ์–ด๋””์— ์žˆ์„ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋˜์ง‘๋‹ˆ๋‹ค. CoreRT์—์„œ ์ˆ˜ํ–‰๋œ ๋›ฐ์–ด๋‚œ ์ž‘์—…์€ ๊ณต์‹ ๋กœ๋“œ๋งต ์—†์ด ์—ฌ์ „ํžˆ ์‹คํ—˜์ ์ด๋ผ๋Š” ๋ ˆ์ด๋ธ”์ด ์ง€์ •๋˜์–ด ์žˆ๊ณ  CoreCLR(CPAOT, ํ˜„์žฌ ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ)์—์„œ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์ด ๊ตฌํ˜„๋˜์–ด ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ๋Š” ๋ง์„ ์ž˜๋ชป ์„ ํƒํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค(Silverlight...).

CoreRT์˜ ๋›ฐ์–ด๋‚œ ๋Ÿฐํƒ€์ž„์„ ๊ณ ์ˆ˜ํ•˜๊ณ  ๊ธฐ๋ณธ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜๋ฉด์„œ ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด CoreRT์— JIT ํ†ตํ•ฉ(๊ทธ๋ฆฌ๊ณ  ์ค€๋น„๋  ๋•Œ๊นŒ์ง€ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์ž‘์—… ํ™•์žฅ) ์ž‘์—…์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? JIT ๊ธฐ๋Šฅ์„ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ JIT๋ฅผ CoreRT ๊ณ ์œ ํ•˜๊ฒŒ ์ปดํŒŒ์ผ๋œ ์‹คํ–‰ ํŒŒ์ผ ๋‚ด๋ถ€์— ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์„๊นŒ์š”?
์ด๊ฒƒ์ด ๋ชจ๋“  ์„ธ๊ณ„์˜ ์ตœ๊ณ ๊ฐ€ ์•„๋‹ˆ๊ฒ ์Šต๋‹ˆ๊นŒ? ์˜ˆ. ๊ฐ€์žฅ ์ž‘์€ ์‹คํ–‰ ํŒŒ์ผ, ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ์ž‘ ์‹œ๊ฐ„, JIT๋ฅผ ๋ฐฐ์น˜ํ•˜๊ณ  ์ „์ฒด ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ IL ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•จ์œผ๋กœ์จ CoreRT์˜ AOT ์ฝ”๋“œ ์ œํ•œ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
IMO๋Š” ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋ฅผ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ๊ธฐ ๊ธฐ๋Šฅ ๋Œ€์‹  '์ตœ์ƒ์˜' ์†”๋ฃจ์…˜์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

์•„๋งˆ๋„ ๋‚ด ๊ด€์‹ฌ์‚ฌ๋Š” ๋ณ‘๋ ฌ ์ œํ’ˆ(๋‹ค์‹œ @mikedn ์ธ์šฉ)์„ ์ค„์ด๊ณ  ์—ฌ๊ธฐ์— ์žˆ๋Š” ์ œํ’ˆ(๋กœ๋“œ๋งต ๊ณต์œ  ํฌํ•จ)์— ๋Œ€ํ•œ ๊นŠ์€ ์•ฝ์†, ํ™•์žฅ ๋ฐ ์ง€์›์— ๋” ์ค‘์ ์„ ๋‘๊ณ  ์‹ถ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋œ ๋ณ‘๋ ฌ ์ œํ’ˆ

.NET Core๋ผ๋Š” ํ•˜๋‚˜์˜ ์ œํ’ˆ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. CoreRT๋Š” ๋ณ„๋„์˜ ์ œํ’ˆ์ด ์•„๋‹ˆ๋ฉฐ ์•ž์œผ๋กœ๋„ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ์ œํ’ˆ์— ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ํ˜„์žฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์˜ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์ž…๋‹ˆ๋‹ค. ์›Œํฌ์Šคํ…Œ์ด์…˜ GC ๋ฐ ์„œ๋ฒ„ GC; ๋…๋ฆฝํ˜• ์•ฑ ๊ฒŒ์‹œ ๋Œ€ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์•ฑ ๊ฒŒ์‹œ.

@jkotas ์ดํ•ดํ•˜๊ณ  ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ํ›Œ๋ฅญํ•˜๋‹ค๋Š” ๋ฐ ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. "์ œํ’ˆ"์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ "์˜ต์…˜/์†”๋ฃจ์…˜"์œผ๋กœ ๋ฐ”๊พธ๋ฉด .NET Core ์ „์ฒด ์ œํ’ˆ ๋‚ด๋ถ€์˜ ์˜ต์…˜/์†”๋ฃจ์…˜์œผ๋กœ CoreRT์— ๋Œ€ํ•œ ์šฐ๋ฆฌ ์ œํ’ˆ์˜ ์•ฝ์†์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ธ์ง€ ์™„์ „ํžˆ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋Š” ์šฐ๋ ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ๋ช‡ ๋…„ ๋™์•ˆ ์•ˆ์ „ํ•˜๊ฒŒ ์ง€์›๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. API๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋งŒ๋“ค๊ณ  API๋ฅผ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ ๊ฐ‘์ž๊ธฐ ์‚ฌ์šฉ ์ค‘๋‹จ๋œ๋‹ค๋ฉด ์–ด๋–จ์ง€ ์ƒ์ƒํ•ด ๋ณด์„ธ์š”. MS๊ฐ€ ์•„๋‹Œ ์—”ํ„ฐํ‹ฐ์—๊ฒŒ๋Š” ์ œํ’ˆ์˜ ์ผ๋ถ€์ธ ๋„๊ตฌ/์˜ต์…˜์ด ๋™์ผํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. CoreCLR๋กœ๋Š” (์ ์–ด๋„ ํ˜„์žฌ๋กœ์„œ๋Š”) ํ•  ์ˆ˜ ์—†๋Š” CoreRT์˜ ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค(๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” PACE๋กœ ์‹คํ–‰ ํŒŒ์ผ์„ ๋ณดํ˜ธํ•˜๊ณ  ๋งŽ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, IL ๋“ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‰ฌ์šด ์ •์  ๋งํฌ, ๊ธฐ๋ณธ ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ๋” ์‰ฌ์šด ์ดํ•ด, ๋‚œ๋…ํ™”๋ฅผ ์ปดํŒŒ์ผ๋Ÿฌ์— ์ง์ ‘ ๊ตฌ์ถ•ํ•  ๊ฐ€๋Šฅ์„ฑ ๋“ฑ). ๊ธฐ๋ณธ์ ์œผ๋กœ CoreRT์— ๋Œ€ํ•œ ๊ท€ํ•˜์™€ Michal ๋ฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ์ž‘์—…์€ IMO๊ฐ€ ์ฒ˜์Œ ์„ค๊ณ„๋œ ์ดํ›„๋กœ .NET ์ƒํƒœ๊ณ„์—์„œ ์ผ์–ด๋‚œ ์ตœ๊ณ ์˜ ์ผ ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋†’์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋„๊ตฌ/์˜ต์…˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์„ ๋•Œ๋งˆ๋‹ค ๋‚ด๋ถ€์ ์œผ๋กœ CoreRT ์˜ต์…˜์ด ์™„์„ฑ๋˜๊ณ  ํ™•์žฅ๋˜๋Š” ๋Œ€์‹  CoreRT์™€ ๊ฒฝ์Ÿํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฆฌ์†Œ์Šค ํ• ๋‹น์ด ์ž˜๋ชป๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํ† ๋ก ์„ ๋Œ๋ ค๋Š” ์˜๋„๋Š” ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. CoreRT ์ž‘์—…์ด ์–ผ๋งˆ๋‚˜ ๊ฐ์‚ฌํ•œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ ์ค‘ ์ผ๋ถ€๋Š” ์ด๊ฒƒ์ด ํ”Œ๋žซํผ์˜ ๋ฏธ๋ž˜๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์ด ํ† ๋ก ์„ ๋” ์ด์ƒ ๋”๋Ÿฝํžˆ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒ€์„ ์œ„ํ•ด ์ตœ์„ ์„ ๋‹คํ•˜๊ณ  ๋‹น์‹ ์ด ๋ฌด์—‡์„ ์ƒ๊ฐํ•ด ๋‚ด๋“  ๊ธฐ๋Œ€ํ•˜๋ฉฐ, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ํ›Œ๋ฅญํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

@christianscheuer ์ด ๋ฌธ์ œ ๋ฐ ๊ธฐํƒ€ CoreRT ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ํ”ผ๋“œ๋ฐฑ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ์ด ํ† ๋ก ์„ ์ „ํ˜€ ๋”๋Ÿฝํžˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

CoreRT์™€ ๊ฒฝ์Ÿํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋„๊ตฌ/์˜ต์…˜์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ํŒ€ ์‚ฌ์ด์—์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•˜๊ณ  ์•ผ์‹ฌ ์ฐจ๊ฑฐ๋‚˜ ๋” ๋ฏธ์นœ ์˜ต์…˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "๋””์Šคํฌ์— ์••์ถ• ํ’€๊ธฐ"๋ฅผ CoreRT ์ „์ฒด AOT์˜ ์ค‘์š”ํ•œ ๊ฒฝ์Ÿ์ž๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ์€ .NET ์‚ฌ์šฉ์ž/์•ฑ์˜ ๋‹ค๋ฅธ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์–‘ํ•œ ์ฑ„๋„(github ๋ฌธ์ œ ๋˜๋Š” ๊ณ ๊ฐ๊ณผ์˜ ๋Œ€๋ฉด ๋Œ€ํ™” ํฌํ•จ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์šฐ๋ฆฌ ์ œํ’ˆ ๊ด€๋ฆฌ ํŒ€์€ ์—ฌ๊ธฐ์— ์ œ์•ˆ๋œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์†”๋ฃจ์…˜์ด ๊ฐ€์žฅ ํฐ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด ๊ถŒ๋ฆฌ์— ๋Œ€ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์œ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ์„ ์—ฌ์ „ํžˆ ๊ฒ€์ฆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ CoreRT ๊ธฐ์ˆ ์ด ์ง€์›๋˜๋Š” .NET Core ์ œํ’ˆ์˜ ์ผ๋ถ€๋กœ ์ œ๊ณต๋  ๋•Œ๋ฅผ ์•ฝ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ณ ์œ ํ•œ ์žฅ์ ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๊ถ๊ทน์ ์œผ๋กœ ํ˜œํƒ์„ ๋ฐ›๋Š” ์ค‘์š”ํ•œ .NET ์‚ฌ์šฉ์ž ์„ธ๊ทธ๋จผํŠธ๋ฅผ ์œ„ํ•ด ์ด์™€ ๊ฐ™์€ ์ง€์› ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•  ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

  • ์‹œ์ž‘ ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ฐ€์žฅ ์ž‘์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ).
  • VFS(๊ฐ€์ƒ ํŒŒ์ผ ์‹œ์Šคํ…œ) ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์–ด์…ˆ๋ธ”๋ฆฌ์™€ ๋ฆฌ์†Œ์Šค๋ฅผ ๋งˆ์น˜ ๋””์Šคํฌ์—์„œ, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ํด๋”์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์•ฑ์˜ "ํŒจ์น˜ ๊ฐ€๋Šฅ์„ฑ"์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IE: Microsoft๋Š” ์‹œ์Šคํ…œ ์ˆ˜์ค€์—์„œ ๋‹ค๋ฅธ ์œ„์น˜์—์„œ ์žฌ์ •์˜๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋„ ์ค‘์š”ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ํŒจ์น˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

"์ง„์ •ํ•œ" ๋‹จ์ผ ํŒŒ์ผ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•˜๋ฉฐ ๋งŽ์€ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

@jkotas ๊ท€ํ•˜์˜ ์˜๊ฒฌ์€ ์ €์—๊ฒŒ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ํšŒ์‚ฌ์˜ .NET ๊ฐœ๋ฐœ์ž(LOB/๋ฐฑ์˜คํ”ผ์Šค/ํ†ตํ•ฉ)๊ฐ€ CoreRT๋กœ ์ „ํ™˜ํ•˜๋„๋ก ์„ค๋“ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์€ ๋„์•ฝ์ด ๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(ํŠนํžˆ ์‹คํ—˜์  ๋ ˆ์ด๋ธ”์ด ์ฃผ์–ด์ง). ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๋‹ค์Œ์—์„œ ๊ฐ€์น˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์™€ ๊ฐ™์€ Core์— ๋Œ€ํ•œ ๋น„๊ต์  ๊ฐ„๋‹จํ•œ (์‚ฌ์šฉํ•˜๊ธฐ) ์†”๋ฃจ์…˜์ด ๋…ผ์˜ ์ค‘์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”

@popcatalin81 ์ €๋Š” ์‹ค์ œ๋กœ ์—ฌ๊ธฐ์—์„œ ๊ท€ํ•˜์˜ ์š”์ ์— ํฌ๊ฒŒ ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ ์‹œ๊ฐ„์€ ๋งŽ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์žฅ๊ธฐ ์‹คํ–‰ ์„œ๋น„์Šค์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ 50% - 100% ๋Š˜๋ฆฌ๋Š” ๋Œ€์‹  ๋ฐฐํฌ์˜ ์šด์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์‹œ์ž‘ ์‹œ๊ฐ„์— 30์ดˆ๋ฅผ ์ถ”๊ฐ€ํ•˜๋”๋ผ๋„ ์žฅ๊ธฐ์ ์œผ๋กœ ์„œ๋น„์Šค์—๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ๋Œ€๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ ํ‚ฌ๋Ÿฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ 3.0์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๊ฑฐ์˜ ๋ชจ๋“  CoreCLR ์•ฑ์€ ์ฝ˜์†” ๋˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

CoreCLR์— ์ด๋ฏธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฒˆ๋“ค๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค(์ž์ฒด ํฌํ•จ ๋ฐฐํฌ).
์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ(RavenDB), ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ ๋ชฉ์ ์œผ๋กœ ๊ทธ๊ฒƒ์— _์‹ ๋ขฐ_ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ์งธ, ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์ƒ๊ด€์—†์ด ์ž์ฒด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์—๊ฒŒ _์ค‘์š”ํ•œ_ ์ด์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ „์—ญ์ ์œผ๋กœ ์„ค์น˜๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ๋”ฐ๋ผ์„œ ๊ด€๋ฆฌ์ž๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ฒฐ์ •ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด .NET 4.0์€ ๋•Œ๋•Œ๋กœ, ์‹ฌ์ง€์–ด 4.5๊ฐ€ ๋‚˜์˜จ ์ง€ ๋ช‡ ๋…„์ด ์ง€๋‚œ ํ›„์—๋„ ๊ณ ํ†ต์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.
๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ธก๋ฉด์€ ํ”„๋ ˆ์ž„์›Œํฌ์˜ _์ž์‹ ์˜_ ํฌํฌ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ผ์— ์ง๋ฉดํ–ˆ์„ ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ์ผํ™˜์œผ๋กœ ์šฐ๋ฆฌ๋Š” ํŒจ์น˜ ์ฃผ๊ธฐ์— ๋Œ€ํ•œ ์†Œ์œ ๊ถŒ์„ ๊ฐ€์ง€๋ฉฐ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” VFS๋ฅผ _์ƒ๊ฐํ•˜์ง€_ ์•Š์ง€๋งŒ ์ด๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ๋ฐฉ์‹์œผ๋กœ ๋ฌถ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ/๋„ค์ดํ‹ฐ๋ธŒ dll/๋ฆฌ์†Œ์Šค์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ API/์ ํ”„๋ฅผ ํ†ต๊ณผํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ดํ‹€ ๋™์•ˆ @briacht ๊ฐ€ ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ง€์ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ† ๋ก ์—์„œ ์ •๋ง ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด 2์„ผํŠธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค!

๋จผ์ € @morganbr ์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์ž…๋‹ˆ๋‹ค.

  1. Windows ์•ฑ, WPF ๋ฐ WinForms ํ˜ผํ•ฉ.
  2. ํ˜„์žฌ ์—†์Œ
  3. ์˜ˆ, Assembly.Load๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ณ€ํ˜•
  4. ๋„ค
  5. ์ด๊ฒƒ์ด ๋ชจ๋“  ์‹œ์ž‘ ์‹œ ์ ์šฉ๋˜๋Š” ํŒจ๋„ํ‹ฐ์ธ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ, ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ์ด๋ฉด 5์ดˆ: ์•„๋‹ˆ์š”. 1ํšŒ๋ผ๋ฉด 5์ดˆ๋ฉด ๋ฌธ์ œ์—†๋‹ค.
  6. 50MB๋Š” <2MB์— ๋น„ํ•ด ์ด๋ฏธ ์ƒ๋‹นํžˆ ํฝ๋‹ˆ๋‹ค... ํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด dotnet ๋Ÿฐํƒ€์ž„์ด ํฌํ•จ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๋ฉด... ์ข‹์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๋‚˜๋Š” ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ œ๊ณตํ•  ์ˆ˜๋„ ์žˆ๊ณ  ์ œ๊ณตํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  7. ๋ฆด๋ฆฌ์Šค ์‹œ๊ฐ„์€ ์ง์ ‘์ ์ธ ๋ฌธ์ œ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์žฅ๊ธฐ๊ฐ„ CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜์—ฌ CI ์ œ๊ณต์ž๋ฅผ ํ™”๋‚˜๊ฒŒ ํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.
  8. ๋„ค!

๋‚ด๊ฐ€ ๋งํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Greenshot, ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค๋œ ๋ฒ„์ „์€ ์—ฌ์ „ํžˆ โ€‹โ€‹.NET Framework 2.0์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  ์žˆ์ง€๋งŒ(์ •๋ง ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค) ์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค(์ข‹์€ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ)! Zhe ๋‹ค์šด๋กœ๋“œ๋Š” ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ํฌํ•จํ•˜์ง€๋งŒ .NET Framework๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ ์•ฝ 1.7MB์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‹œ์ž‘๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—๋Š” 1๊ฐœ์˜ .exe์™€ 4๊ฐœ์˜ .dll์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ํ•˜์œ„ ๋””๋ ‰ํ† ๋ฆฌ์—๋„ 11๊ฐœ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

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

.NET Framework 4.7.1 ๋ฐ dotnet core 3.0์„ ๋‚˜๋ž€ํžˆ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” Greenshot์˜ ๋‹ค์Œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋ฉด dotnet core 3.0์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋‹ค์šด๋กœ๋“œ์—๋Š” ํ˜„์žฌ ์•ฝ 103๊ฐœ์˜ dll(!!!), 1๊ฐœ์˜ exe ๋ฐ 15๊ฐœ์˜ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. . ์ „์ฒด ํฌ๊ธฐ๋Š” ์•ฝ 37MB์ด๊ณ  ๊ฐ€์žฅ ํฐ ํŒŒ์ผ์€ MahApps.Metro.IconPacks.dll(12MB!!)๋กœ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์•„์ด์ฝ˜์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ์•„๋งˆ๋„ ํŒŒ์ผ์˜ ์•ฝ 4%์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋งŽ์€ dll๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์ฝ”๋“œ ์‚ฌ์šฉ๋Ÿ‰์˜ 50%๊ฐ€ ๋งŽ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค!

์‚ฌ์šฉ์ž๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์„ค์น˜ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด .zip์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์•ฝ 118๊ฐœ ํŒŒ์ผ ์‚ฌ์ด์—์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ์ฐพ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ •๋ง ์ข‹์€ ๊ฒฝํ—˜์ด ์•„๋‹™๋‹ˆ๋‹ค! ํฌ๊ธฐ๋Š” ์•ฝ 35MB(17x) ๋” ํฐ๋ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ค ์ด์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

dotnet core 3.0์ด ๋“ฑ์žฅํ•˜๊ธฐ ๋ช‡ ๋‹ฌ ์ „์— ์ €๋Š” Fody.Costura๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ์ž‘์—…์„ ๊ฑฐ์˜ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ ํŒจํ‚น ๋ฐ ์‹œ์ž‘ ์‹œ ์–ธํŒจํ‚น! ๊ทธ๋Ÿฌ๋‚˜ ํ•ดํ‚น์œผ๋กœ ํŒŒ์ผ์„ ์ถ”์ถœํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๊ฝค ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

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

Fody.Costury์™€ ์œ ์‚ฌํ•œ ์†”๋ฃจ์…˜์„ ๊ฐ–๊ฒŒ ๋˜๋ฉด ์–ธ์  ๊ฐ€๋Š” Greenshot ๋ฐฐํฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋ฏธ์ง•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํฌ๊ธฐ์™€ ๋กœ๋”ฉ ์‹œ๊ฐ„์ด ์ง์ ‘์ ์œผ๋กœ ์ค„์–ด๋“ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ๋„ ์‹œ๊ฐ„์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

@ayend ๋‚˜๋„ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ์„ธ์š” :)

๊ทธ๊ฒƒ์ด ์ง„์ •ํ•œ ์„œ๋น„์Šค์ด์ง€๋งŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„ ๊ธฐ๋ฐ˜ ์žฅ๊ธฐ ์‹คํ–‰ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ผํšŒ์„ฑ ์‹œ์ž‘ ๋น„์šฉ์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์ง€๋งŒ ๋™์‹œ์— ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ ๋ชจ๋ธ์˜ ์ด์ ์„ ๊ฐ€์žฅ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์•„๋‹™๋‹ˆ๋‹ค. ( ๊นŒ๋งˆ๊ท€๋Š” ํ‘œ์ค€์ด ์•„๋‹Œ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค ;) )

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

์ด์ œ ๋ฌธ์ œ๋Š” ์ž„์‹œ ํด๋”์— ๋ณต์‚ฌ๋œ ์ด ์ž„๋ฒ ๋””๋“œ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ชจ๋ธ์ด ์ธ๊ธฐ๋ฅผ ์–ป์œผ๋ฉด ์ž˜ ์ž‘๋™ํ• ๊นŒ์š”?์ž…๋‹ˆ๋‹ค.

์ œ ์ƒ๊ฐ์—๋Š” ํ˜„์žฌ ๋ชจ๋ธ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ž ์žฌ์ ์ธ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜์‹ญ ๊ฐœ์˜ ์•ฑ์ด ๋ณต์ œ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ๋กœ ์ˆ˜์ฒœ ๊ฐœ์˜ ์ž„์‹œ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์—‰๋ง์ด ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋ˆˆ์— ๋„์ง€ ์•Š์ง€๋งŒ ์—ฌ์ „ํžˆ ์—‰๋ง)
  • ์••์ถ•๋„ ์—†๊ณ  ๋ง์ปค๋„ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ FDD ๋˜๋Š” ์ด๋ฒคํŠธ ์••์ถ•์— ๋น„ํ•ด ์ž‘์€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์•ฑ์— ๋ถˆ๋ฆฌํ•œ ์ ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๋Œ€์‹  ์‹ค์ œ๋กœ ๋ฐฉํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ํ† ํฐ ๊ต์ฒด๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ ํ›„ ๊ตฌ์„ฑ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์„ค์ • ํŒŒ์ผ์„ ๋ฎ์–ด์“ธ ์ž„์‹œ ํด๋”๋ฅผ ์ฐพ์œผ๋ ค๋ฉด ์–ด๋””๋กœ ๊ฐ€๋‚˜์š”? ๊ฑฐ๊ธฐ์— ์„ค์ • ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋น„์Šค์— ์ž์ฒด ํด๋”์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ฉ๋‹ˆ๊นŒ? ๋ณด์•ˆ์€ no-no)

๋‚˜๋Š” ์ด ๋ชจ๋ธ์ด ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์•ฑ์— ์ฐจ์„ ์ฑ…์ด๋ผ๊ณ  ๋งํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๊ณ  ๊ณผ๊ฑฐ์— full.Net Framework์— ์ง์ ‘ ์‚ฌ์šฉํ–ˆ์œผ๋ฉฐ ํŠน์ • ์•ฑ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ตœ์ ์˜ ๊ตฌํ˜„์€ ๋ง์ปค๊ฐ€ ๋ชจ๋“  ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๋ฒ„์ „์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@popcatalin81 ๊ด€์ ์ด ํ•˜๋‚˜์ธ ์„ธ์ƒ์€ ๊ฐ€๋‚œํ•œ ์„ธ์ƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ๋ฐฐํฌ ๋ชจ๋ธ์ด ์œ ์ผํ•œ ๋ชจ๋ธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ๋งŒํผ ์˜ค๋งŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

์ž„์‹œ ํŒŒ์ผ์˜ ๊ตฌ์„ฑ ์ •๋ณด. ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ๋ฐ˜๋Œ€ํ•  ๊ฒƒ์ด๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค._๋ฐ˜๋“œ์‹œ_ ์‚ฌ์šฉ ์ค‘์ธ ์‹ค์ œ ํŒŒ์ผ ์˜†์— ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์–ด๋”˜๊ฐ€์— ์ˆจ๊ฒจ์ ธ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•  ๋•Œ IsolatedStorage ํŒŒ์ผ์ด ์–ผ๋งˆ๋‚˜ ๋‚˜์œ์ง€ ์ด๋ฏธ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ด์ „ ๋ฒ„์ „์˜ RavenDB์—์„œ๋Š” ๋””๋ ‰ํ† ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์„ ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ํ‘œ์‹œ๋˜๋Š” ํŒŒ์ผ ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋งŽ์€ ํ•ญ๋ชฉ์„ ๋ณ‘ํ•ฉํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์‚ฌ์šฉ์— ์‹ฌ๊ฐํ•œ ์˜ํ–ฅ์„ ๋ฏธ์ณค์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ILMerge๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ•จ์ •์ด ์žˆ๋‹ค๋ฉด ์Šค์Šค๋กœ ๊ต์œกํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ œ์•ˆ๋œ "ํŒฉ ๋ฐ ์ถ”์ถœ" ์ ‘๊ทผ ๋ฐฉ์‹, ํŠนํžˆ if๊ฐ€ ๋””์Šคํฌ์—์„œ ํŒŒ์ผ์„ ์ถ”์ถœํ•˜๋Š” ๋ถ€๋ถ„์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜์ง€ ์•Š๊ณ  "๋ฉ”๋ชจ๋ฆฌ"์—์„œ ๋ชจ๋‘ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

corert ๋„ค์ดํ‹ฐ๋ธŒ ์ปดํŒŒ์ผ๋Ÿฌ๋‚˜ Costura.Fody ์™€ ๊ฐ™์€ ๊ฒƒ์ด์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์„ ํƒ์ ์œผ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋ ค๊ณ  ์‹œ๋„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ฐธ์กฐ, ์ฃฝ์€ IL ์ œ๊ฑฐ).

๋‹ต์žฅ

dotnet core 3.0์ด ๋“ฑ์žฅํ•˜๊ธฐ ๋ช‡ ๋‹ฌ ์ „์— ์ €๋Š” Fody.Costura๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ์ž‘์—…์„ ๊ฑฐ์˜ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ ์‹œ ํŒจํ‚น ๋ฐ ์‹œ์ž‘ ์‹œ ์–ธํŒจํ‚น!

Costura๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ "๋””์Šคํฌ์— ์••์ถ•์„ ํ’€์ง€" ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค์—์„œ ์ž„๋ฒ ๋””๋“œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ (๋ฉ”๋ชจ๋ฆฌ์—์„œ) ์ถ”์ถœํ•˜๊ณ  ๋ฐ”์ดํŠธ๋ฅผ ํ†ตํ•ด ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

@SimonCropp ์ปจํ…์ŠคํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋””์Šคํฌ์— ์••์ถ•์„ ํ’€๊ณ  ์ŠคํŠธ๋ฆผ์—์„œ ๋กœ๋“œํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์„ ๋ชจ๋‘ ํƒ์ƒ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆœ์ˆ˜ํ•œ IL์— ๋Œ€ํ•œ ์ŠคํŠธ๋ฆผ์˜ ๋กœ๋”ฉ์„ ์ปค๋ฒ„ํ•˜๋Š” ๊ฒƒ์€ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์—์„œ ๊ฐ€๋Šฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@jeffschwMSFT btw ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋งค๋„๋Ÿฝ๊ฒŒ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ธฐ๋Šฅ ์„ธํŠธ(๋ฐ ์„ ํƒ์  ํŠธ๋ฆฌ ํ”๋“ค๊ธฐ)๋Š” ์ผ๋ฅ˜ ์‹œ๋ฏผ์œผ๋กœ์„œ ๋ณด๊ณ  ์‹ถ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. costura๋Š” ์ œ๊ฐ€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ์ค‘ ํ•˜๋‚˜์ง€๋งŒ ์ง€์›ํ•˜๋Š” ๋ฐ ์ƒ๋‹นํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MS๊ฐ€ ๋Œ€์•ˆ(๋ฒ ํƒ€ ๋ฒ„์ „ ํฌํ•จ)์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ฒ€ํ† ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ํ• ์• ํ•˜๊ณ  Costura Readme ๋ฐ Nuget ์„ค๋ช…์— "MS ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค"๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅ์„ฑ์€ ์—†์ง€๋งŒ diff ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ Costura์˜ ์ฝ”๋“œ๋ฅผ ๋ฆด๋ฆฌ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์„ธ์š”.

mono/illinker๋ฅผ .NET Core ๋„๊ตฌ ์ฒด์ธ์— ํ†ตํ•ฉํ•˜๊ธฐ ์‹œ์ž‘ํ•  ๋•Œ @SimonCropp ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ฒ€ํ†  ์ œ์•ˆ์„ ์ˆ˜๋ฝํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Costura๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ "๋””์Šคํฌ์— ์••์ถ•์„ ํ’€์ง€" ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌ์†Œ์Šค์—์„œ ์ž„๋ฒ ๋””๋“œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ (๋ฉ”๋ชจ๋ฆฌ์—์„œ) ์ถ”์ถœํ•˜๊ณ  ๋ฐ”์ดํŠธ๋ฅผ ํ†ตํ•ด ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋” ์ข‹์€ ๊ฒƒ์€ AppDomain.AssemblyResolve ์ด๋ฒคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ๋””๋งจ๋“œ๋กœ ๋กœ๋“œํ•˜๋ฏ€๋กœ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์–ด์…ˆ๋ธ”๋ฆฌ(๋ฉ”๋ชจ๋ฆฌ๋กœ)๋งŒ ๋กœ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘์— ๋„ˆ๋ฌด ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ๋Œ€ํ™”์— ๋Šฆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ๋‹ค๋ค˜๋‹ค๋ฉด ์‚ฌ๊ณผ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์ธ๊ณต๋ฌผ์ด ๊ฒฐ์ •์ ์ด๋ผ๊ณ  ๊ฐ€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋”ฐ๋ผ์„œ ๋™์ผํ•œ ๋นŒ๋“œ๋Š” ํ•ญ์ƒ ๋™์ผํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๊นŒ? ๋ฐ”์ดํŠธ ๋‹จ์œ„. ํ‘œ์ค€๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ฒดํฌ์„ฌ๊ณผ ํ•จ๊ป˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@morganbr ์—ฌ๊ธฐ์—๋Š” ๋งŽ์€ ์ฝ์„๊ฑฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๋ฆฐ ๊ฒฐ์ •์„ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@edblackburn ํ”ผ๋“œ๋ฐฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ ๋””์ž์ธ์„ ํ•จ๊ป˜ ๋ชจ์œผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @swaroop-sridhar๋Š” ์ง€๊ธˆ ๋””์ž์ธ์„ ์ฃผ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ILMerge๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ•จ์ •์ด ์žˆ๋‹ค๋ฉด ์Šค์Šค๋กœ ๊ต์œกํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@simplejackcoder ILMerge ๋Š” ๋งŽ์€ ์–ด์…ˆ๋ธ”๋ฆฌ์˜ IL์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์ง€๋งŒ ๊ทธ ๊ณผ์ •์—์„œ ๋ณ‘ํ•ฉ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ์˜ ์›๋ž˜ ID๋ฅผ ์žƒ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›๋ž˜ ์–ด์…ˆ๋ธ”๋ฆฌ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์ž‘์—…์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ด ๋…ธ๋ ฅ์˜ ๋ชฉํ‘œ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์–ด์…ˆ๋ธ”๋ฆฌ ID๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ํ•จ๊ป˜ ํŒจํ‚ค์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ธฐ๋ณธ ๋ฐ”์ด๋„ˆ๋ฆฌ, ๊ตฌ์„ฑ ํŒŒ์ผ, ๋Ÿฐํƒ€์ž„ ๋ฐ ์•ฑ์— ํ•„์š”ํ•œ ๊ธฐํƒ€ ์ข…์†์„ฑ์„ ํŒจํ‚ค์ง•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IL ๋ณ‘ํ•ฉ์€ ์ด์— ์ ์‘ํ•  ์ˆ˜ ์žˆ๋Š” ์•ฑ์— ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์™€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

๋””์ž์ธ ๋ฆฌ๋ทฐ๋Š” https://github.com/dotnet/designs/pull/52 ์— ๊ฒŒ์‹œ๋ฉ๋‹ˆ๋‹ค.
์•ž์œผ๋กœ๋„ PR์— ๋Œ€ํ•œ ๋…ผ์˜๋ฅผ ๊ณ„์†ํ•˜์ž.

๋‹จ์ผ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์€ ์„ ํƒ์˜ ํญ์„ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)
  2. ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
  3. ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?
  4. ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  5. ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?
  6. ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?
  7. ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?
  8. ์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  1. ์ง€๊ธˆ๊นŒ์ง€ dotnet/coreclr#1 ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ์ธ ์ฝ˜์†” ์•ฑ์ž…๋‹ˆ๋‹ค. Windows ๋˜๋Š” Linux์šฉ์œผ๋กœ ๊ฒŒ์‹œํ•˜๊ณ  --single-file ๋ฅผ ์ง€์ •ํ•˜์—ฌ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํŒŒ์ผ์„ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Windows์˜ ๊ฒฝ์šฐ .exe ๋กœ ๋๋‚  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•˜๊ณ  Linux์˜ ๊ฒฝ์šฐ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  2. ๋ณดํ†ต์€ ์•„๋‹ˆ์ง€๋งŒ ์šฐ๋ฆฌ์—๊ฒŒ ์•Œ๋ ค์ง€์ง€ ์•Š์€ NuGet ํŒจํ‚ค์ง€๋ฅผ ํ†ตํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์ฒ˜์Œ์—๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ–ฅํ›„ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  4. ๋„ค
  5. ๋„ค
  6. ๋ฌด์—‡์ด๋“  ์ž‘๋™
  7. ์˜ˆ, ์‹คํ–‰ ํŒŒ์ผ์˜ ๊ฒฐ๊ณผ ํฌ๊ธฐ๋ฅผ ์ตœ์ ํ™”ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” --optimizing-level=5 ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ํ™” ์ˆ˜์ค€์„ ์„ค์ •ํ•˜๋Š” ํ”Œ๋ž˜๊ทธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  8. ๋„ค, ์–ด๋Š ์ •๋„

@BlitzkriegSoftware ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ ์— ์ œ์•ˆ๋œ ๋””์ž์ธ์ด ๊ท€ํ•˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ๋””์ž์ธ์„ ์‚ดํŽด๋ณด์‹ญ์‹œ์˜ค. ํ”ผ๋“œ๋ฐฑ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ผ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์€ ์„ ํƒ์˜ ํญ์„ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)
  2. ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
  3. ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?
  4. ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  5. ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?
  6. ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?
  7. ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?
  8. ์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  1. WPF .Core 3.0 ์•ฑ
  2. ์•„๋งˆ๋„ ๋„ˆ๊ฒŸ ํŒจํ‚ค์ง€์—
  3. ์•„๋‹ˆ์š”
  4. ๋„ค
  5. ์ตœ๋Œ€ 200-500ms์˜ ๊ฒฝ์šฐ ์˜ˆ
  6. ์›๋ž˜ ๊ฒŒ์‹œ ํด๋” ํฌ๊ธฐ๋ณด๋‹ค 2~3๋ฐฐ ํฌ์ง€ ์•Š์œผ๋ฉด ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  7. ์ƒ์‚ฐ์„ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  8. ์˜ˆ, ํ•˜์ง€๋งŒ ์ž‘์—…์ด ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๊ด€๋ จ๋œ ๊ฒฝ์šฐ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜๊ฐ€ ๋ฐ›์€ ํ”ผ๋“œ๋ฐฑ์€ ์ฃผ๋กœ 2019๋…„ ์ด์ „์— ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์›น ์„œ๋น„์Šค, ์ฝ˜์†” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ธฐํƒ€ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ œ .net core 3.0์—์„œ๋Š” WPF ๋ฐ UI ์•ฑ์šฉ ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. .Net Framework 4.8์€ .Net Standard 2.1์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ .net ํ”„๋ ˆ์ž„์›Œํฌ(์ฃฝ์€ ํ”„๋ ˆ์ž„์›Œํฌ)์—์„œ .net ์ฝ”์–ด๋กœ ์•ฑ์„ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์ง€๊ธˆ๊นŒ์ง€ WPF ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์‚ฌ์šฉํ–ˆ๋˜ ILMerge๋ฅผ ๋Œ€์ฒดํ•  ์†”๋ฃจ์…˜์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ์••์ถ• ํ’€๋ฆผ ํŒจํ‚ค์ง€๋Š” ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์ด์ „์— ๋‹ค๋ฅธ ์„ค๋ช…์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ถ„๋ช…ํžˆ ์ข‹์€ ์†”๋ฃจ์…˜์ด ์•„๋‹™๋‹ˆ๋‹ค.

  1. ๋Œ€๋ถ€๋ถ„ CLI ์•ฑ. ์†Œ๊ทœ๋ชจ Windows ์„œ๋น„์Šค์™€ ๊ฐ€๋” ์ œ๊ณต๋˜๋Š” WPF ์•ฑ๋„ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ์›น ํ•ญ๋ชฉ์˜ ๊ฒฝ์šฐ ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ๋‚˜๋จธ์ง€๋Š” ๋Œ€๋ถ€๋ถ„ Windows ์ง€ํ–ฅ์ ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ์˜ Linux .NET Core ๊ด€์‹ฌ์€ ์›น์— ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ๋•Œ๋•Œ๋กœ. ๊ทธ๋Ÿด ๋•Œ ๊ฑฐ์˜ ํ•ญ์ƒ ์••์ถ• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ† ์ข… ์žฌ๋ฃŒ๊ฐ€ ํฌ์žฅ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์„ธ๊ณ„์˜ ๋์ด ์•„๋‹ˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ„๋„์˜ dll๋กœ ๊ธฐ๋ณธ ์ข…์†์„ฑ์„ ๋ฐฐํฌํ•ด์•ผ ํ•˜๋Š” ์ˆœ์ˆ˜ ๊ด€๋ฆฌ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์ข‹์€ ์†”๋ฃจ์…˜์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์•„๋‹ˆ์š”, ๋‹จ์ผ ํŒŒ์ผ์— ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  4. ๋„ค.
  5. 200ms๋Š” CLI๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์งœ์ฆ์ด ๋‚˜๊ธฐ ์ „์˜ ๋Œ€๋žต์ ์ธ ํ•œ๊ณ„์ž…๋‹ˆ๋‹ค. > 1์ดˆ๋ฉด ๊ฑฐ์˜ ํ™•์‹คํžˆ .NET Framework(ILMerge + ngen)๋ฅผ ๊ณ ์ˆ˜ํ•˜๊ฑฐ๋‚˜ ํ•„์š”ํ•œ ๋Ÿฐํƒ€์ž„์ด ์ •์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์ปดํŒŒ์ผ๋˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๋ฅผ ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒฝ์šฐ์— ๋ณ‘ํ•ฉ๋œ ngen-ed C# ์•ฑ์ด ์‹ค์ œ๋กœ ์ƒ๋‹นํžˆ ๋น ๋ฅด๊ฒŒ ์‹œ์ž‘๋˜๊ธฐ ๋•Œ๋ฌธ์— C#์—์„œ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ค‘ ์ผ๋ถ€๋Š” ๋ณต์žก์„ฑ ๋ฉด์—์„œ ์Šคํฌ๋ฆฝํŒ… ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ์— ํ•ฉ๋ฆฌ์ ์ด์ง€๋งŒ, ํŠนํžˆ ๋งŽ์€ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒ๋‹นํ•œ ์‹œ์ž‘ ๋น„์šฉ์ด ๋“œ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ๋‹ฌ๋ ค์žˆ๋‹ค. Hello World์˜ ๊ฒฝ์šฐ 10MB ์ด์ƒ์€ ํŒ๋งคํ•˜๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฑฐ๋Œ€ํ•œ ์‹คํ–‰ ํŒŒ์ผ์€ ์‹œ์ž‘ ๋น„์šฉ์ด ๋งŒ๋งŒ์น˜ ์•Š์€ ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. OS๊ฐ€ ์ด๋ก ์ ์œผ๋กœ ์ „์ฒด ๋‚ด์šฉ์„ ์ฝ์ง€ ์•Š๊ณ  ์‹คํ–‰์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด๋„ ์ ์–ด๋„ Windows์—์„œ๋Š” ๋ณด์•ˆ ๋ชฉ์ ์œผ๋กœ ๋จผ์ € ํ•ด์‹œ๋ฅผ ์–ป์œผ๋ ค๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ํ•ญ์ƒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งํ•˜์ž๋ฉด, ์ž„์‹œ๋กœ ์ด์ง„ ํŒŒ์ผ์„ ํ‘ธ๋Š” ๊ฒƒ์€ ๋ฆฌ์†Œ์Šค ํ™œ์šฉ ์ธก๋ฉด์—์„œ AV(Defender ์ ˆ๋Œ€์ ์œผ๋กœ ํฌํ•จ๋จ) ๋„ˆํŠธ๋ฅผ ๋ชฐ๊ณ  ๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  7. ํ™•์‹ ํ•˜๋Š”. ์ ์ ˆํ•œ ํฌ๊ธฐ๋ฅผ ์–ป๊ณ  ๋น ๋ฅด๊ฒŒ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๋ฉด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์— 1๋ถ„ ์ด์ƒ์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.
  8. ๋ถ„๋ช…ํžˆ.

์ œ์•ˆ์„œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ๊ณ„์† ์ž‘๋™ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๋„๊ตฌ ์ฒด์ธ์œผ๋กœ ํ•จ๊ป˜ ๊ฒฐํ•ฉ๋˜์ง€ ์•Š์€ ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ๊ด€๋ จ ์‚ฌํ•ญ์ด ๋งŽ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ์ด๊ฒƒ์€ ๋‚˜์˜ ๋ฌด์ง€์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜์ง€๋งŒ ๋‚˜์—๊ฒŒ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ILLink, Microsoft.Packaging.Tools.Trimming, CoreRT, .NET Native ๋ฐ ์ด ๋ฌธ์ œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ฌธ์ œ ์‚ฌ์ด์— ๋‹จ์ผ ํŠธ๋ฆฌ ํ”๋“ค๋ฆผ, ๋น ๋ฅธ ์‹œ์ž‘(AoT ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ), ํ•ฉ๋ฆฌ์ ์ธ ํฌ๊ธฐ์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. .NET Core ์™ธ๋ถ€(UWP์šฉ ์•„๋‹˜).

  1. ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋Š” https://github.com/AvaloniaUI/Avalonia(Windows , Linux, MacOS) ๋ฐ WPF(Windows) ์•ฑ์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹จ์ผ exe๊ฐ€ ์žˆ์œผ๋ฉด ์ž๋™ ์—…๋ฐ์ดํŠธ๊ฐ€ ์‰ฌ์›Œ์ง€๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜๋ฐฑ ๊ฐœ์˜ dll์— ๋น„ํ•ด ๋‹จ์ผ ํŒŒ์ผ์ด ๋” ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ์˜ˆ(sqlite ๋ฐ skia์™€ ๊ฐ™์€ ์‚ฌ์ „ ๋นŒ๋“œ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ)
  3. ์•„๋‹ˆ์š”
  4. ๋„ค
  5. 200ms๋Š” ์•„๋งˆ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. GUI ์•ฑ์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด 5์ดˆ์ธ ๊ฒƒ์€ ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  6. ๋ณ„๋กœ ์ƒ๊ด€์—†์–ด
  7. ๋ณ„๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•ด์„œ๋งŒ ๋‹จ์ผ ํŒŒ์ผ์„ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  8. ๋„ค

ํŒฉ ๋ฐ ์ถ”์ถœ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์•„์นด์ด๋ธŒ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํŒฉ ๋ฐ ์ถ”์ถœ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์•„์นด์ด๋ธŒ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์ด๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋” ๋™์˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋„๊ตฌ๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.

@Safirion , @mattpwhite , @x2bool , @thegreatco ํ”ผ๋“œ๋ฐฑ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ด๋กœ๋ถ€ํ„ฐ ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค(์ฝ˜์†” ์•ฑ, WPF, GUI ์•ฑ ๋“ฑ)๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ „๋ฐ˜์ ์ธ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋น„์Šทํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๋””์ž์ธ ๋ฌธ์„œ ์—์„œ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŒฉ ๋ฐ ์ถ”์ถœ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์˜ˆ, ์ด ์ค€๋น„ ๋ฌธ์„œ ์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ๋ชฉํ‘œ๋Š” ํŒŒ์ผ ์ถ”์ถœ์— ๋Œ€ํ•œ ์˜์กด๋„๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ์•ˆ์„œ๋ฅผ ์ฝ์–ด๋ณด๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@mattpwhite , ์ด ์†”๋ฃจ์…˜์ด ๋‹ค์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ด ์ž‘์—… ํ•ญ๋ชฉ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ œ์•ˆ๋œ ์ž์ฒด ์ถ”์ถœ ๊ธฐ๋ฐ˜ ์ ‘๊ทผ ๋ฐฉ์‹, ๋˜๋Š”
  • ์ด ๋ฌธ์„œ ์— ์–ธ๊ธ‰๋œ ๋””์ž์ธ
    ๋‚˜๋Š” ๋‚˜์ค‘ ๋ฌธ์„œ๊ฐ€ ๋‹น์‹ ์ด ์ž์„ธํžˆ ์„ค๋ช…ํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋‹ค๋ฃจ๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

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

@mattpwhite , ILLink(ํŠธ๋ฆฌ ์‰์ดํ‚น), crossgen(์‹คํ–‰ ์ค€๋น„๊ฐ€ ๋œ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ ์ƒ์„ฑ) ๋ฐ ๋‹จ์ผ ํŒŒ์ผ ๋ฒˆ๋“ค๋ง ์ธก๋ฉด์„ .net core 3์šฉ์œผ๋กœ ๊ฐ„์†Œํ™”๋œ ๋ฐฉ์‹์œผ๋กœ msbuild/dotnet CLI์— ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ด ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ํŠน์ • msbuild ์†์„ฑ ์„ค์ •).

์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋„๊ตฌ์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, crossgen์€ ๋ฏธ๋ฆฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹œ์ž‘์„ ๋•์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์„ ๋‹จ์ผ ํŒŒ์ผ์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ธฐ๋ณธ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋””์Šคํฌ ๋“ฑ์— ์œ ์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘ ์†๋„๊ฐ€ ๋Š๋ ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@swaroop-sridhar, ์‹œ๊ฐ„์„ ๋‚ด์–ด ์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ์†”๋ฃจ์…˜์ด ๋‹ค์Œ ๊ธฐ๋ฐ˜์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

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

์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋„๊ตฌ์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, crossgen์€ ๋ฏธ๋ฆฌ ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์‹œ์ž‘์„ ๋•์ง€๋งŒ ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด๋“ค ์ค‘ ์ผ๋ถ€๋Š” ์–‘๋‚ ์˜ ๊ฒ€์ด๋ผ๋Š” ๊ฒƒ์„ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค. JIT๊ฐ€ ์ „ํ†ต์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ngen์€ ํ•ญ์ƒ CLI/GUI ์•ฑ์˜ ์Šน๋ฆฌ์˜€์Šต๋‹ˆ๋‹ค. ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ๊ณผ ๋Ÿฐํƒ€์ž„ ์ž์ฒด๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒƒ์ด ๋™์ผํ•œ ์ƒ์ž์—์„œ ์‹คํ–‰๋˜๋Š” ๋‹ค๋ฅธ ๋งŽ์€ .NET Framework ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๋ฐ˜๋“œ์‹œ ๋ถ„ํ•  ์ƒํ™˜๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์˜ ์ผ๋ถ€ ์กฐํ•ฉ์œผ๋กœ ์ธํ•ด Core์—์„œ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@swaroop-sridhar ํ˜„์žฌ ์Šน์ธ๋œ ์ œ์•ˆ์— ๋Œ€ํ•ด ์ œ๊ฐ€ ๊ฐ€์žฅ ์šฐ๋ คํ•˜๋Š” ๊ฒƒ์€ ์ด ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ 216๊ฐœ ํŒŒ์ผ์€ ์‹œ์ž‘ ์‹œ ๋””์Šคํฌ์— ์ถ”์ถœ๋ฉ๋‹ˆ๋‹ค.

"Hello World"๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ 216๊ฐœ์˜ ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ œ์™ธํ•˜๊ณ , ๋””์Šคํฌ์˜ ์ผ๋ถ€ ์œ„์น˜์— ์••์ถ•์„ ํ’€๋ฉด ๊ฐ„๋‹จํ•œ ๋ช…๋ น์ค„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ฑฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•ด ์ œ๊ณต๋˜์ง€ ์•Š์€ ๋„๊ตฌ๋ฅผ ์‚ญ์ œํ•  ๋•Œ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์ฐพ์„ ํ•„์š”๊ฐ€ ์—†์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

IMHO, ์šฐ๋ฆฌ๋Š” golang๊ณผ ์œ ์‚ฌํ•œ ๊ฒŒ์‹œ ๊ฒฝํ—˜์„ ๋ชฉํ‘œ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. golang ๊ฒฝํ—˜๊ณผ ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋ ค๋ฉด crossgen ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ(JIT ๋ฐ ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ์—์„œ ์ง€๊ธฐ ๋•Œ๋ฌธ์— 1:1 ์ผ์น˜๋Š” _์ข‹์€_ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ฃผ์žฅํ•  ์ˆ˜ ์žˆ์Œ), ๊ทธ๊ฒƒ ์—†์ด๋Š” ์ข‹์€ ๋ถ€๋ถ„์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋น„์Šทํ•œ ๊ฒฝํ—˜์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜๋…„ ๋™์•ˆ ๋งŽ์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ์™”์œผ๋ฉฐ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๊ฒƒ์€ ์–ด์…ˆ๋ธ”๋ฆฌ ๋กœ๋”์— ํ›„ํฌ๊ฐ€ ์žˆ๋Š” ์ž„๋ฒ ๋””๋“œ ๋ฆฌ์†Œ์Šค์˜€์Šต๋‹ˆ๋‹ค(ILMerge๋Š” ๊นŒ๋‹ค๋กญ๊ณ  Costura.Fody๋Š” ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ์ œ์•ˆ์„œ์— ์„ค๋ช…๋œ ๋‚ด์šฉ์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ๋ณต์ œํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. .NET Core๋Š” ๋ฏธ๋ž˜๊ฐ€ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋ช…๋ น์ค„ ๋„๊ตฌ ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์€ ์•ฝ 100๊ฐœ์˜ ์ข…์†์„ฑ์„ ๋Ÿฌ๊ทธํ•˜๊ฑฐ๋‚˜ ์†์œผ๋กœ ํœ˜๋‘๋ฅด๋Š” ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋””์Šคํฌ์˜ ์–ด๋”˜๊ฐ€์— ๋ฑ‰์–ด๋‚ด์•ผ ํ•˜๋Š” ํ•œ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

๋‚ด dotnet/coreclr#1 ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ, ํ•˜๋‚˜์˜ ํŒŒ์ผ์ด๋ฉฐ ์ถ”์ถœํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์˜ฌ์ธ์› ๋Œ€ ์˜ฌ์ธ์› ์ž๋™ ์••์ถ• ํ’€๊ธฐ์— ๋Œ€ํ•œ ๋ช…๋ น ์Šค์œ„์น˜์˜ ์ผ๋ถ€๋กœ ์„ ํƒ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ž๋™ ์••์ถ• ํ’€๋ฆผ์˜ ๊ฒฝ์šฐ ์••์ถ•์„ ํ‘ผ ํŒŒ์ผ์„ ์ •๋ฆฌํ•˜๋Š” undo ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฒฝ์šฐ์— ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•˜๋‚˜์˜ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜์—ฌ ์ผ๋ฐ˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋”์— ์ƒ์ฃผํ•˜๊ธฐ์— ์ ํ•ฉํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋งŒ, ๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์„ค์น˜์—๋Š” ์ž์ฒด ํด๋”๊ฐ€ ์žˆ์–ด์•ผ ์ •๋ฆฌ๊ฐ€ ๋” ์‰ฌ์›Œ์ง€๊ณ  ์ œ๊ฑฐ๊ฐ€ ๊ณต์œ  ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค. ๊ทธ๋ƒฅ ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ํ•˜๋‚˜์˜ ํŒŒ์ผ ์œ ํ‹ธ๋ฆฌํ‹ฐ(์„ค์น˜ ํ•„์š” ์—†์Œ)๋Š” ํ”„๋กœ์ ํŠธ์šฉ ์œ ํ‹ธ๋ฆฌํ‹ฐ(๋„๊ตฌ ์ œ์ž‘์ž๋กœ์„œ)๋ฅผ ์ž์ฃผ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์˜ ์ฃผ์š” ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ์‹œ๋‚˜๋ฆฌ์˜ค ๋ชจ๋‘์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค .

๋‹จ์ผ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ๋‹ต๋ณ€์€ ์„ ํƒ์˜ ํญ์„ ์ขํžˆ๋Š” ๋ฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)
  2. ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
  3. ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?
  4. ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  5. ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?
  6. ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?
  7. ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?
  8. ์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
  1. CLI(Windows, Linux, MacOS), WPF ๋ฐ WinForms.
  2. ๋•Œ๋•Œ๋กœ.
  3. ์˜ˆ, ์—ฌ๋Ÿฌ ๋ฒˆ ๊ทธ๋ฆฌ๊ณ  ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ๋ฉ”์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ํ•ด๊ฒฐ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!
  4. ๋„ค.
  5. 200-500ms๋Š” ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค!
  6. ๋งŽ์€ ์ข…์†์„ฑ์ด ์—†๋Š” ๊ฐ„๋‹จํ•œ CLI ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ 10MB๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค(์••์ถ•)!
  7. ๋„ค ํ™•์‹คํžˆ! ๋นŒ๋“œ ์‹œ๊ฐ„(ํŠนํžˆ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ)์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค! ์••์ถ• ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ๋กœ์˜ ์ „ํ™˜์€ ์„ ํƒ ์‚ฌํ•ญ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!
  8. ์˜ˆ ์˜ˆ: CoreRT!

IMHO, ์šฐ๋ฆฌ๋Š” golang๊ณผ ์œ ์‚ฌํ•œ ๊ฒŒ์‹œ ๊ฒฝํ—˜์„ ๋ชฉํ‘œ๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@thegreatco : ์˜ˆ, ๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๋กœ์˜ ์ „์ฒด ์ปดํŒŒ์ผ์€ ๋‹จ์ผ ํŒŒ์ผ ์•ฑ์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์ข‹์€ ์˜ต์…˜์ž…๋‹ˆ๋‹ค. GO์™€ ๊ฐ™์€ ์–ธ์–ด๋Š” AOT(Ahead-of-Time) ์ปดํŒŒ์ผ์„ ๊ธฐ๋ณธ ๋ชจ๋ธ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” JIT ์ปดํŒŒ์ผ์„ ํ†ตํ•ด ๋‹ฌ์„ฑ๋˜๋Š” ๋™์  ์–ธ์–ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํŠน์ • ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

CoreRT ๋Š” AOT ์ปดํŒŒ์ผ ์•ฑ์„ ์œ„ํ•œ .Net Core ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CoreRT๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ด ๋ฌธ์ œ์—์„œ ๋‹ค๋ฅธ ์ˆ˜๋‹จ์„ ํ†ตํ•ด ๋‹จ์ผ ํŒŒ์ผ ์•ฑ์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

"Hello World"๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด 216๊ฐœ์˜ ํŒŒ์ผ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ์‚ฌ์‹ค ์™ธ์—๋„

HelloWorld์— ํ•„์š”ํ•œ ํŒŒ์ผ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค."

  • 3-4๊ฐœ์˜ ํŒŒ์ผ๋งŒ ํ•„์š”ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์•ฑ ๋นŒ๋“œ
  • ๋…๋ฆฝํ˜• ์•ฑ์„ ๋นŒ๋“œํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ILLinker ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์ข…์†์„ฑ ์ˆ˜๋ฅผ ์ค„์ด์‹ญ์‹œ์˜ค.

ํŠน์ • ์œ„์น˜์˜ ๋””์Šคํฌ์— ์••์ถ•์„ ํ’€๋ฉด ๊ฐ„๋‹จํ•œ ๋ช…๋ น์ค„ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ œ๊ฑฐํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

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

@mattpwhite์— ๋Œ€ํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์˜ ๋‚˜์ค‘ ๋‹จ๊ณ„๊นŒ์ง€ ๋…๋ฆฝํ˜• ์•ฑ์€ ๋””์Šคํฌ๋กœ ์ถ”์ถœ๋œ ํŒŒ์ผ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์„ค๋ช… ์—์„œ ์ž‘์„ฑํ•œ ๊ธฐ์ˆ  ์ค‘ ์ผ๋ถ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์˜ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@BlitzkriegSoftware์— ์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์˜ฌ์ธ์› ๋Œ€ ์˜ฌ์ธ์› ์ž์ฒด ์ถ”์ถœ์— ๋Œ€ํ•œ ๋ช…๋ น ์Šค์œ„์น˜์˜ ์ผ๋ถ€๋กœ ์„ ํƒ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

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

<propertygroup>
    <SingleFileExtract> Never | Always | AsNeeded </SingleFileExtract>
</propertygroup>

์—ฌ๊ธฐ์—์„œ ์ดํ•ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. SingleFileExtract=Never๋ฅผ ์ปดํŒŒ์ผํ•  ๋•Œ ์•ฑ์— ์ถ”์ถœ(๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ด๋„ˆ๋ฆฌ)์„ ํ†ตํ•ด์„œ๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋‹จ์ผ ํŒŒ์ผ์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ž๋™ ์••์ถ• ํ’€๋ฆผ์˜ ๊ฒฝ์šฐ ์••์ถ•์„ ํ‘ผ ํŒŒ์ผ์„ ์ •๋ฆฌํ•˜๋Š” ์‹คํ–‰ ์ทจ์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฌ๋„ค์š”. ์ถ”์ถœ์˜ ์ •ํ™•ํ•œ ์œ„์น˜(์žˆ๋Š” ๊ฒฝ์šฐ)๋Š” ๊ฒฐ์ •์ ์ด๋ฉฐ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•ฑ๊ณผ ์ถ”์ถœ๋œ ๋ชจ๋“  ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@DoCode์— ์‘๋‹ตํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์—์„œ ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค.
ํ”Œ๋Ÿฌ๊ทธ์ธ ์ž์ฒด์— ๋ช‡ ๊ฐ€์ง€ ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ(๊ธฐ๋ณธ ์•ฑ๊ณผ ๊ณต์œ ๋˜์ง€ ์•Š์Œ) ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ๋‹จ์ผ ํŒŒ์ผ๋กœ๋„ ๊ฒŒ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ(ํฌํ•จ๋œ โ€‹โ€‹์ข…์†์„ฑ ํฌํ•จ)? ๊ฐ์‚ฌ ํ•ด์š”.

์˜ˆ @swaroop-sridhar, ๊ทธ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์ข…์†์„ฑ์ด ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ณต์œ  ์ข…์†์„ฑ๋งŒ ๋‹จ์ผ ํŒŒ์ผ ๊ธฐ๋ณธ ์•ฑ ์™ธ๋ถ€์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜ @madskristensen ์€ Visual Studio ๋ฐ ์ธ๊ธฐ ์žˆ๋Š” Newtonsoft.Json NuGet ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์„ค๋ช… ์„ ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋•Œ๋•Œ๋กœ ๋น„์Šทํ•œ ์ƒํ™ฉ์—์„œ ๊ฐ™์€ ์ƒํ™ฉ!

@DoCode ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ ์•ฑ์ด ๊ตฌํ˜„๋˜๊ณ  ์•ˆ์ •๋˜๋ฉด ๋‹จ์ผ ํŒŒ์ผ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ์ฃผ์†Œ ๊ธฐ๋Šฅ์„ ๊ณ„ํšํ•ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ ๋ฌธ์„œ๋Š” ์—ฌ๊ธฐ์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

@swaroop-sridhar ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์†์ ์ธ ์ฐธ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ทจ์†Œ ๋ช…๋ น์ด ์žˆ์œผ๋ฉด ํŠนํžˆ ์›๋ž˜ ๋‹จ๊ณ„์—์„œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)
    -- ๋ช…๋ น์ค„ ์œ ํ‹ธ๋ฆฌํ‹ฐ(์ฝ˜์†” ์•ฑ)
  2. ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
    -- ์•„๋‹ˆ์š”
  3. ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?
    -- ๋ณดํ†ต ์•„๋‹˜
  4. ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
    -- ๋„ค
  5. ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?
    -- < 1์ดˆ๊ฐ€ ์„ ํ˜ธ๋ฉ๋‹ˆ๋‹ค.
  6. ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?
    -- ํฌ๊ธฐ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  7. ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?
    -- 30 ์ดˆ
  8. ์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
    -- ์Šคํฌ๋ฆฝํŒ…ํ•˜๊ฑฐ๋‚˜ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€

1 - ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)

  • ๊ณ„๋žต
  • ๋ช…๋ น์ค„ ๋„๊ตฌ

2 - ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค

3 - ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ํ•˜์ง€๋งŒ ์ด๋ฏธ ์•Œ๋ ค์ง„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋Š๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜์‚ฌ์— ์˜์กดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

4 - ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•  ์˜ํ–ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค

5 - ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?

์•„๋‹ˆ, ์ด๋ฏธ ์กฐ๊ธˆ ๋Š๋ฆฌ๋‹ค

6 - ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?

ํ”„๋กœ์ ํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฅด์ง€๋งŒ ๊ฐ„๋‹จํ•œ ๋ช…๋ น์ค„ ๋„๊ตฌ์˜ ๊ฒฝ์šฐ ํ•œ ์ž๋ฆฌ mbs๋ณด๋‹ค ํด ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

7 - ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?

๊ฐœ๋ฐœ/๋ฐ˜๋ณต ์‹œ๊ฐ„์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ํ•œ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์ด ๊ธธ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ .net ํ•ต์‹ฌ ์•ฑ์€ ์ด๋ฏธ ๊ธฐ์กด .net ํ”„๋ ˆ์ž„์›Œํฌ ์•ฑ๋ณด๋‹ค ๋” ์˜ค๋ž˜ ๋นŒ๋“œ๋œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

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

8 - ์•ฑ ํฌ๊ธฐ๋ฅผ ์ ˆ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋„ค!

์–ธ์  ๊ฐ€ CoreRT๋ฅผ ์‚ฌ์šฉํ•œ AOT ์ปดํŒŒ์ผ์ด ์ž‘๋™ํ•˜์—ฌ golang ๋ฐ rust ๋ฐ ๊ธฐํƒ€ AOT ์ปดํŒŒ์ผ lang๊ณผ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์ง„์‹ฌ์œผ๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค. Unity3D๊ฐ€ IL2CPP๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@morganbr ๋‹ค์Œ์€ ๋‚˜์™€ ํ•จ๊ป˜ ์ผํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ๋งŽ์€ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ์ฃผ๋กœ C#, Go, Python์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)

ASP.NET Core ๋ฐ ์ฝ˜์†” ํ”„๋กœ๊ทธ๋žจ(๋Œ€๋ถ€๋ถ„ Linux)์€ ML.NET์ด ์šฐ๋ฆฌ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ž ์žฌ์ ์œผ๋กœ ์ผ๋ถ€ Windows ์›Œํฌ๋กœ๋“œ์ž…๋‹ˆ๋‹ค.

์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ๋กœ์„œ๋Š” ๊ฐ€๋Šฅ์„ฑ์ด ๋‚ฎ์Šต๋‹ˆ๋‹ค.

์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?

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

๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ „์ ์œผ๋กœ. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ์˜ ์ตœ์šฐ์„  ๊ณผ์ œ์ž…๋‹ˆ๋‹ค.

์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?

๋‚˜๋Š” 10์ดˆ ๋ฏธ๋งŒ์ด๋ฉด ๋ฌด์—‡์ด๋“  ๊ดœ์ฐฎ๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ๋‹ค. ์‹œ์ž‘ ์‹œ๊ฐ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉฑ๋“ฑ์„ฑ์ด ์žˆ๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ํ•œ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ๋กœ๋“œ๋˜๊ณ  ๋ณ€์ˆ˜๊ฐ€ ๋™์ผํ•œ ์ˆœ์„œ๋กœ ์ดˆ๊ธฐํ™”๋˜๋Š” ๋“ฑ์ž…๋‹ˆ๋‹ค.

์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?

์ฃผ๋กœ ๋ฐฐํฌ ๋ชฉ์ ์œผ๋กœ ์ž‘์„์ˆ˜๋ก ์ข‹์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์šด๋กœ๋“œํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ, ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€ ๋“ฑ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฌผ๋ก , C/C++ ๋ฐ Java๋ณด๋‹ค ๋น ๋ฅด๋ฉด ๋งŒ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?

30-90์ดˆ๊ฐ€ ์ด์ƒ์ ์ด์ง€๋งŒ 3๋ถ„ ๋ฏธ๋งŒ์ด๋ฉด ์ ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ค‘์†Œ ๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ(1k-500k LOC)์˜ ๊ฒฝ์šฐ 3๋ถ„ ์ด์ƒ์€ ๋‹ค์†Œ ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งค์šฐ ํฐ ํ”„๋กœ์ ํŠธ(1M LOC)์˜ ๊ฒฝ์šฐ 5๋ถ„์ด ํ—ˆ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

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

@mxplusb , @dark2201 , @RUSshy , @BlitzkriegSoftware ์‘๋‹ต์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค

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

๋” ๋‚ฎ์€ ์‹œ์ž‘ ์‹œ๊ฐ„ ๋ฐ ์ปดํŒŒ์ผ ์‹œ๊ฐ„๊ณผ ๊ด€๋ จํ•˜์—ฌ:
ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์•ฑ์€ ์‹œ์ž‘ ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์งง์Šต๋‹ˆ๋‹ค(์ ์–ด๋„ ๊ธฐ๋Šฅ ์‹œ์ž‘ ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š”). ์ปดํŒŒ์ผ ์‹œ๊ฐ„๋„ ๋” ์งง์Šต๋‹ˆ๋‹ค(๋” ์ ์€ ์ˆ˜์˜ ํŒŒ์ผ์„ ํฌํ•จํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—).
๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์ด ์™„๋ฃŒ๋˜๋Š” ์ฆ‰์‹œ ์‹œ์ž‘ ์‹œ๊ฐ„, ์ปดํŒŒ์ผ ์ฒ˜๋ฆฌ๋Ÿ‰ ๋ฐ ํŒŒ์ผ ํฌ๊ธฐ ์ธก์ •์— ๋Œ€ํ•ด ์•Œ๋ ค ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@swaroop-sridhar ๊ทธ ์ผ์ •์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”?

@ayende ์ฒซ ๋ฒˆ์งธ ๋ฐ˜๋ณต์€ ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ ์ค‘์ด๋ฉฐ ๋ช‡ ์ฃผ ์•ˆ์— ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@swaroop-sridhar

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

์‹คํ–‰: HelloWorld.exe

๋ฒˆ๋“ค ์•ฑ ๋ฐ ๊ตฌ์„ฑ ํŒŒ์ผ์€ ๋ฒˆ๋“ค์—์„œ ์ง์ ‘ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
๋‚˜๋จธ์ง€ 216๊ฐœ ํŒŒ์ผ์€ ์‹œ์ž‘ ์‹œ ๋””์Šคํฌ์— ์ถ”์ถœ๋ฉ๋‹ˆ๋‹ค.

์ฝ๊ธฐ ์ „์šฉ fs์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ IoT์— ์ผ๋ฐ˜์ ์ด๊ฑฐ๋‚˜ exe๊ฐ€ ro ์ปจํ…Œ์ด๋„ˆ ๋‚ด์—์„œ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ? exe์—์„œ๋„ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ์˜ต์…˜์ด ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@etherealjoy ์ด ์„น์…˜ ์— ํ‘œ์‹œ๋œ ์˜ˆ๋Š” ์ด ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๋Š” 2๋‹จ๊ณ„ ์—์„œ ์ž์ฒด ํฌํ•จ๋œ HelloWorld์— ๋Œ€ํ•œ ์˜ˆ์ƒ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค( ์ด ์„น์…˜ ์—์„œ ์–ธ๊ธ‰๋จ). ์ด ๋‹จ๊ณ„์—์„œ EXE์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์•ฑ์€ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์ˆœ์ˆ˜ ๊ด€๋ฆฌ ์•ฑ์ž…๋‹ˆ๋‹ค.

4 ๋‹จ๊ณ„ ๋˜๋Š” 5๋‹จ๊ณ„ ์— ์žˆ๋Š” ๊ฒฝ์šฐ ์œ„์˜ ๋…๋ฆฝํ˜• ์•ฑ์€ ๋ฒˆ๋“ค์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)

๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์˜ ๋ชจ๋“  ๊ฒƒ. ์ฝ˜์†” ์œ ํ‹ธ๋ฆฌํ‹ฐ, WPF, asp.net, ๊ฒŒ์ž„

์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋„ค. Sqlite๊ฐ€ ์ข‹์€ ์˜ˆ์ž…๋‹ˆ๋‹ค.

์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?

์•„๋งˆ ์•„๋‹ˆ์˜ค.

๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋„ค.

์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?

net.core๋Š” ์ด๋ฏธ ๋„ˆ๋ฌด ๋Š๋ฆฝ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ช‡ ์ดˆ ์ฆ๊ฐ€๋Š” ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. 5์ดˆ -- ์ ˆ๋Œ€ ์•„๋‹™๋‹ˆ๋‹ค.

์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?

์š”์ฆ˜์€ ์ƒ๊ด€์—†์–ด

ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?

์ตœ๋Œ€ 5๋ถ„์˜ ๋Š๋‚Œ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. UWP์šฉ 15-20๋ถ„ ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ๋Š” ๋ชจ๋‘๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ™•์‹ ํ•˜๋Š”.

@mjr27 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ด์ œ 1๋‹จ๊ณ„ ๊ตฌํ˜„์ด ์™„๋ฃŒ ๋˜์—ˆ์œผ๋ฉฐ 3.0.100-preview5-011568๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์— ์„ค๋ช…๋œ ๋Œ€๋กœ PublishSingleFile ์†์„ฑ์„ true ๋กœ ์„ค์ •ํ•˜์—ฌ ์•ฑ์„ ๋‹จ์ผ ํŒŒ์ผ์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฒ„์ „์—์„œ๋Š” ์—ฌ๊ธฐ ์— ์„ค๋ช…๋œ ๋Œ€๋กœ ๋ชจ๋“  ํฌํ•จ๋œ ํŒŒ์ผ์ด ์ฒ˜์Œ ์‹คํ–‰ ์‹œ ๋””์Šคํฌ๋กœ ์ถ”์ถœ๋˜๊ณ  ํ›„์† ์‹คํ–‰์—์„œ ์žฌ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ์ฒ˜๋ฆฌ๋Ÿ‰
ํŒŒ์ผ์ด ๊ฒŒ์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ๊ฐœ๋ณ„ ํŒŒ์ผ๋กœ ๊ธฐ๋ก๋˜๋Š”์ง€ ๋˜๋Š” ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ธฐ๋ก๋˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์‹œ๊ฐ„์ƒ ํฐ ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ํฌ๊ธฐ ๋ฐ ์‹œ์ž‘
๋‹ค์Œ ํ‘œ๋Š” ๋‹จ์ผ ํŒŒ์ผ๋กœ ๋นŒ๋“œ๋œ ๋ช‡ ๊ฐ€์ง€ ์•ฑ์˜ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  • ์ฝ˜์†”: Hello World ์•ฑ์ž…๋‹ˆ๋‹ค. ๋ณด๊ณ ๋œ ์‹œ๊ฐ„์€ ์‹œ๊ณ„ ํ‹ฑ์„ ํ†ตํ•ด ์ธก์ •๋œ ์•ฑ ์‹คํ–‰ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • WPF ์•ฑ: msix-catalog ์•ฑ. ๋ณด๊ณ ๋œ ์‹œ๊ฐ„์€ ์Šคํ†ฑ์›Œ์น˜๋ฅผ ํ†ตํ•ด ์ธก์ •๋œ ์ดˆ๊ธฐ ํ™”๋ฉด์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
  • Fw: ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ๋นŒ๋“œ
  • ์ž์ฒด: ์ž์ฒด ํฌํ•จ๋œ ๋นŒ๋“œ์ž…๋‹ˆ๋‹ค.
    ๋ชจ๋“  ์‹คํ–‰์€ ์™ธ๋ถ€ ์š”์ธ์˜ ์˜ํ–ฅ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์•ˆํ‹ฐ๋ฐ”์ด๋Ÿฌ์Šค ๊ฒ€์‚ฌ๊ฐ€ ๊บผ์ ธ ์žˆ์„ ๋•Œ ์‹œ๊ฐ„์ด ์ •ํ•ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธก์ • | ์ฝ˜์†” ํŽŒ์›จ์–ด | ์ฝ˜์†” ์…€ํ”„ | WPF FW | WPF ์ž์ฒด
-- | -- | -- | -- | --
ํŒŒ์ผ ํฌ๊ธฐ(MB) | 0.32 | 66.5 | 20.69 | 118.9
์ผ๋ฐ˜ ์‹คํ–‰(์ดˆ) | 0.123 | 0.127 | 3.32 | 3.24
๋‹จ์ผ exe ์ฒซ ์‹คํ–‰(์ดˆ) | 0.127 | 0.565 | 3.67 | 4.14
๋‹จ์ผ exe ํ›„์† ์‹คํ–‰(์ดˆ) | 0.124 | 0.128 | 3.30 | 3.29

๊ตฌํ˜„์ด ํ›„์† ๊ฐœ๋ฐœ ๋‹จ๊ณ„ ๋กœ ์ง„ํ–‰๋จ์— ๋”ฐ๋ผ ์ˆซ์ž๋ฅผ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์†Œ์‹์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

3.0 RTM์—์„œ ์Šคํ…Œ์ด์ง• ๋ฌธ์„œ์— ์–ธ๊ธ‰๋œ ๋ชจ๋“  ๋‹จ๊ณ„๊ฐ€ ์™„๋ฃŒ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ตฌํ˜„๋  ๋•Œ๊นŒ์ง€ 3.0 ์ดํ›„๋ฅผ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์—ฌ๊ธฐ ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด .net core 3.0์€ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์ˆœ์ˆ˜ msil ์•ฑ์ด ๋ฒˆ๋“ค์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก 2๋‹จ๊ณ„ ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋‹จ๊ณ„๋Š” ์ถ”๊ฐ€ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด .net core 3.0์€ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์ˆœ์ˆ˜ msil ์•ฑ์ด ๋ฒˆ๋“ค์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก 2๋‹จ๊ณ„ ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ ๋‹จ๊ณ„๋Š” ์ถ”๊ฐ€ ๋ฆด๋ฆฌ์Šค๋ฅผ ์œ„ํ•ด ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค.

:( RTM์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์Šต๋‹ˆ๋‹ค.

@cup dotnet publish -o out /p:PublishSingleFile=true /p:RuntimeIdentifier=win-x64 ๋กœ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ๋ฐ”๋‹๋ผ ์ฝ˜์†” ์•ฑ์„ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

dotnet publish -o out /p:PublishSingleFile=true /p:RuntimeIdentifier=win-x64 /p:IncludeSymbolsInSingleFile=true ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ .pdb ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋งํ•˜๋ฉด ๋” ๋ฉ€๋ฆฌ ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์„ ์•Œ๋ ค์ฃผ์‹  @seesharprun ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์˜ˆ @cup , ๋ช…๋ น์ค„ ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ์— ๊ถŒ์žฅ๋˜๋Š” ๋ฐฉ๋ฒ•์€ ๋ช…๋ น์ค„์—์„œ PublishSingleFile ์†์„ฑ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@etherealjoy coreclr ๋Ÿฐํƒ€์ž„ ์ €์žฅ์†Œ๋Š” ๊ฑฐ์˜ ํ•œ ๋‹ฌ ์•ˆ์— ๊ธฐ๋Šฅ ์ž‘์—…์— ๋Œ€ํ•ด ๋Œ€๋ถ€๋ถ„ ์ž ๊ฒจ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‹จ๊ณ„์— ์‹œ๊ฐ„์ด ์ถฉ๋ถ„ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ›„์† ๋‹จ๊ณ„๋Š” ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค์—์„œ ์ œ๊ณต๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์˜ค๋Š˜ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์ง€๋งŒ ์ถ”์ถœ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜ ์— ๋”ฐ๋ฅด๋ฉด . ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ถ”์ถœ๋˜๋Š” ์œ„์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ExtractBaseDir์ด๋ผ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์Šค์œ„์น˜๋ฅผ runtimeconfig์— ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์€ runtimeconfig.template.json์ด ์žˆ์Šต๋‹ˆ๋‹ค.

{
    "configProperties" : {
        "ExtractBaseDir": "C:\\"
    },
    "ExtractBaseDir": "C:\\"   
}

์ƒ์„ฑ๋œ app.runtimeconfig.json์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

{
  "runtimeOptions": {
    "configProperties": {
      "ExtractBaseDir": "C:\\"
    },
    "ExtractBaseDir": "C:\\"
  }
}

์ƒ์„ฑ๋œ exe๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ•  ๋•Œ ์—ฌ์ „ํžˆ tmp ํด๋”์— ์••์ถ•๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์ด Preview5์—์„œ ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€๋งŒ "ExtractBaseDir"์ด runtimeconfig.json์— ์žˆ์–ด์•ผ ํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ณ  ์˜ˆ์ œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

@igloo15 ์˜ฌ๋ ค ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ๋Š” DOTNET_BUNDLE_EXTRACT_BASE_DIR ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋งŒ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ˜„์žฌ ๊ตฌํ˜„ ๋‹จ๊ณ„์—์„œ runtimeconfig.json ๋ฅผ ํฌํ•จํ•œ ๋ชจ๋“  ํŒŒ์ผ์ด ์ฒ˜๋ฆฌ๋˜๊ธฐ ์ „์— ๋””์Šคํฌ๋กœ ์ถ”์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ ExtractBaseDir ์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ASP.NET Core ํ”„๋กœ์ ํŠธ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์นจ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ถŒ์žฅ๋˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์‹œ์Šคํ…œ ์œ ํ˜•์ด ๋กœ๋“œ๋˜๋Š” ์œ„์น˜๋ฅผ ์ฐพ๊ณ  ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ธฐ์ค€์œผ๋กœ IHostingEnvironment ContentRootPath ๋ฐ WebRootPath๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@keithwill AppContext.BaseDirectory ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ app.dll ๋ฐ ๊ธฐํƒ€ ๋ชจ๋“  ํŒŒ์ผ์ด ๋””์Šคํฌ๋กœ ์ถ”์ถœ๋˜๋Š” ์œ„์น˜๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์„ ContentRootPath ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@igloo15 : ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ๊ณต์œ ํ•ด ์ฃผ์‹ค ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

  • ๋””๋ฒ„๊น… ๋˜๋Š” ํ”„๋กœ๋•์…˜ ๋ฐฐํฌ ์‹œ๋‚˜๋ฆฌ์˜ค์— ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๊นŒ?
  • ์ด ๊ฒฝ์šฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด runtimeconfig.json ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

์ด ์„ค์ •์— ๋Œ€ํ•œ ํŠน์ • ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ๋Š”์ง€ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž์˜ ์˜๊ฒฌ๋„ ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@swaroop-sridhar

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

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

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

@cup ์ €๋Š” ์ด ์ฃผ์ œ๊ฐ€ ๋””์ž์ธ ๋ฌธ์„œ ๊ตฌํ˜„์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๋””์ž์ธ ๋ฌธ์„œ์—์„œ๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ ExtractBaseDir ๊ฐ€ ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์ด ์„ค๊ณ„ ๋ฌธ์„œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์—†๋‹ค๋ฉด ์ด ๋ฌธ์ œ๋Š” ๋ฌด์—‡์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

@igloo15์— ๋Œ€ํ•œ ์„ค๋ช… ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

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

@igloo15 ๋””์ž์ธ ๋ฌธ์„œ๋„ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์ด์ง€๋งŒ ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€ ๊ธฐ๋Šฅ ์ž์ฒด์ž…๋‹ˆ๋‹ค. ExtractBaseDir ๋Š” ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ด๋ฉฐ ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์— ์–ฝ๋งค์ด๊ธฐ๋ณด๋‹ค๋Š” ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด "ํ˜„์žฌ" ๋ฆด๋ฆฌ์Šค๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

@cup , ์ด ์Šค๋ ˆ๋“œ์—์„œ ๊ด€์‹ฌ ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์˜ ๊ด€์‹ฌ์„ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์— ์งˆ๋ฌธํ–ˆ์Šต๋‹ˆ๋‹ค.
์งˆ๋ฌธ์ด ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ ์ด ์Šค๋ ˆ๋“œ์˜ ๊ธธ์ด์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์šฐ๋ ค๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์—๋Š” ๋งํฌ๋œ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

@cup @swaroop-sridhar

๋‚ด๊ฐ€ ๋จผ์ € ๋งํ•˜๊ณ  ์‹ถ์€ ๋ช‡ ๊ฐ€์ง€๋Š” ์ด ๊ธฐ๋Šฅ์ด ์Šคํ…Œ์ด์ง€ ๋ฌธ์„œ ์˜ ์Šคํ…Œ์ด์ง€ 1์—์„œ๋งŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๋‹จ๊ณ„ 2 - 5๋Š” ์••์ถ•์„ ํ’€์ง€ ์•Š๊ณ  ๋ฒˆ๋“ค ๋‚ด๋ถ€์—์„œ dll์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ถ”์ถœ ๊ธฐ๋ณธ ๋””๋ ‰ํ† ๋ฆฌ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹๊ฒฐ์ •ํ•˜๋Š” ์„ค์ •์€ 2-5๋‹จ๊ณ„์—์„œ ์‹ค์ œ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. NetCore 3.0์ด 1๋‹จ๊ณ„๋ฅผ ๊ฐœ๋ฐœํ•  ๊ณ„ํš์ด๋ฏ€๋กœ ์ด ๊ธฐ๋Šฅ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์‹œ๊ธฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ธฐ๋Šฅ์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ๋Š” ์ด ๋ฐฉ๋ฒ•์„ dotnet-wrap๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๊ณผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด ๋ฐฉ๋ฒ•์˜ ์ฃผ์š” ์ด์ ์€ ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ๋  ๋•Œ์™€ ๋” ๊ฐ€๊นŒ์šด ๋นŒ๋“œ ์ฒด์ธ์— ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ์ถ•ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์€ .NET์— ๋งž์ถฐ์ง„ ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ๊ตฌ์„ฑ, ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค ๋“ฑ๊ณผ ๊ฐ™์€ .NET Core ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‰˜์•™์Šค๋ฅผ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋„๊ตฌ๋ฅผ ๋„คํŠธ ์ฝ”์–ด์— ํŠน๋ณ„ํžˆ ๋งž์ถฐ์ ธ ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dotnet-wrap์ด ํ•  ์ˆ˜ ์—†๋Š” ์ถ”์ถœ ์œ„์น˜ ๊ตฌ์„ฑ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

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

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋Ÿฐํƒ€์ž„์— ํฌํ•จ๋œ runtimeconfig๋ฅผ ์ฝ์ง€ ์•Š๊ณ  ๋Œ€์‹  ๋‚ด๋ถ€์ ์œผ๋กœ ์†์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ์ถ”์ถœ ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์ ์œผ๋กœ ํ›จ์”ฌ ๋นจ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@igloo15 : ๋ฒˆ๋“ค์˜ ๋‚ด์šฉ์„ ๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜๋Š” ๊ฒƒ์€ 2๋‹จ๊ณ„ ์ดํ›„์˜ ํŠน์ • ์•ฑ์— ์œ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์•ฑ์˜ ๋ฒˆ๋“ค์— ์‚ฌ์šฉ์ž ์ง€์ • ๊ธฐ๋ณธ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ 5๋‹จ๊ณ„๊นŒ์ง€ ์ถ”์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์€ ๋Ÿฐํƒ€์ž„ ์‹œ ํŒŒ์ผ๋กœ ์ถ”์ถœํ•  ์•Œ ์ˆ˜ ์—†๋Š” ์œ ํ˜•์˜ ์ฝ˜ํ…์ธ  ํŒŒ์ผ์„ ๋ฒˆ๋“ค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” runtimeconfig ์˜ต์…˜๋ณด๋‹ค ์ถ”์ถœ ์œ„์น˜๋ฅผ ๋นŒ๋“œ ํƒ€์ž„ ์„ค์ •(์˜ˆ: msbuild-property)์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๊ณ  ํšจ์œจ์ ์ธ wrt ๊ตฌํ˜„์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

.NET Framework 4.7.2(์˜ˆ:) ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ๋กœ ํŒจํ‚ค์ง•ํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ด ๊ธฐ๋Šฅ์˜ ์˜๋„์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด .NET Core ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งŒ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๊นŒ?

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

@gaviriar .NET Framework ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ˆ, .NET Core ๋Ÿฐํƒ€์ž„์„ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค("์ž์ฒด ํฌํ•จ" ๊ฒŒ์‹œ๋ผ๊ณ  ํ•จ).

@tomrus88 ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. .NET Framework ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ฐธ์œผ๋กœ ๋ถ€๋„๋Ÿฌ์šด ์ผ์ž…๋‹ˆ๋‹ค. .NET Framework ๋Ÿฐํƒ€์ž„์„ ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒ์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์„œ์˜ ๊ด€๋ จ ์ž‘์—… ์„น์…˜์—์„œ ๋„๊ตฌ ๋ชฉ๋ก์„ ๋ด…๋‹ˆ๋‹ค. ์œ„์—์„œ ์ œ์•ˆํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํŠนํžˆ ๊ถŒ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@gaviriar .NET Framework๋Š” Windows OS์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋ฒˆ๋“ค๋งํ•˜๋Š” ์ง€์›๋˜๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค.

@gaviriar ๋Ÿฐํƒ€์ž„์„ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ .NET Core๋กœ ์ „ํ™˜ํ•ด์•ผ ํ•˜๋Š” ์ฃผ์š” ์ด์œ  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

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

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. .NET Framework๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” ๋งŽ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ .NET Core์—์„œ๋„ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. .NET Core์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ? ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธํ•œ ๊ฒฝ์šฐ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ์ „ํ™˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์ฐฝ์— ํŠน์ •ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. .NET Framework ๋Œ€์ƒ์„ ๊ณ ์ˆ˜ํ•˜๊ณ  .NET Core์˜ ์žฌ๋ฏธ๋ฅผ ๋†“์น˜๋Š” ๊ฒƒ ์™ธ์— ๋‹ค๋ฅธ ์˜ต์…˜์ด ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค./

@gaviriar ์ด๊ฒƒ์€ ์ฃผ์ œ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ Microsoft.Windows.Compatibility ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ •ํ™•ํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด .NET Core์šฉ Windows API๋ฅผ ์ œ๊ณตํ•˜๋Š” Windows ํ˜ธํ™˜์„ฑ NuGet ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ?

@gaviriar : ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์„ค๋ช…:

์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๋ฉด ๋Œ€์ƒ ํ”„๋ ˆ์ž„์›Œํฌ ๋Ÿฐํƒ€์ž„์ด ์‹คํ–‰ ํŒŒ์ผ์— ๋ฒˆ๋“ค๋กœ ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ๋Œ€์ƒ ๋จธ์‹ ์— ์‚ฌ์ „ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ๋นŒ๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์†(๋Ÿฐํƒ€์ž„์ด ๋Œ€์ƒ์— ์„ค์น˜๋จ) ๋ฐ ์ž์ฒด ํฌํ•จ(๋Ÿฐํƒ€์ž„์ด ์•ฑ๊ณผ ํ•จ๊ป˜ ํŒจํ‚ค์ง€๋จ) ์•ฑ์€ ๋ชจ๋‘ ๋‹จ์ผ ํŒŒ์ผ๋กœ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ .net core 3.0 ์•ฑ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์„œ์˜ ๊ด€๋ จ ์ž‘์—… ์„น์…˜์—์„œ ๋„๊ตฌ ๋ชฉ๋ก์„ ๋ด…๋‹ˆ๋‹ค. ์œ„์—์„œ ์ œ์•ˆํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํŠนํžˆ ๊ถŒ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

.net ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฒฝ์šฐ ๋‚ด๊ฐ€ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์€ ์•ฑ์ด ์ž์ฒด์ ์œผ๋กœ ํŒŒ์ผ ์ถ”์ถœ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ: ์ข…์†์„ฑ์„ ์•ฑ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๊ด€๋ฆฌ ๋ฆฌ์†Œ์Šค๋กœ ํฌํ•จ์‹œํ‚จ ๋‹ค์Œ ์‹œ์ž‘ ์‹œ ๋ฆฌ์†Œ์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค๋ง ๋ฐ ์ถ”์ถœ์„ ์œ„ํ•ด ๋ฒˆ๋“ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ netstandard๋กœ ๊ตฌ์ถ•๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—) ๊ด€๋ฆฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค.

@igloo15 ๋ฐ @swaroop-sridhar ์ฃผ์ œ๊ฐ€ ์•„๋‹Œ ์ด๋Ÿฌํ•œ ์˜๊ฒฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์–ธ์  ๊ฐ€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ด ํ† ๋ก ์„ ์ฝ์„ ๋•Œ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋‚˜์™€ ๊ณต์œ ํ•œ ์˜ต์…˜์„ ํ‰๊ฐ€ํ•˜๊ณ  ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋ฌด์—‡์ธ์ง€ ์•Œ๋ ค์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋น ๋ฅธ ์—…๋ฐ์ดํŠธ!

์ด ๊ฐ„๋‹จํ•œ Hello World ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ ์‹คํ–‰ ํŒŒ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ž์ฒด ํฌํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ .NET ์ฝ”์–ด ๋Ÿฐํƒ€์ž„์ด ์„ค์น˜๋˜์ง€ ์•Š์€ ์ƒˆ Windows 7 ์„ค์น˜์—์„œ ์ด ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Failed to load the DLL from [C:\Users\vagrant\AppData\Local\Temp\.net\HelloWorld
\muasjfkf.kyn\hostfxr.dll], HRESULT: 0x80070057
The library hostfxr.dll was found, but loading it from C:\Users\vagrant\AppData\
Local\Temp\.net\HelloWorld\muasjfkf.kyn\hostfxr.dll failed
  - Installing .NET Core prerequisites might help resolve this problem.
     https://go.microsoft.com/fwlink/?linkid=798306

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•ฑ์„ dotnet publish /p:PublishSingleFile=true ๋˜๋Š” /p:PublishSingleFile=false ๋กœ ๊ฒŒ์‹œํ•˜๋Š” ๋นŒ๋“œ๊ฐ€ ์‹คํ–‰ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ƒ๋œ ๋™์ž‘์ž…๋‹ˆ๊นŒ?

๋ฒˆ์‹ ๋‹จ๊ณ„

  1. ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒŒ์‹œํ•˜์—ฌ HelloWorld.exe ์ƒ์„ฑ

  2. ์‹คํ–‰ ํŒŒ์ผ์„ .NET Core ๋Ÿฐํƒ€์ž„์ด ์„ค์น˜๋˜์ง€ ์•Š์€ Windows 7 ์„ค์น˜์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  3. HelloWorld.exe ์‹คํ–‰

@gaviriar ๊ฒŒ์‹œํ•œ ์˜ˆ์ œ๋ฅผ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ฆ‰, ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” HelloWorld์šฉ์œผ๋กœ ์ž์ฒด ํฌํ•จ๋œ ๋‹จ์ผ exe๋ฅผ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ dotnet publish /p:PublishSingleFile=true ๋˜๋Š” /p:PublishSingleFile=false๋กœ ์•ฑ ๊ฒŒ์‹œ๋ฅผ ๋นŒ๋“œํ•ด๋„ ์‹คํ–‰ ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ƒ๋œ ๋™์ž‘์ž…๋‹ˆ๊นŒ?

์ด๊ฒƒ์€ ํ™•์‹คํžˆ ์˜ˆ์ƒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ ์•ฑ์€ ์•ฝ 70MB์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค(gitlab ํŽ˜์ด์ง€์— ํ‘œ์‹œ๋œ ๋””๋ฒ„๊ทธ ๋นŒ๋“œ์˜ ๊ฒฝ์šฐ). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ์ •ํ™•ํžˆ ์‹คํŒจํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์ผ๋ฐ˜ ์•ฑ ํ˜ธ์ŠคํŠธ์ž…๋‹ˆ๋‹ค. ๊นจ๋—ํ•œ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ฒŒ์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ์ฐธ๊ณ  ์‚ฌํ•ญ -- IncludeSymbolsInSingleFile IncludeSymbolsInFile ๋กœ ์ž˜๋ชป ์ž‘์„ฑ๋œ ์†์„ฑ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๊ท€ํ•˜๊ฐ€ ๋ณด๊ณ ํ•œ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค.

@gaviriar ๋Œ€์ƒ ๋Ÿฐํƒ€์ž„ ์‹๋ณ„์ž๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ฌ๋ฐ”๋ฅธ hostfxr.dll์„ ๋ฒˆ๋“ค๋กœ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. hostfxr.dll์—๋Š” Windows 7 ์‹œ์Šคํ…œ์— ์—†๋Š” ํŠน์ • vc++ ์žฌ๋ฐฐํฌ ๊ฐ€๋Šฅ ํŒจํ‚ค์ง€๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์— dll์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ข…์†์„ฑ ์›Œ์ปค ๋„๊ตฌ์—์„œ ๋กœ๋“œํ•˜๋ ค๊ณ  ํ•˜๋ฉด ์˜์กดํ•˜๋Š” dll์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

IL ๋ณ‘ํ•ฉ: ILMerge์™€ ๊ฐ™์€ ๋„๊ตฌ๋Š” ์—ฌ๋Ÿฌ ์–ด์…ˆ๋ธ”๋ฆฌ์˜ IL์„ ํ•˜๋‚˜๋กœ ๊ฒฐํ•ฉํ•˜์ง€๋งŒ ํ”„๋กœ์„ธ์Šค์—์„œ ์–ด์…ˆ๋ธ”๋ฆฌ ID๋ฅผ ์žƒ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹จ์ผ ํŒŒ์ผ ๊ธฐ๋Šฅ์˜ ๋ชฉํ‘œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์–ด์…ˆ๋ธ”๋ฆฌ ์ •์ฒด์„ฑ์„ ์žƒ๋‹ค

์ด๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
๋‹จ์ผ exe ์ž์ฒด ํฌํ•จ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด zip/unzip ๋˜๋Š” ๊ธฐํƒ€ ๋ฒˆ๋“ค ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ•ญ์ƒ ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋‹ค์Œ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋‹จ์ผ exe ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•!?? ๋˜๋Š” exe ํŒŒ์ผ์ด ๋„ˆ๋ฌด ํฌ์ง€๋งŒ Hello World๋ฐ–์— ์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ•ญ์ƒ ๋ฌธ์ œ๊ฐ€ ์žˆ๊ณ  ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™œ ์ฒ ์ €ํ•˜๊ฒŒ ํ•˜์ง€ ์•Š๋Š”์ง€.
์‚ฌ์‹ค ์ฒ˜์Œ๋ถ€ํ„ฐ IL-Merge์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ์‚ฌ๋žŒ๋“ค์€ ๋‹จ์ผ EXE์— ๊ทธ๋ ‡๊ฒŒ ์ง‘์ฐฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
exe(1)+dll(1-2) ๋„ ๊ดœ์ฐฎ์ง€๋งŒ 400 ๋งˆ์šดํŠธ dll์€ ์•„๋‹™๋‹ˆ๋‹ค.
ppl์€ ์ฝ”๋“œ๋ฅผ ์„œ๋ฒ„ ๋””์Šคํฌ๋กœ ์ ˆ๋Œ€ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•˜๊ณ  ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์‚ฌ๋žŒ๋“ค์€ ๋ฐฐํฌ ๋น„์šฉ์„ ์ค„์ด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.(๋””์Šคํฌ, ๋ฉ”๋ชจ๋ฆฌ, ๋Œ€์—ญํญ ๋“ฑ...)

์ด ๋ฌธ์ œ๊ฐ€ 3.0 ๋ฆด๋ฆฌ์Šค์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ์ด ๋ฌธ์„œ ์— ์„ค๋ช…๋œ ๋‹จ๊ณ„๋ฅผ ํ†ตํ•ด ๋‹จ์ผ ํŒŒ์ผ ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์„ ์ถ”์ ํ•˜๋„๋ก 3.0 ์ด์ •ํ‘œ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

@sgf , ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ค„์ด๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํฌ๊ธฐ ์ถ•์†Œ ๊ธฐํšŒ๋Š” ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ์ œ๊ณต๋˜๋ฉฐ ๋‹จ์ผ exe์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
1) ๊ฒŒ์‹œํ•ด์•ผ ํ•˜๋Š” ์ฝ˜ํ…์ธ ์˜ ์–‘์„ ์ค„์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด:
* ๋„๊ตฌ์™€ ๊ฐ™์€ ILLinker๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ, ์–ด์…ˆ๋ธ”๋ฆฌ ์ผ๋ถ€ ๋“ฑ์„ ํŠธ๋ฆฌ๋ฐํ•ฉ๋‹ˆ๋‹ค.
์ด ์ž‘์—…์€ dotnet/coreclr#24092 ๋ฐ mono/linker#607๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ๋ณ„๋„๋กœ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.
* JITting์ด ์ง€์›๋˜์ง€ ์•Š๋Š” "๊ฐ์†Œ๋œ ๊ธฐ๋Šฅ" ๋ชจ๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์กฐ์น˜๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
2) ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ์— ์••์ถ• ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๊ธฐ๋Šฅ์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ํŒŒ์ผ(๋ฐ ๋‹จ์ผ ํŒŒ์ผ์ด ์•„๋‹Œ) ์•ฑ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด HelloWorld ์ฝ˜์†” ์•ฑ์˜ ๊ฒฝ์šฐ
์ผ๋ฐ˜ ๊ฒŒ์‹œ ํฌ๊ธฐ = 67.4MB
์ž˜๋ฆฐ ํฌ๊ธฐ = 27MB
ํŠธ๋ฆฌ๋ฐ, ๋‹จ์ผ ํŒŒ์ผ, ์••์ถ•(ํ”„๋กœํ† ํƒ€์ž…์„ ํ†ตํ•ด) = 12MB

@swaroop-sridhar ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ๋‹จ์ผ ํŒŒ์ผ exe์˜ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
Assembly.GetExecutingAssembly().Location ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด \AppData\Local\Temp.net์— ์ถ”์ถœ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

@ chris3713 ํ˜„์žฌ exe ์œ„์น˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ API์— ๋Œ€ํ•œ PInvoke-ing์ž…๋‹ˆ๋‹ค. ์˜ˆ: GetModuleFileNameW (Null, <buffer>, <len>)

@ chris3713 ํ˜„์žฌ exe ์œ„์น˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ API์— ๋Œ€ํ•œ PInvoke-ing์ž…๋‹ˆ๋‹ค. ์˜ˆ: GetModuleFileNameW (Null, <buffer>, <len>)

๋•๋ถ„์— Process.GetCurrentProcess().MainModule.FileName ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

PublishSingleFile=true๋กœ ๊ฒŒ์‹œ๋œ Windows ์„œ๋น„์Šค๋กœ asp .net ํ•ต์‹ฌ ์ž‘์—…์ž/์›น API์—์„œ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜๊ณ  sc create testwk binPath="[...]/MyAspNetCoreWorker.exe" then sc start testwk ์„ ํ†ตํ•ด ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

[...]\bin\publish\x64>sc start testwk

SERVICE_NAME: testwk
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 5060
        FLAGS              :

[...]\bin\publish\x64>sc stop testwk

SERVICE_NAME: testwk
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 3  STOP_PENDING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

๋Ÿฐ๋‹์ด ๋ฌถ์ธ ์Šคํ…Œ์ด์ง€ 2๊ฐ€ ๋„ˆ๋ฌด ๊ธฐ๋Œ€๋˜๋„ค์š”๐Ÿ˜€
๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , Stage 2๋Š” ์—ฌ์ „ํžˆ .Net Core 3.0์˜ ์ผ๋ถ€๋กœ ๊ณ„ํš๋ฉ๋‹ˆ๊นŒ?

๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. .net core์˜ ํผ๋ธ”๋ฆฌ์‹ฑ ์„œ๋น„์Šค๊ฐ€ ์ด์ œ ์ •๋ง ๊ฐ„๋‹จํ•ด์กŒ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

CoreRT: ( 2.5mb )

image

image

zip ํ•ดํ‚น ์—†์Œ , ์ˆจ๊ฒจ์ง„ ๋น„์šฉ ์—†์Œ, ์—”์ง„์— ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ํฌํ•จ, csproj ๊ตฌ์„ฑ(๋ฐ˜์‚ฌ)์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ ๋น„ํ™œ์„ฑํ™”

์ด๊ฒƒ์ด dotnet์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. GO์™€ ๊ฒฝ์Ÿํ•˜๊ณ  ํฌ๊ธฐ์™€ ์„ฑ๋Šฅ ๋ฉด์—์„œ ๋ชจ๋‘ ๋Šฅ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ด€์‹ฌ ์žˆ๋Š” ์‚ฌ๋žŒ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ™•์ธํ•˜์„ธ์š”.

https://github.com/dotnet/corert

MonoGame์— ๋Œ€ํ•œ ์ƒ˜ํ”Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/dotnet/corert/tree/master/samples/MonoGame

์ œ์•ˆ๋œ ์†”๋ฃจ์…˜ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ด ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. CoreRT๋Š” ์ง„์ •์œผ๋กœ ์ตœ๊ณ ์ž…๋‹ˆ๋‹ค. MS๋Š” ๊ทธ๊ฒƒ์— ์ง‘์ค‘ํ•˜์ง€ ์•Š์Œ์œผ๋กœ์จ ํฐ โ€‹โ€‹์‹ค์ˆ˜๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

dotnet-sdk-3.0.100-preview8-013656-osx-x64.tar.gz ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ macOS์—์„œ ์ด ๊ธฐ๋Šฅ์„ ํ…Œ์ŠคํŠธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊ทธ์—์„œ ๋ฆด๋ฆฌ์Šค๋กœ ๋˜๋Š” ๊ทธ ๋ฐ˜๋Œ€๋กœ ๊ตฌ์„ฑ์„ ์ „ํ™˜ํ•˜๊ณ  ๋‹ค์‹œ ๋นŒ๋“œํ•˜๋ฉด ์‹คํ–‰ ํŒŒ์ผ ํฌ๊ธฐ์— 10MB๊ฐ€ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด์ „ ๊ตฌ์„ฑ์œผ๋กœ ๋‹ค์‹œ ์ปดํŒŒ์ผํ•ด๋„ bin ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๋Ÿฌํ•œ ํฌ๊ธฐ ์ฆ๊ฐ€๋Š” ๋ณต๊ตฌ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

mkdir /tmp/dotnet-preview8
curl -s https://download.visualstudio.microsoft.com/download/pr/a974d0a6-d03a-41c1-9dfd-f5884655fd33/cf9d659401cca08c3c55374b3cb8b629/dotnet-sdk-3.0.100-preview8-013656-osx-x64.tar.gz | tar -xvz -C /tmp/dotnet-preview8
export PATH=/tmp/dotnet-preview8:$PATH

dotnet new console -o /tmp/myApp
pushd /tmp/myApp

# publish with Debug
dotnet publish /p:PublishSingleFile=true,RuntimeIdentifier=osx-x64,Configuration=Debug -o bin/a/b/c/d

bin/a/b/c/d/myApp
# outputs: Hello World!

du -sh bin/a/b/c/d
# outputs  70M  bin/a/b/c/d

# publish with Release
dotnet publish /p:PublishSingleFile=true,RuntimeIdentifier=osx-x64,Configuration=Release -o bin/a/b/c/d

du -sh bin/a/b/c/d
# outputs:  80M bin/a/b/c/d

# publish with Debug again
dotnet publish /p:PublishSingleFile=true,RuntimeIdentifier=osx-x64,Configuration=Debug -o bin/a/b/c/d
# still outputs:  80M   bin/a/b/c/d

๋นŒ๋“œ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„๋„ ์ดˆ๊ธฐ ๋นŒ๋“œ ์ดํ›„์— Rebuild target( /t:Rebuild )์„ ํ˜ธ์ถœํ•˜๋ฉด ์ถœ๋ ฅ ํฌ๊ธฐ๊ฐ€ ์ปค์ง‘๋‹ˆ๋‹ค.

@am11 ๋ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒŒ์‹œ๋Š” ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค(cc @nguerrera).

.Net Core 3 ๋ฏธ๋ฆฌ๋ณด๊ธฐ 8 ์ดํ›„๋กœ ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ ์•ฑ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ๋ทฐ์–ด์— ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

image

์ €๋Š” Windows Server 2019๋ฅผ ์‚ฌ์šฉ ์ค‘์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ด ์˜ค๋ฅ˜๋Š” .Net Core SDK Preview 7์„ .Net Core SDK Preview 8๋กœ ์—…๋ฐ์ดํŠธํ•œ ํ›„์— ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•œ ํ›„ ๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Safirion ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์™€ ๊ด€๋ จ๋œ ๊ธฐ๋ณธ ๋‚ด๋ถ€ ํ˜•์‹์„ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•œ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ ์ถœ๋ ฅ์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค๋ฅธ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ฆฌ ๋ณด๊ธฐ 8๊ณผ 9 ์‚ฌ์ด์—๋Š” ํœด์‹ ์‹œ๊ฐ„์ด ์—†์Šต๋‹ˆ๋‹ค.

Linux์—์„œ ๊ธฐ๋ณธ ์ถ”์ถœ ๊ฒฝ๋กœ๋Š” /var/tmp/.net์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. AWS ๋žŒ๋‹ค์—์„œ๋Š” /var ๊ฒฝ๋กœ๋ฅผ ์“ธ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํ•ด๋‹น ํด๋”๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. DOTNET_BUNDLE_EXTRACT_BASE_DIR์„ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋ณธ ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ์„ ์–ป์œผ๋ ค๋ฉด ์ด๊ฒƒ์„ /tmp/.net์œผ๋กœ ๋ณ€๊ฒฝํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๊ณตํ†ต ์œ„์น˜(/var/tmp, /tmp, ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ ๋“ฑ)์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œ๋„ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@stevemk14ebr ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ์ž‘์—…์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? https://github.com/dotnet/core-setup

@jeffschwMSFT ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ .Net Core P9์—์„œ RC1๋กœ ์ „๋‹ฌ๋  ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Description: A .NET Core application failed.
Application: Setup.exe
Path: C:\Users\Administrateur\Desktop\Setup.exe
Message: Failure processing application bundle.
Failed to determine location for extracting embedded files
A fatal error was encountered. Could not extract contents of the bundle

@Safirion ์ด ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? https://github.com/dotnet/core-setup
cc @swaroop-sridhar

@Safirion ์žฌํ˜„ ์ง€์นจ์„ ๋ณด๋‚ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด ์‹คํŒจ๊ฐ€ ๊ฒฐ์ •์ ์ž…๋‹ˆ๊นŒ?
@jeffschwMSFT ๊ฐ€ ์œ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ core-setup repo์— ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ณด์•˜๊ณ  ์ด๊ฒƒ์€ ์•ฑ์ด ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ์— ์•ก์„ธ์Šค ํ•  ์ˆ˜์—†๋Š” ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด๊ฐ€ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด:

set "TMP=wrong_path"
myapp.exe

๊ทธ๊ฒƒ์€ ์‹คํŒจํ•œ๋‹ค

Failure processing application bundle.
Failed to determine location for extracting embedded files
A fatal error was encountered. Could not extract contents of the bundle

๋ฒˆ๋“ค์€ GetTempPath win32 API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์‹œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. env๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜ TMP , TEMP ๋“ฑ์ด ๋’ค๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๊ฐ’์ด ์žˆ๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์— ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

์ž„์‹œ ๊ฒฝ๋กœ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์ถ”์ถœ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ์œ„์น˜๋กœ DOTNET_BUNDLE_EXTRACT_BASE_DIR ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Safirion ์žฌํ˜„ ์ง€์นจ์„ ๋ณด๋‚ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ด ์‹คํŒจ๊ฐ€ ๊ฒฐ์ •์ ์ž…๋‹ˆ๊นŒ?
@jeffschwMSFT ๊ฐ€ ์œ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ core-setup repo์— ๋ฌธ์ œ๋ฅผ ์ œ์ถœํ•˜์‹ญ์‹œ์˜ค.

.Net Core๋ฅผ RC1๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„ ์ด ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (RC1์„ ์ œ๊ฑฐํ•˜๊ณ  RC1๋กœ ๋‹ค์‹œ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๊ธฐ ์œ„ํ•ด Preview 9๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ด๋ฒˆ์—๋Š” ๋‚ด ์•ฑ์ด ์ž˜ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค)

์ด ์˜ค๋ฅ˜๋Š” SDK 3.0 P7์—์„œ SDK 3.0 P8๋กœ, SDK 3.0 P9์—์„œ SDK 3.0 RC1๋กœ ์ด๋™ํ•  ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

RC1์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ–ˆ์„ ๋•Œ .Net Core Windows ์„œ๋น„์Šค(์‹œ์Šคํ…œ์—์„œ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— C:\Windows\Temp\.net ํด๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…์ž)์™€ .Net Core WPF ์•ฑ(์‚ฌ์šฉ์ž ์‹œ์ž‘ ์„ธ์…˜ ์Šคํฌ๋ฆฝํŠธ๋กœ ์‹œ์ž‘)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ค๋ฅ˜๋Š” .Net Core SDK๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋™์•ˆ ์‹คํ–‰ ์ค‘์ธ .Net core ์ž‘์—…์ž๋กœ ์ธํ•ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค...

๋Ÿฐํƒ€์ž„์ด ์•„๋‹Œ SDK๋ฅผ ์„ค์น˜ํ•˜๋ฏ€๋กœ 3๊ฐœ์˜ .Core ๋Ÿฐํƒ€์ž„(asp.net ์ฝ”์–ด, ๋ฐ์Šคํฌํ†ฑ .net ์ฝ”์–ด ๋ฐ ์ฝ”์–ด)์„ ๋™์‹œ์— ๋ฐฐํฌํ•ด์•ผ ํ•˜๋ฉฐ https://dot.net ์—์„œ "์ „์ฒด ๋Ÿฐํƒ€์ž„"์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ"(Desktop Runtime ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ๋„ ์ฐพ์ง€ ๋ชปํ•ด์„œ ์„ ํƒ์˜ ์—ฌ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค)...

์—…๋ฐ์ดํŠธ: ์‹ ๊ฒฝ ์“ฐ์ง€ ๋ง๊ณ  ๋ฌธ์„œ ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•, ๋‹น์‹ ์˜ ๋…ธ๊ณ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

๊ตฌ์„ฑ ํŒŒ์ผ(์˜ˆ: App.config)์€ ์–ด๋–ป๊ฒŒ ๋ฐฐํฌ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ์ •ํ™•ํ•œ ๋ช…๋ น ์‹œํ€€์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ RHEL 7.6์—์„œ ์ฝ˜์†” ์•ฑ์„ ๋ฐฉ๊ธˆ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค.

dotnet restore -r win-x64 --configfile Nuget.config
dotnet build Solution.sln --no-restore -c Release -r win-x64
dotnet publish --no-build --self-contained -c Release -r win-x64 /p:PublishSingleFile=true -o ./publish ./SomeDir/SomeProj.csproj

์—ฌ๊ธฐ์„œ SomeProj.csproj๋Š” <PublishTrimmed>true</PublishTrimmed> ๋ฅผ ํ™œ์„ฑํ™”ํ–ˆ์œผ๋ฉฐ ๊ฒฐ๊ณผ๋กœ SomeProj.exe ๋ฐ SomeProj.pdb 2๊ฐœ์˜ ํŒŒ์ผ์„ ์–ป์—ˆ์ง€๋งŒ SomeProj.config ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

@catlion ์ด *.config ํŒŒ์ผ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋™์ž‘์„ ๊ฐ–๋„๋ก ํ•˜๋ ค๋ฉด ๋ฒˆ๋“ค์—์„œ ์ œ์™ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋น„ pdb ํŒŒ์ผ์€ ๋ฒˆ๋“ค์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ๋‹จ์ผ ํŒŒ์ผ์—์„œ ๊ตฌ์„ฑ์„ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.

<ItemGroup>
    <Content Update="*.config">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </Content>
  </ItemGroup>

https://github.com/dotnet/designs/blob/master/accepted/single-file/design.md#build- ์‹œ์Šคํ…œ ์ธํ„ฐํŽ˜์ด์Šค

@morganbr

์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)

Windows์šฉ ํ—ค๋“œ๋ฆฌ์Šค ๋ฐ WPF ์•ฑ

์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

์˜ˆ, ์šฐ๋ฆฌ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋ณธ dll, ์šฐ๋ฆฌ๊ฐ€ ์ œ์–ดํ•  ์ˆ˜ ์—†๋Š” ์ผ๋ถ€ ํƒ€์‚ฌ ํ•ญ๋ชฉ, ๋‹ค๋ฅธ ํŒ€์˜ ๋‚ด๋ถ€ ํ•ญ๋ชฉ์„ P/Invokeํ•ฉ๋‹ˆ๋‹ค.

์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ํ•˜์ง€๋งŒ CompilerServices๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค์—์„œ ์ปดํŒŒ์ผํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋„ค

์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?

์˜ˆ, ์ €ํฌ ์•ฑ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์žฅ๊ธฐ๊ฐ„ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?

์˜ˆ, ๋ช‡ ๋ถ„ ์ •๋„ ๊ธฐ๋‹ค๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋„ค

@john-cullen ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

์ถ”์ถœ ์—†์ด ๋‹จ์ผ ํŒŒ์ผ ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ตฌํ˜„์„ ์œ„ํ•ด ๋ช‡ ๊ฐœ์˜ PR์„ ๋‹จ์ผ exe ๋ถ„๊ธฐ์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค( 4๋‹จ๊ณ„ ).

https://github.com/dotnet/coreclr/pull/26197
https://github.com/dotnet/coreclr/pull/26504
https://github.com/dotnet/coreclr/pull/26697
https://github.com/dotnet/coreclr/pull/26904

@morganbr ์— ๋Œ€ํ•œ ๋‹ต๋ณ€๋„ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :) ์•„์ง๋„ ์ด ๊ธ€์„ ์ฝ๊ณ  ๊ณ„์‹œ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. :)

  1. ์–ด๋–ค ์ข…๋ฅ˜์˜ ์•ฑ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ: Windows์˜ WPF? Linux Docker ์ปจํ…Œ์ด๋„ˆ์˜ ASP.NET? ๋‹ค๋ฅธ ๊ฒƒ?)

๋‹ค์–‘ํ•œ ํ”Œ๋žซํผ(Linux, MacOS, Windows)์—์„œ ์‹คํ–‰๋˜๋Š” ํ…์ŠคํŠธ ์–ด๋“œ๋ฒค์ฒ˜(์ฝ˜์†” ์•ฑ)

  1. ์•ฑ์— (.NET์ด ์•„๋‹Œ) C++/๋„ค์ดํ‹ฐ๋ธŒ ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.

  1. ์•ฑ์ด ์›๋ž˜ ์•ฑ ๋นŒ๋“œ์— ํฌํ•จํ•˜์ง€ ์•Š์€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๊ธฐํƒ€ ์™ธ๋ถ€ dll์„ ๋กœ๋“œํ•ฉ๋‹ˆ๊นŒ?

ํ˜„์žฌ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์žฅ๊ธฐ์ ์œผ๋กœ ํŠน์ • ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ๋ณด์•ˆ ์ˆ˜์ • ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜๊ณ  ์žฌ๋ฐฐํฌํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋„ค.

  1. ์•ฑ์ด 200-500ms ๋” ๋Š๋ฆฌ๊ฒŒ ์‹œ์ž‘๋˜๋ฉด ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? 5์ดˆ ์ •๋„?

๋„ค.
(์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ์Œ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ํ…์ŠคํŠธ ์ถœ๋ ฅ์ด๋‚˜ ๋ฉ”์‹œ์ง€ ์ƒ์ž๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค)

  1. ์•ฑ์— ํ—ˆ์šฉ๋˜๋Š” ๊ฐ€์žฅ ํฐ ํฌ๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 5MB? 10? 20? 50? 75? 100?

10-20MB

  1. ํฌ๊ธฐ ๋ฐ/๋˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋” ๊ธด ๋ฆด๋ฆฌ์Šค ๋นŒ๋“œ ์‹œ๊ฐ„์„ ํ—ˆ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ€์žฅ ์˜ค๋ž˜ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? 15์ดˆ? 30 ์ดˆ? 1 ๋ถ„? 5 ๋ถ„?

1๋ถ„ ์ด์ƒ์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

  1. ์•ฑ ํฌ๊ธฐ๋ฅผ ๋ฐ˜์œผ๋กœ ์ค„์ด๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

ํ˜น์‹œ.

@lenardg๋‹˜, ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” .NET Core 3.0 ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ ๊ธฐ๋Šฅ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์€ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋””์ž์ธ ๋ฌธ์„œ ๋ฐ ์ค€๋น„ ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

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

  1. ์กฐ๊ฑด๋ถ€๋กœ ๋‹จ์ผ ์‹คํ–‰ ํŒŒ์ผ์„ ์••์ถ•ํ•˜๋ฉด์„œ ์••์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
    ์ฆ‰, Wrap๊ณผ ๊ฐ™์€ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๋„๊ตฌ ํ†ตํ•ฉ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ์••์ถ•ํ•˜๋ฉด ๋” ์ž‘์€ exe๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

  2. exe๋ฅผ ์‹œ์ž‘ํ•˜๋ฉด ๋‚ด์šฉ์ด ์ž„์‹œ ํด๋”๋กœ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค. ๋‹น์‚ฌ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ ํŠน์ • ์‚ฌ์šฉ์ž ์‚ฌ์ดํŠธ์—์„œ ํด๋ผ์ด์–ธํŠธ ์‹œ์Šคํ…œ์ด ์—„๊ฒฉํ•˜๊ฒŒ ์ œ์–ด๋˜๋ฉฐ ์ž„์‹œ ํด๋” ๋˜๋Š” %userprofile% ์œ„์น˜์—์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ถ”์ถœํ•  ์œ„์น˜๋ฅผ ์ง€์ •/์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ".\extract" ๋˜๋Š” ๊ทธ๋Ÿฌํ•œ ํ•˜์œ„ ํด๋”์—์„œ '์ธํ”Œ๋ ˆ์ด์Šค ์ถ”์ถœ'์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
์ด๋ฅผ ํ†ตํ•ด ๊ทธ๋ฃน ์ •์ฑ… ์ค€์ˆ˜๋Š” ๋ฌผ๋ก  ๋‹จ์ผ exe ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํŒจํ‚นํ•˜๊ธฐ ์ „์— ํด๋”์— ์„œ๋ช…ํ•˜๊ณ  ํŒจํ‚นํ•  ํŒŒ์ผ์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€์š”?
    ๋‹จ์ผ exe์— ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ถ”์ถœ ํŒŒ์ผ์€ ์„œ๋ช…๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ํŠน์ • ํด๋ผ์ด์–ธํŠธ ์œ„์น˜์—์„œ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์„œ๋ช…๋˜์ง€ ์•Š๋Š” ํ•œ ์‹คํ–‰์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜ @Safirion ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์šฐ๋ถ„ํˆฌ๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋Š” dotnetcore 3.0 ์•ฑ์ด ์žˆ๊ณ  ๋‚ด Synology ์„œ๋ฒ„์—์„œ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. "์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์˜ ๋‚ด์šฉ์„ ์ถ”์ถœํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ๊ณ„์† ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ฒˆ ์žฌ๊ฑดํ–ˆ์ง€๋งŒ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๋ฅผ ์žฌ๋ถ€ํŒ…ํ•œ ํ›„ ๋‹ค์‹œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ํŒŒ์ผ ์ž ๊ธˆ์ด๋‚˜ ๋ฌด์–ธ๊ฐ€๊ฐ€ ์žˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ๋””๋ฒ„๊น…ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์‹œ๊ฐ„์ด ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@RajeshAKumar dotnet /core-setup#7940

ํ•ด๋‹น ๋งํฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ์ž„์‹œ ์ถ”์ถœ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์œ„์— 3๊ฐ€์ง€ ์‚ฌํ•ญ์„ ๋‚˜์—ดํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ 2๊ฐœ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ

๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ค‘ ํ•˜๋‚˜์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ œ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ 2๊ฐœ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ

์ž„์‹œ ์ถ”์ถœ๋ฌผ์€ ์šฐ๋ฆฌ์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋‚ด ์š”์ฒญ์€ ์ถ”์ถœ ์œ„์น˜๋ฅผ ์ œ์–ดํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ํด๋”๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
๋งŽ์€ ํด๋ผ์ด์–ธํŠธ ์ปดํ“จํ„ฐ์˜ IT ๊ด€๋ฆฌ์ž๋Š” ์ž„์‹œ ํด๋”๋‚˜ ์‚ฌ์šฉ์ž ํ”„๋กœํ•„์—์„œ ์‹คํ–‰ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค์‹œ ์ฝ์œผ์‹ญ์‹œ์˜ค. https://github.com/dotnet/coreclr/issues/20287#issuecomment -542497711

@RajeshAKumar : ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ฒˆ๋“ค์˜ ๋‚ด์šฉ์„ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ์ œ์–ดํ•˜๋„๋ก DOTNET_BUNDLE_EXTRACT_BASE_DIR ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/dotnet/designs/blob/master/accepted/single-file/extract.md#extraction -location์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@RajeshAKumar : ๋ฒˆ๋“ค๋œ ๋‹จ์ผ exe ์••์ถ•์€ .net 5์—์„œ ๊ณ ๋ ค ์ค‘์ธ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. https://github.com/dotnet/designs/blob/master/accepted/single-file/design.md#compression

์ง€๊ธˆ์€ ์ƒ์„ฑ๋œ ๋‹จ์ผ exe๋ฅผ ์••์ถ•ํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์œ ํ‹ธ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@RajeshAKumar ์„œ๋ช…๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฒŒ์‹œ๋˜๊ณ  ๋‹จ์ผ exe๋กœ ๋ฒˆ๋“ค๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ/๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜๋ฉด ๊ฐœ๋ณ„ ํŒŒ์ผ ์ž์ฒด์— ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ๋นŒ๋“œ๋œ ๋‹จ์ผ ํŒŒ์ผ ์ž์ฒด์— ์„œ๋ช…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๊นŒ?

@Webreaper ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด COREHOST_TRACE ๋ฅผ ์ผœ๊ณ ( COREHOST_TRACE ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ 1 ๋กœ ์„ค์ •) ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”.

@swaroop-sridhar
์ด๊ฒƒ์€ ๋งค์šฐ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค dotnet ๋ฆด๋ฆฌ์Šค์—์„œ ์–ธ์ œ ๋‹ค๋ฅธ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@RajeshAKumar : ํ˜ธ์ŠคํŠธ๊ฐ€ ๋ฒˆ๋“ค์˜ ๋‚ด์šฉ์„ ์ถ”์ถœํ•˜๋Š” ๊ธฐ๋ณธ ๊ฒฝ๋กœ๋ฅผ ์ œ์–ดํ•˜๋„๋ก DOTNET_BUNDLE_EXTRACT_BASE_DIR ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž์„ธํ•œ ๋‚ด์šฉ์€ https://github.com/dotnet/designs/blob/master/accepted/single-file/extract.md#extraction -location์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

swaroop-sridhar๋‹˜, ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

@RajeshAKumar ์„œ๋ช…๊ณผ ๊ด€๋ จํ•˜์—ฌ ๊ฒŒ์‹œ๋˜๊ณ  ๋‹จ์ผ exe๋กœ ๋ฒˆ๋“ค๋˜๋Š” ๋ชจ๋“  ํŒŒ์ผ/๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜ธ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜๋ฉด ๊ฐœ๋ณ„ ํŒŒ์ผ ์ž์ฒด์— ์„œ๋ช…๋ฉ๋‹ˆ๋‹ค. ์–ธ๊ธ‰ํ•œ ๋Œ€๋กœ ๋นŒ๋“œ๋œ ๋‹จ์ผ ํŒŒ์ผ ์ž์ฒด์— ์„œ๋ช…ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•ฉ๋‹ˆ๊นŒ?

'์ปดํŒŒ์ผ'์„ ์ค‘๋‹จํ•˜๊ณ  ๋ถ€๋ถ„์„ ๊ฒŒ์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„ ๋‚ด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์„œ๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
publishargs=-c ๋ฆด๋ฆฌ์Šค ์„ค์ • /p:PublishSingleFile=True /p:PublishTrimmed=True /p:PublishReadyToRun=false
๋„ํŠธ๋„ท ๊ฒŒ์‹œ -r win-x64 -o bin\Output\Win64 %publishargs%

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

@Webreaper ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด COREHOST_TRACE ๋ฅผ ์ผœ๊ณ ( COREHOST_TRACE ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ 1 ๋กœ ์„ค์ •) ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ์ƒ์„ฑ๋œ ๋กœ๊ทธ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”.

๊ฐ์‚ฌ ํ•ด์š”. ์ง€๊ธˆ์€ ์žฌ๋ถ€ํŒ…์„ ํ•ด์„œ ์—†์–ด์กŒ์ง€๋งŒ ๋‹ค์‹œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•ด ๋‘๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค!

@RajeshAKumar ๋ฒˆ๋“ค๋ง ์ง์ „์— ์‹คํ–‰๋˜๋Š” ๋Œ€์ƒ์— ์„œ๋ช…์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
PublishReadyToRun ๋ฐ PublishTrimmed ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ‘œ์ค€ Afterbuild ๋˜๋Š” BeforePublish ๋Œ€์ƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

BundlePublishDirectory ์ง์ „์— ์‹คํ–‰๋˜๊ณ  ์„œ๋ช…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@swaroop-sridhar
์ด๊ฒƒ์€ ๋งค์šฐ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค dotnet ๋ฆด๋ฆฌ์Šค์—์„œ ์–ธ์ œ ๋‹ค๋ฅธ ๋‹จ๊ณ„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ๋งํฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

@etherealjoy ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์—์„œ ์ง์ ‘ ์‹คํ–‰๋˜๋Š” ๋‹จ์ผ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ด๋ฉฐ .net 5 ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ชฉํ‘œ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@RajeshAKumar ๋ฒˆ๋“ค๋ง ์ง์ „์— ์‹คํ–‰๋˜๋Š” ๋Œ€์ƒ์— ์„œ๋ช…์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
PublishReadyToRun ๋ฐ PublishTrimmed ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ํ‘œ์ค€ Afterbuild ๋˜๋Š” BeforePublish ๋Œ€์ƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

BundlePublishDirectory ์ง์ „์— ์‹คํ–‰๋˜๊ณ  ์„œ๋ช…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์ƒ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
๋‹น์‹ ์ด ์ค€ ๋งํฌ๋Š” MS Build ์ž‘์—…์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
"BundlePublishDirectory"์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ Studio/Project props/Build Events์— ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

@RajeshAKumar ์ด ๊ฒฝ์šฐ ์‚ฌ์ „ ๋นŒ๋“œ ์‚ฌํ›„ ๋นŒ๋“œ ์ด๋ฒคํŠธ๋ณด๋‹ค ๋” ์„ธ๋ถ„ํ™”๋œ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

<Target Name="Sign" BeforeTargets="BundlePublishDirectory">
    ... 
</Target>

dotnet pack ๋ช…๋ น์˜ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋กœ์ปฌ nuget ์ €์žฅ์†Œ์— ํ‘ธ์‹œ๋œ ๋‹จ์ผ exe ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดˆ์ฝœ๋ฆฟ์œผ๋กœ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ๋‚˜์—ด๋œ ๋ชจ๋“  nuget dep๋ฅผ ๋ณต์›ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ์ด ๋™์ž‘์ด SFD์— ๋งž๋Š”์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๋‹จ์ผ ํŒŒ์ผ ์ž์ฒด ํฌํ•จ WPF ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ถ”์ถœํ•˜๋Š” ๋™์•ˆ ์ง„ํ–‰๋ฅ  ํ‘œ์‹œ์ค„์ด๋‚˜ ๋กœ๋“œ ํ‘œ์‹œ๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š๊ณ  ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธฐ๋ณธ ์ž์ฒด ํฌํ•จ WPF ์•ฑ์€ 80Mo ์ด์ƒ์ด๋ฉฐ ์ถ”์ถœ์—๋Š” 5์ดˆ ์ด์ƒ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์นœํ™”์ ์ด์ง€ ์•Š์œผ๋ฉฐ ์ตœ์ข… ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ถˆ๋งŒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์‹คํ–‰ ์‹œ ์ด์ „ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@Safirion ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ด ๊ธฐ๋Šฅ์˜ ๋ฒ”์œ„์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹œ์ž‘ ํ™”๋ฉด์„ ํ‘œ์‹œํ•˜๊ณ  ์‹ค์ œ ์•ฑ์„ ์‹คํ–‰ํ•œ ๋‹ค์Œ, ์‹œ์ž‘๋  ๋•Œ ์‹ค์ œ ์•ฑ์ด ์‹œ์ž‘ ํ™”๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์ค‘์ง€ํ•˜๋„๋ก ํ•˜๋Š” ์ž‘์€ ์•ฑ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

@ProfessionalNihilist ์ œ ์š”์ ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋นˆ WPF ์•ฑ์€ ์ปดํŒŒ์ผ ์‹œ 80mo์˜ ๋””์Šคํฌ ์ €์žฅ์†Œ๋ฅผ ์ž์ฒด ํฌํ•จํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ์•ฑ์œผ๋กœ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ ๋Š” 80mo๋ณด๋‹ค ์ž‘์€ WPF ์•ฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค ๐Ÿ˜‰
๋ฌธ์ œ๋Š” ์•ฑ์ด ์‹คํ–‰๋˜๊ธฐ๋„ ์ „์— ํฌํ•จ๋œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ .Net Core์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ ์ด ๊ธฐ๋Šฅ๊ณผ ์™„์ „ํžˆ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์ด ์••์ถ• ํ•ด์ œ๋˜๋Š” ๋™์•ˆ ํ‘œ์‹œ๋  png ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@Safirion @ayende ์‹œ์ž‘ ์ค‘ "UI ํ”ผ๋“œ๋ฐฑ" ๋ถ€์กฑ์€ ์—ฌ๊ธฐ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค: https://github.com/dotnet/core-setup/issues/7250

dotnet pack ๋ช…๋ น์˜ ์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋กœ์ปฌ nuget ์ €์žฅ์†Œ์— ํ‘ธ์‹œ๋œ ๋‹จ์ผ exe ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดˆ์ฝœ๋ฆฟ์œผ๋กœ ์„ค์น˜ํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ๋‚˜์—ด๋œ ๋ชจ๋“  nuget dep๋ฅผ ๋ณต์›ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ์˜ˆ์ƒํ–ˆ์ง€๋งŒ ์ด ๋™์ž‘์ด SFD์— ๋งž๋Š”์ง€ ์˜์‹ฌ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@catlion PublishSingleFile ์†์„ฑ์€ dotnet publish ๋ช…๋ น์—์„œ๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ dotnet pack ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ํŒŒ์ผ๊ณผ ํŒจํ‚ค์ง•์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋™๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘: ์‹คํ–‰ ์‹œ ์ด์ „ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

ํ˜„์žฌ ๋ฆด๋ฆฌ์Šค์˜ @Safirion , ์ •๋ฆฌ๋Š” ์ˆ˜๋™์ด๋ฉฐ ํ˜ธ์ŠคํŠธ๋Š” ์ถ”์ถœ๋œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ–ฅํ›„ ์‹คํ–‰์—์„œ ์ž ์žฌ์ ์œผ๋กœ ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚ด๊ฐ€ ์ง์ ‘ ์ฒญ์†Œ๊ธฐ๋ฅผ ๋งŒ๋“ค๊ฒŒ ๐Ÿ˜‰
๋‹น์‹ ์˜ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ชจ๋…ธ์— ๋Œ€ํ•ด ํŠน๋ณ„ํ•œ ๊ฒƒ์ด ์—†๋Š” @cup ์€ ํ‘œ์ค€ ์ปดํŒŒ์ผ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋„ˆ๊ฒŸ ์ฐธ์กฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•ด๋‹น ์†”๋ฃจ์…˜์€ ๋” ์ด์ƒ ๋‹จ์ผ ํŒŒ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. Mono๋Š” ๋‹จ์ผ ํŒŒ์ผ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด mkbundle ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@์ˆ˜์น˜ ๋งŒ ํ™•์‹คํ•ด? ์œ„์˜ ์˜ˆ์—์„œ๋Š” ๋‹จ์ผ 3KB ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. dotnet ์ตœ์†Œ ํฌ๊ธฐ๋Š” 27MB์ธ ๋ฐ˜๋ฉด:

https://github.com/dotnet/coreclr/issues/24397#issuecomment -502217519

@์ปต ๋„ค

C:\Users\Robin> type .\Program.cs
using System;
class Program {
   static void Main() {
      Console.WriteLine("sunday monday");
   }
}
C:\Users\Robin> C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe .\Program.cs
Microsoft (R) Visual C# Compiler version 4.8.3752.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

C:\Users\Robin> .\Program.exe
sunday monday
C:\Users\Robin> dir .\Program.exe


    Verzeichnis: C:\Users\Robin


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10.11.2019     18:36           3584 Program.exe

@์ˆ˜์น˜ ๋งŒ ํ™•์‹คํ•ด? ์œ„์˜ ์˜ˆ์—์„œ๋Š” ๋‹จ์ผ 3KB ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. dotnet ์ตœ์†Œ ํฌ๊ธฐ๋Š” 27MB์ธ ๋ฐ˜๋ฉด:

#24397 (๋Œ“๊ธ€)

๋ชจ๋…ธ๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 3k ํŒŒ์ผ๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. dotnetcore ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ์˜ ์š”์ ์€ clr์„ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ ๋Ÿฐํƒ€์ž„์„ ํฌํ•จํ•˜๋Š” ๋…๋ฆฝ ์‹คํ–‰ํ˜• ๋‹จ์ผ exe๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Webreaper ๋Š” ์‹ค์ œ๋กœ .NET Framework์—์„œ ์‹คํ–‰๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” mono sun-mon.exe ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผํ•  ๋•Œ ๋ชจ๋…ธ์—์„œ mcs๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ .NET Core๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ๋ฐฐํฌ๋ผ๊ณ ๋„ ํ•˜๋Š” ์‚ฌ์ „ ์„ค์น˜๋œ ๋Ÿฐํƒ€์ž„ ์‹œ๋‚˜๋ฆฌ์˜ค๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. .deps.json ๋ฐ .runtimeconfig.json ์™€ ๊ฐ™์€ .NET Core์šฉ ์ถ”๊ฐ€ ํŒŒ์ผ์ด ๋ช‡ ๊ฐœ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฒฝ์šฐ์—๋Š” ์—ฌ์ „ํžˆ ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@ chris3713 ํ˜„์žฌ exe ์œ„์น˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๊ธฐ๋ณธ API์— ๋Œ€ํ•œ PInvoke-ing์ž…๋‹ˆ๋‹ค. ์˜ˆ: GetModuleFileNameW (Null, <buffer>, <len>)

Environment.CurrentDirectory ๊ฐ€ ๋” ๋‚˜์€ ์†”๋ฃจ์…˜์ธ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์•„์ง Windows ์ด์™ธ์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์—์„œ ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์‹œ๋„ํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์•„๋‹ˆ์š”. ํ•ด๋‹น ๊ฒฝ๋กœ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋‹ค๋ฅธ ์ง„์ž…์ ์—์„œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ข‹์ง€ ์•Š๋‹ค.

์•ฝ๊ฐ„ ๊ด€๋ จ๋œ ๋ฉ”๋ชจ์—์„œ Mac์šฉ VS์˜ ์ตœ์‹  ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ Blazor ์•ฑ์˜ ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ์—์„œ ์ด ํšŒ๊ท€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. https://github.com/aspnet/AspNetCore/issues/17079 - ์•„๋ž˜์—์„œ ๋ณด๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. AspNeCore/Blazor, ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด coreclr ๊ทธ๋ฃน๊ณผ ๋” ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ˆํฌ๋“ค์ด ์›€์ง์ผ ์ˆ˜ ์žˆ๋„๋ก ๋‚จ๊ฒจ๋‘˜๊ฒŒ!

@Suchiman ์กฐ์‹ฌํ•˜์„ธ์š”. ์ปดํŒŒ์ผ๋Ÿฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

https://github.com/dotnet/roslyn/issues/39856

@cup ์€ ๋‚ด๊ฐ€ ๋ช…๋ช…ํ•œ ํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” C++๋กœ ์ž‘์„ฑ๋œ ์ด์ „ C# 5 ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” roslyn์ด ์•„๋‹ˆ๋ฉฐ ์•„๋งˆ๋„ ๊ทธ๋Ÿฌํ•œ ์ด์œ ๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ์ข…๋ฃŒํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ roslyn์€ ๊ฐ™์€ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€ ๋‹ค๋ฅธ ๊ธธ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค...

์•ฝ๊ฐ„ ๊ด€๋ จ๋œ ๋ฉ”๋ชจ์—์„œ Mac์šฉ VS์˜ ์ตœ์‹  ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ Blazor ์•ฑ์˜ ๋‹จ์ผ ํŒŒ์ผ ๊ฒŒ์‹œ์—์„œ ์ด ํšŒ๊ท€๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. aspnet/AspNetCore#17079 - AspNeCore/Blazor์—์„œ ๋ณด๊ณ ํ–ˆ์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. coreclr ๊ทธ๋ฃน๊ณผ ๋” ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ˆํฌ๋“ค์ด ์›€์ง์ผ ์ˆ˜ ์žˆ๋„๋ก ๋‚จ๊ฒจ๋‘˜๊ฒŒ!

@Webreaper ์ •์  ์ž์‚ฐ๊ณผ ๊ด€๋ จ๋œ ASP.net ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, ๊ทธ๊ฒƒ์ด ๊ทธ๊ฒƒ์„ ์ œ์ถœํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

* ๊ฒŒ์‹œ๋ฌผ์„ ๋‹ค๋ฅธ ๋ฌธ์ œ์—์„œ ์—ฌ๊ธฐ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

@swaroop-sridhar ,

DotNet Core ๋‹จ์ผ ํŒŒ์ผ WPF ์•ฑ์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์€ .net 4.7์—์„œ ๋นŒ๋“œ๋œ ์›๋ž˜ ILMerge-ed WPF ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ณด๋‹ค ํ›จ์”ฌ ๋Š๋ฆฝ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์˜ˆ์ƒ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์•ž์œผ๋กœ ๊ฐœ์„ ๋  ๊ฒƒ์ž…๋‹ˆ๊นŒ?

๋นŒ๋“œ๋Š” ๋‚ด ImageOptimizer์—์„œ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. https://github.com/devedse/DeveImageOptimizerWPF/releases

| ์œ ํ˜• | ์˜ˆ์ƒ ์ฒซ ์‹œ์ž‘ ์‹œ๊ฐ„ | ์˜ˆ์ƒ ๋‘ ๋ฒˆ์งธ ์‹œ์ž‘ ์‹œ๊ฐ„ | ํฌ๊ธฐ | ๋‹ค์šด๋กœ๋“œ ๋งํฌ |
| -- | -- | -- | -- | -- |
| .NET 4.7.0 + ILMerge | ~3์ดˆ | ~1์ดˆ | 39.3MB | ๋งํฌ |
| dotnet publish -r win-x64 -c ๋ฆด๋ฆฌ์Šค --self-contained=false /p:PublishSingleFile=true | ~10์ดˆ | ~3์ดˆ | 49MB | |
| dotnet publish -r win-x64 -c ๋ฆด๋ฆฌ์Šค /p:PublishSingleFile=true | ~19์ดˆ | ~2์ดˆ | 201MB | |
| dotnet publish -r win-x64 -c ๋ฆด๋ฆฌ์Šค /p:PublishSingleFile=true /p:PublishTrimmed=true | ~15์ดˆ | ~3์ดˆ | 136MB | ๋งํฌ |
| dotnet publish -r win-x64 -c ๋ฆด๋ฆฌ์Šค | ~2.5์ดˆ | ~1.5์ดˆ | exe์˜ ๊ฒฝ์šฐ 223kb(dll์˜ ๊ฒฝ์šฐ +400mb) | |

@devedse , ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด "๋‘ ๋ฒˆ์งธ ์‹œ์ž‘"์ด ์—ฌ๋Ÿฌ ์‹คํ–‰(์ฒซ ๋ฒˆ์งธ ์ œ์™ธ)์˜ ํ‰๊ท ์ž…๋‹ˆ๊นŒ?
๊ถ๊ธˆํ•˜์ง€๋งŒ /p:PublishSingleFile=true /p:PublishTrimmed=true ์‹คํ–‰์ด ` /p:PublishSingleFile=true ์‹คํ–‰๋ณด๋‹ค ๋Š๋ ค์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์กฐ์‚ฌํ•˜๊ธฐ ์ „์— "๋‘ ๋ฒˆ์งธ ์‹œ์ž‘"์˜ ์ˆซ์ž๊ฐ€ ์•ˆ์ •์ ์ธ ์ˆซ์ž์ด๊ณ  ์‹œ์ž‘์˜ ์ฐจ์ด๊ฐ€ ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด ๋ฌธ์ œ๋Š” ๋‹จ์ผ ํŒŒ์ผ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ํ† ๋ก ์„ ์ƒˆ ๋ฌธ์ œ๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ dotnet/coreclr#20287๋กœ ์˜ฎ๊ธฐ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ ํ•ด์š”.

@swaroop-sridhar , ํ‰๊ท ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต๋ณ€:
์ด๊ฒƒ์„ ๋งค์šฐ ์ •ํ™•ํ•˜๊ฒŒ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํƒ€์ด๋ฐ์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๋Š” ๋™์•ˆ ๊ณ„์‚ฐํ•œ ๋‹ค์Œ ์‹œ์ž‘ ์‹œ๊ฐ„์— ์ƒ๋‹นํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๋ฒˆ ์‹œ๋„ํ•˜์—ฌ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ๋‚ด ์†”๋ฃจ์…˜์„ ๊ตฌ์ถ•ํ•˜์—ฌ ์‰ฝ๊ฒŒ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/devedse/DeveImageOptimizerWPF

๋‚ด ์ฃผ์š” ์งˆ๋ฌธ์€ ๋ฒˆ๋“ค(๋‹จ์ผ ํŒŒ์ผ) ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฒˆ๋“ค๋˜์ง€ ์•Š์€ .exe ํŒŒ์ผ๊ณผ ๋น„๊ตํ•˜์—ฌ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ด์œ ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ๋Š” ํ‹€๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹จ์ผ ํŒŒ์ผ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ์•ฑ์„ ์‹œ์ž‘ํ•˜๋Š” ์•ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ILMerge๊ฐ€ ์ง์ ‘ ์‹œ์ž‘๋˜๋Š” ๋™์•ˆ. ILMerge๋Š” ์ฐธ์กฐ๋œ dll๋งŒ exe๋กœ ๋ณ‘ํ•ฉํ–ˆ์œผ๋ฉฐ ํ˜„์žฌ PublishSingleFile๋กœ ์ˆ˜ํ–‰ ์ค‘์ธ ๋‹ค๋ฅธ ๋ ˆ์ด์–ด์— ์ „์ฒด๋ฅผ ๋ž˜ํ•‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@devedse ๋‹จ์ผ ํŒŒ์ผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ dotnet ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ์ถ”์ถœ, ์ฒดํฌ์„ฌ ํ™•์ธ ๋“ฑ์ž…๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‚˜ ๋ด…๋‹ˆ๋‹ค.
์ถ”์ถœ์€ "์บ์‹œ"๋˜๋ฏ€๋กœ ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋•Œ IO ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@RajeshAKumar , ํ  ์ด ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ •๋ง ๊ฐˆ ๊ธธ์„ ์ถ”์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ILMerge ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์„œ ์‹ค์ œ๋กœ DLL์„ ํ•˜๋‚˜์˜ ๋‹จ์ผ ๋ฒˆ๋“ค๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์ง€ ์•Š์„๊นŒ์š”?

ํŠนํžˆ ๋” ํฐ .exe ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ํŒŒ์ผ์„ ๋‘ ๋ฒˆ ์ €์žฅํ•˜๋Š” ๋””์Šคํฌ ๊ณต๊ฐ„ ๋น„์šฉ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

@devedse ์šฐ๋ฆฌ๋Š” ๋ชจ๋‘ ์ด ๊ธฐ๋Šฅ(๋ฒˆ๋“ค์—์„œ ์‹คํ–‰)์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์ง€๋งŒ ํ˜„์žฌ๋กœ์„œ๋Š” ์ด๊ฒƒ์ด ์œ ์ผํ•œ ์†”๋ฃจ์…˜์ž…๋‹ˆ๋‹ค. ๐Ÿ˜‰

https://github.com/dotnet/designs/blob/master/accepted/single-file/staging.md

์ด๊ฒƒ์€ ๋ฐ์Šคํฌํƒ‘์—์„œ JIT๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Š๋ฆฐ ์‹œ์ž‘, Apple๋งŒ์ด ์ด๊ฒƒ์„ ์ดํ•ดํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(๋Œ€๋ถ€๋ถ„ ์ด๋ฏธ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์„ ๋ฐ˜๋ณตํ•จ):
์ฒซ ๋ฒˆ์งธ ์‹œ์ž‘์€ ํ›จ์”ฌ ๋Š๋ฆด ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์•ฑ์„ ๋””์Šคํฌ์— ์ถ”์ถœํ•˜๋ฏ€๋กœ IO๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฐ ์ดํ›„ ์‹œ์ž‘์€ ๋‹จ์ผ ํŒŒ์ผ์ด ์•„๋‹Œ ์•ฑ ๋ฒ„์ „๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์ธก์ •์—์„œ ์šฐ๋ฆฌ๋Š” ์ฐจ์ด๋ฅผ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธก์ • ๋ฐฉ๋ฒ•: ์ถ”์ (Windows์˜ ETW)์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๊ณ  ์ด๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋Ÿฐํƒ€์ž„ ์ด๋ฒคํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ •ํ™•ํžˆ๋Š” ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@Safirion ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” .exe์—์„œ ์ง์ ‘ ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ผ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋‹ค์Œ ๊ฐœ์„  ์ž‘์—…์„ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค(๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜์ง€ ์•Š์Œ). ์•„์ง ์ถœ์‹œ ์—ด์ฐจ๋ฅผ ์•ฝ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

JIT: ๋ชจ๋“  ํ”„๋ ˆ์ž„์›Œํฌ๋Š” Ready2Run(CoreFX, WPF)์œผ๋กœ ์‚ฌ์ „ ์ปดํŒŒ์ผ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ์ž‘ ์‹œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋งŒ JIT๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ํฐ ์ฐจ์ด๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ~1-2์ดˆ์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๋ฏธ ๋ชจ๋“  ํ…Œ์ŠคํŠธ์—์„œ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋‘ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ณ„ํš๋œ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์•Œ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ๋ช…ํ™•ํžˆํ•ฉ๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์‹œ์ž‘์€ ํ›จ์”ฌ ๋Š๋ฆด ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ์•ฑ์„ ๋””์Šคํฌ์— ์ถ”์ถœํ•˜๋ฏ€๋กœ IO๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋””์ž์ธ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋”์ฐํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ๋”์ฐํ•œ ์„ ํƒ์„ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉ์ž๊ฐ€ ์‹ซ์–ดํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@Safirion ์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์šฐ๋ฆฌ๋Š” .exe์—์„œ ์ง์ ‘ ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๋ฆฌ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ผ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋‹ค์Œ ๊ฐœ์„  ์ž‘์—…์„ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค(๋””์Šคํฌ๋กœ ์ถ”์ถœํ•˜์ง€ ์•Š์Œ). ์•„์ง ์ถœ์‹œ ์—ด์ฐจ๋ฅผ ์•ฝ์†ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ณง ๋ณ€๊ฒฝ๋  ์˜ˆ์ •์ธ ๊ฒฝ์šฐ ์ง€๊ธˆ ๊ณต์‹์ ์œผ๋กœ ์ถœ์‹œํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฏธ๋ฆฌ๋ณด๊ธฐ/์‹คํ—˜์œผ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ์ด๊ฒƒ์€ ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. AOT ์ปดํŒŒ์ผ ๋ฐ ํŠธ๋ฆฌ ํ”๋“ค๊ธฐ์— ์ง‘์ค‘ํ•˜๊ณ  ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฑฐ๊ธฐ์— ๋„ฃ๊ณ  ํ•ดํ‚น์„ ์ค‘์ง€ํ•˜์‹ญ์‹œ์˜ค.

@RUShy ์™œ ์ด๋ ‡๊ฒŒ ์ฆ์˜ค๊ฐ€ ๋งŽ์•„? ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ์‹œ์ž‘ ์ง€์—ฐ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์‹œ์ž‘ ์‹œ๊ฐ„์ด 10์ดˆ ๋ฏธ๋งŒ์œผ๋กœ ์ƒ๋‹นํžˆ ์งง๊ณ  ์ฒ˜์Œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— ํ•œ ๋ฒˆ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ๋ฉฐ์น /๋ช‡ ์ฃผ ๋™์•ˆ ์‹คํ–‰๋  ๊ฒƒ์ด๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ์„œ๋ฒ„ ์ธก ์›น ์•ฑ์„ ๋ฐฐํฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐ ์ถ”์ถœ์€ ์‚ฌ๋ฌผ ๊ณ„ํš์—์„œ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ปดํŒŒ์ผ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ์„ ๋•Œ๊นŒ์ง€ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜๋ฐฑ ๊ฐœ์˜ DLL์„ ์ฃผ๋ณ€์— ๋ณต์‚ฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์‰ฝ๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ์—๋Š” +1, ๋‹จ์ผ exe๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋นŒ๋“œ ๋„์ปค์™€ ์•ฑ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ณ„๋„์˜ ๋„์ปค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(dotnet์ด ์—†๋Š” ์ผ๋ฐ˜ ์•ŒํŒŒ์ธ ๋„์ปค ์ด๋ฏธ์ง€ ์‚ฌ์šฉ). bulid ๋‹จ๊ณ„ ํ›„์— ๋Ÿฐํƒ€์ž„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ ํ•ซ ๋กœ๋“œํ•˜๊ณ  ๋ ˆ์ด์–ด๋ฅผ docker-commit ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ ์ข…์† ๋ฐฐํฌ์™€ ๋น„๊ตํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๊ด€์ฐฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์—์„œ ๋กœ๋“œ ํŒŒ์ผ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ๊ตฌํ˜„๋˜๊ณ  ์ถœ์‹œ๋˜๋ฉด ์ค‘๊ฐ„ ํ•ซ ๋กœ๋“œ ๋‹จ๊ณ„๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

@vitek-karas, "๋ฒˆ๋“ค์—์„œ ๋Ÿฐํƒ€์ž„ ์ž์‚ฐ ๋กœ๋“œ" ๊ธฐ๋Šฅ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ด๋–ค ์ข…๋ฅ˜์˜ ์žฅ์• ๋ฌผ์ด ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. :)

@am11 ํ˜„์žฌ ์„ธ๋ถ€ ๊ณ„ํš์„ ์งœ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/dotnet/coreclr/tree/single-exe์—์„œ ์™„๋ฃŒ๋œ ํ”„๋กœํ† ํƒ€์ž…์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ตฌํ˜„์€ ์•„๋งˆ๋„ ๋„ˆ๋ฌด ๋‹ค๋ฅด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋ถ„๋ช…ํžˆ ๋” ๋‚˜์€ ์ธ์ˆ˜๋ถ„ํ•ด ๋“ฑ์ด ์žˆ์ง€๋งŒ ํ•ต์‹ฌ ์•„์ด๋””์–ด๋Š” ๊ฑด์ „ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค).

@Webreaper ์›น ์•ฑ์˜ ๊ฒฝ์šฐ ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ ์ง€๊ธˆ์€ WPF/WinForm ๊ฐœ๋ฐœ์— .Net Core 3์ด ๊ถŒ์žฅ๋˜๊ณ  ๋ฐฑ .dll์—์„œ ์žƒ์–ด๋ฒ„๋ฆฐ ๋ฐ์Šคํฌํ†ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ .exe๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ์˜ต์…˜์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์™€ ๊ด€๋ จ๋œ ์ขŒ์ ˆ๊ฐ์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.
;)

๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž๋Š” ์˜ค๋Š˜ exe๋ฅผ ๋‹ค์‹œ ํด๋ฆญํ•˜๊ธฐ ์ „์— 10์ดˆ(๋˜๋Š” 3์ดˆ ์ด์ƒ)๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ๋กœ๋”ฉ ํ‘œ์‹œ๊ธฐ๊ฐ€ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ด ๊ธฐ๋Šฅ์˜ ๋‘ ๋ฒˆ์งธ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋กœ๋”ฉ ํ‘œ์‹œ๊ธฐ๋Š” .Net Core 3.1์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์‚ฌ์šฉ์ž๋Š” ์ธ๋‚ด์‹ฌ์„ ๊ฐ€์ ธ์•ผ ํ•ฉ๋‹ˆ๋‹ค...

๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ์ž๋Š” 2๋‹จ๊ณ„๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์œผ๋ฉฐ .Net 5์˜ ์ผ๋ถ€๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ .Net Core์˜ ๋ฐ์Šคํฌํ†ฑ ๊ฐœ๋ฐœ์€ ์ตœ์ข… ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ง ๋‚˜์œ ๊ฒฝํ—˜์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@RUShy ์™œ ์ด๋ ‡๊ฒŒ ์ฆ์˜ค๊ฐ€ ๋งŽ์•„? ์ฒ˜์Œ ์‹œ์ž‘ํ•  ๋•Œ ์‹œ์ž‘ ์ง€์—ฐ์„ ์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹จ์ผ ํŒŒ์ผ ๋ฐฐํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ์ฆ์˜ค๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฑด์„ค์ ์ด๊ณ  ์ •์งํ•œ ํ”ผ๋“œ๋ฐฑ์ž…๋‹ˆ๋‹ค. ์ €๋Š” C#๊ณผ .net์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋งค์ผ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. GO๋‚˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋Œ€์ฒด๋˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ:
https://old.reddit.com/r/golang/comments/e1xri3/choosing_go_at_american_express/
https://old.reddit.com/r/golang/comments/ds2z51/the_stripe_cli_is_now_available_and_its_written/

๋ถ€์ •์ ์ธ ํ”ผ๋“œ๋ฐฑ์€ ๊ธ์ •์ ์ธ ํ”ผ๋“œ๋ฐฑ๋งŒํผ ๋„์›€์ด ๋˜์ง€๋งŒ "์ฆ์˜ค"๋กœ ๋ฐ›์•„๋“ค์ด๋ฉด ๋‚˜๋Š” ๋‹น์‹ ์„ ๋„์šธ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

.net ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์กฐ์šฉํ•˜๊ณ  ์ˆ˜๋™์ ์ด๋ฉฐ ํŽธํ–ฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ๊ดด๊ฐ€ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

.NET์€ ๊ฐ๊ด€์ ์œผ๋กœ ์˜ค๋Š˜๋‚  ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๊นจ๋‹ฌ์•˜์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

Java, Go, Rust, Node, ...์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ๋“ค์€ ์ „์Ÿ ์ด์•ผ๊ธฐ๋Š” ์†”์งํžˆ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ์€ ์ƒ์‚ฐ์„ฑ ํ‚ฌ๋Ÿฌ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— ์ด๊ฒƒ์€ ์‹œ๊ฐ„๊ณผ ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„์ž…๋‹ˆ๋‹ค. AOT ์ปดํŒŒ์ผ ๋ฐ ํŠธ๋ฆฌ ํ”๋“ค๊ธฐ์— ์ง‘์ค‘ํ•˜๊ณ  ๋ชจ๋“  ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฑฐ๊ธฐ์— ๋„ฃ๊ณ  ํ•ดํ‚น์„ ์ค‘์ง€ํ•˜์‹ญ์‹œ์˜ค.

๋™์˜ํ•œ๋‹ค. .Net์—๋Š” ํ›Œ๋ฅญํ•œ ์œ ํ˜• ์‹œ์Šคํ…œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค. ํˆด๋ง์€ AOT์— ์ดˆ์ ์„ ๋งž์ถฐ์•ผ ํ•˜์ง€๋งŒ ๋ฐ˜์‚ฌ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐ๋„ ์ค‘์ ์„ ๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. https://github.com/dotnet/corert/issues/7835#issuecomment -545087715๋Š” ์•„์ฃผ ์ข‹์€ ์‹œ์ž‘์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Null์˜ 10์–ต ๋‹ฌ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ์ด์ œ ์™„ํ™”๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜์ด ์—†๋Š” ์ฝ”๋“œ(๋˜๋Š” ๋ง์ปค ๋˜๋Š” corert ํ˜ธํ™˜ ์ฝ”๋“œ)์— ๋Œ€ํ•œ ์„ค์ • ๋˜๋Š” ๋งˆ์ปค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌํ”Œ๋ ‰์…˜์—์„œ๋„ ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

๋‚™๋‹ดํ•˜๋Š” ์„ฑ์ฐฐ์„ ํ–ฅํ•œ ๋ชจ๋“  ์ง„์ „์€ ์ง„์ „์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Btw๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ๋ฒˆ๋“ค ํฌ๊ธฐ์™€ ๋กœ๋“œ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ ์ตœ์ ํ™”๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ๋กœ ๊ทธ๊ฒƒ์„ ๊ฒจ๋ƒฅํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ด ๊ฒŒ์‹œ๋ฌผ์€ ๋ช…ํ™•ํžˆ ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋ฐ˜์‘์„ ์ˆ˜์ง‘ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฉ”ํƒ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์ฝ”๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์ด๊ณ  ๋‚ด ํ†ต์ œ ํ•˜์— ์žˆ๋Š” ๋””์ž์ธ ํƒ€์ž„์— ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ถˆ๋ณ€์„ฑ์„ ์ ์šฉํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ๋ฐ˜์‚ฌ๋Š” ๊ทธ ์‹ ๋ขฐ๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค.

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

์ด ์˜์—ญ์˜ ๊ตฌ๋…์ž ํƒœ๊ทธ ์ง€์ •: @swaroop-sridhar
๊ตฌ๋…์„ ์›ํ•˜์‹œ๋ฉด danmosemsft์— ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๋‹จ์ผ ํŒŒ์ผ ๊ธฐ๋Šฅ ๋””์ž์ธ์€ ์ด ๋ฌธ์„œ์— ์žˆ์Šต๋‹ˆ๋‹ค: https://github.com/dotnet/designs/blob/master/accepted/2020/single-file/design.md
์ด ๋ฌธ์ œ์—์„œ ๋‹จ์ผ ํŒŒ์ผ ์•ฑ์˜ ์ง„ํ–‰ ์ƒํ™ฉ ์ถ”์ : https://github.com/dotnet/runtime/issues/36590.
์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ๊ณผ ์ œ์•ˆ์„ ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

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