[C#] Native AOT ์ปดํŒŒ์ผ

[์›๋ณธ ๋งํฌ]

Java์˜ ์นดํ”ผ์บฃ ์ทจ๊ธ‰์„ ๋ฐ›๋Š” C#์ง€๋งŒ, ์ž๋ฐ”๋ณด๋‹ค ํ›จ์”ฌ ๋›ฐ์–ด๋‚œ ๋ถ€๋ถ„๋“ค๋„ ์—ฌ๋Ÿฟ ์กด์žฌํ•œ๋‹ค.
๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ Native AOT ์ปดํŒŒ์ผ์˜ ์ง€์› ์ˆ˜์ค€์ด๋‹ค.

Java๋„ GraalVM์„ ํ†ตํ•ด์„œ Native AOT ์ปดํŒŒ์ผ์„ ์ง€์›ํ•˜๊ธด ํ•˜๋Š”๋ฐ, ์•„์ง ์™„์„ฑ๋œ ๋А๋‚Œ๋„ ์•„๋‹ˆ๊ณ  ๋‚ด๊ฐ€ ๋ณผ๋•Œ ์ตœ์ ํ™” ์ˆ˜์ค€๋„ ์ €์—ดํ•œ ํŽธ์ด๋‹ค. C#์ด ํ›จ์”ฌ ๋‚ซ๋‹ค.

๋‚ด๊ฐ€ ๋ฒค์น˜๋งˆํฌ๋ฅผ ์ด๋ž˜์ €๋ž˜ ๋Œ๋ ค๋ณด๋‹ˆ๊นŒ, Java => GraalVM ์ปดํŒŒ์ผ์€ ํ™•์‹คํ•˜๊ฒŒ ๋ฌด์กฐ๊ฑด ๋А๋ ค์ง€๋Š”๋ฐ, C# AOT ์ปดํŒŒ์ผ์€ 2-3๋ฐฐ ์ด์ƒ ๋นจ๋ผ์กŒ๊ณ  ์–ด์ง€๊ฐ„ํ•œ ์ปดํŒŒ์ผ ์–ธ์–ด๋“ค๋ณด๋‹ค๋„ ๋น ๋ฅธ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์คฌ๋‹ค.
ํ™•์‹คํžˆ ๋งค๋ ฅ์ ์ธ ์„ ํƒ์ง€ ์ค‘ ํ•˜๋‚˜์ธ ๊ฒƒ ๊ฐ™๋‹ค.




๊ธฐ์กด ๊ตฌ์กฐ์˜ ์žฅ๋‹จ์ : JIT

C#์€ ์ปดํŒŒ์ผ์ด๋‹ˆ ๋ญ๋‹ˆ ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ ์ธํ„ฐํ”„๋ฆฌํ„ฐ ์–ธ์–ด๋‹ค.
๋‹ท๋„ท ๋Ÿฐํƒ€์ž„์ด๋ผ๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ๋‹ท๋„ท ์ „์šฉ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์˜ฌ๋ ค์„œ ๋Œ€์‹  ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋‹น์—ฐํžˆ ์ง์ ‘ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด์„œ๋Š” ์‹คํ–‰์„ฑ๋Šฅ์ด ํ˜„์ €ํ•˜๊ฒŒ ๋А๋ฆฌ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ท๋„ท ๋Ÿฐํƒ€์ž„์€ JIT ์ปดํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด์„œ ์„ฑ๋Šฅ๊ณผ ์‚ฌ์šฉ์„ฑ์˜ ๊ท ํ˜•์„ ์žก์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•œ๋‹ค.
https://blog.naver.com/sssang97/223948313129
์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€, ์ตœ์ดˆ ์ปดํŒŒ์ผ์ด ๋น ๋ฅด๊ณ , ์žฅ๊ธฐ์‹คํ–‰์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์„ฑ๋Šฅ ๊ณ ์ ์ด ๋†’์•„์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์‹คํ–‰ ์ค‘์—๋„ ํ”„๋กœํŒŒ์ผ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์˜ ์ง€์†์ ์ธ ์ตœ์ ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ด ์ปดํŒŒ์ผ ์–ธ์–ด๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๋‚˜์˜ฌ ๋•Œ๋„ ์žˆ๋‹ค.

์ด ๋ฐฉ์‹์—๋Š” ๊ณ ์งˆ์ ์ธ ๋‹จ์ ๋„ ๋ช‡๊ฐœ ์žˆ๋‹ค.

  1. ์‚ฌ์šฉ ํŒจํ„ด์— ๋”ฐ๋ผ์„œ JIT ์ตœ์ ํ™”๋ณด๋‹ค ์ •์ ์ธ ์ตœ์ ํ™”๊ฐ€ ํšจ์œจ์ ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

  2. ๋Ÿฐํƒ€์ž„์ด ๋งค๋ฒˆ ๋ถ™์–ด์„œ ๋Œ์•„๋‹ค๋‹ˆ๋‹ˆ ์ „์ฒด ์•ฑ์˜ ๋””์Šคํฌ ํฌ๊ธฐ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ์ปค์ง„๋‹ค.

  3. ์ฒ˜์Œ ์‹œ์ž‘ํ• ๋•Œ๋Š” ๋А๋ฆฌ๋‹ค๊ฐ€ ๋‚˜์ค‘์— ๋นจ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋ฐฐํฌ์‹œ์— ๊ท ์ผํ•œ ์„ฑ๋Šฅ ๋ณด์žฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ๋ฐ์›Œ์ฃผ๋Š” ์ž‘์—…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

  4. ์‹ค์‹œ๊ฐ„ ์ปดํŒŒ์ผ ๊ฒฐ๊ณผ๋ฌผ์„ ๊ณ„์†ํ•ด์„œ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ์—๋„ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค.



๊ทธ๋ž˜์„œ ๋ญ”๊ฐ€ ์„œ๋ฒ„ ๋“ฑ์„ ๋น ๋ฅด๊ฒŒ ๋น ๋ฅด๊ฒŒ ์˜ฌ๋ ค์•ผ ํ•˜๊ฑฐ๋‚˜,

์ด๋Ÿฐ ๋‹จ์ ๋“ค์ด ์น˜๋ช…์ ์ด๋ผ๋ฉด AOT ์ปดํŒŒ์ผ์„ ๊ณ ๋ คํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์‹œ๋„ํ•ด๋ด„์งํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.




AOT (Ahead Of Time)

AOT๋Š” C# ์ฝ”๋“œ๋ฅผ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์— ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ , ๊ทธ๋ƒฅ ์ง„์งœ ํ”Œ๋žซํผ ์‹คํ–‰ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
C/C++๋กœ ์ปดํŒŒ์ผํ•œ ๊ฒฐ๊ณผ๋ฌผ๊ณผ ๋™๋“ฑํ•˜๊ฒŒ ํŠน์ • ํ”Œ๋žซํผ์—์„œ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

์•ฑ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋” ์ ๊ฒŒ ๋จน๊ณ , CPU ์‚ฌ์šฉ๋Ÿ‰์ด ์ค„์–ด๋“ค๊ณ , ์‹œ์ž‘ ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ๋“ค์ด ์žˆ๋‹ค.
์ด๋ ‡๊ฒŒ ๋ง๋ฉด ๋‹ท๋„ท ๋Ÿฐํƒ€์ž„์„ ๋ฐฐํฌ ํŒŒ์ผ์— ํฌํ•จํ•  ํ•„์š”๋„ ์—†๋‹ค.

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

๊ทธ ์™ธ์—๋„ ํ˜ธํ™˜์„ฑ์ด ์™„์ „ํ•˜๊ฒŒ ๋ณด์žฅ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. AOT ์ปดํŒŒ์ผ์ด ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ๊ณ  ์•„๋‹Œ ๊ฒƒ๋“ค์ด ์žˆ๋‹ค.




AOT๋กœ ์ปดํŒŒ์ผํ•ด๋ณด๊ธฐ

์ปดํŒŒ์ผ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•œ ํŽธ์ด๋‹ค.
graalVM์ฒ˜๋Ÿผ ์ถ”๊ฐ€ ์ข…์†์„ฑ ๊ฐ™์€๊ฒŒ ํ•„์š”ํ•˜์ง„ ์•Š๋‹ค. ๋‹ท๋„ท ํˆด์ฒด์ธ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค.

<PublishAot>true</PublishAot>

ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์—์„œ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜


dotnet publish -c Release -r linux-x64 /p:PublishAot=true

publish command๋ฅผ ํ†ตํ•ด์„œ ์ปดํŒŒ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.


๊ทธ๋Ÿฌ๋ฉด ์ด๋Ÿฐ ์‹์œผ๋กœ ์‹คํ–‰ํŒŒ์ผ์ด ๋–จ์–ด์งˆ ๊ฒƒ์ด๋‹ค.
์ด ์ž์ฒด๋กœ ์™„์„ฑ๋œ ์‹คํ–‰ํŒŒ์ผ์ด๋‹ˆ, ๊ทธ๋Œ€๋กœ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.






์ฐธ์กฐ
https://learn.microsoft.com/ko-kr/dotnet/core/deploying/native-aot/?tabs=windows%2Cnet8