[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
์ด ๋ฐฉ์์ ์ฅ์ ์, ์ต์ด ์ปดํ์ผ์ด ๋น ๋ฅด๊ณ , ์ฅ๊ธฐ์คํ์ผ๋ก ๊ฐ์๋ก ์ฑ๋ฅ ๊ณ ์ ์ด ๋์์ง๋ค๋ ๊ฒ์ด๋ค.
์คํ ์ค์๋ ํ๋กํ์ผ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ์ง์์ ์ธ ์ต์ ํ๊ฐ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์ด ์ปดํ์ผ ์ธ์ด๋ณด๋ค ๋น ๋ฅด๊ฒ ๋์ฌ ๋๋ ์๋ค.
์ด ๋ฐฉ์์๋ ๊ณ ์ง์ ์ธ ๋จ์ ๋ ๋ช๊ฐ ์๋ค.
-
์ฌ์ฉ ํจํด์ ๋ฐ๋ผ์ JIT ์ต์ ํ๋ณด๋ค ์ ์ ์ธ ์ต์ ํ๊ฐ ํจ์จ์ ์ผ ์๋ ์๋ค.
-
๋ฐํ์์ด ๋งค๋ฒ ๋ถ์ด์ ๋์๋ค๋๋ ์ ์ฒด ์ฑ์ ๋์คํฌ ํฌ๊ธฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ปค์ง๋ค.
-
์ฒ์ ์์ํ ๋๋ ๋๋ฆฌ๋ค๊ฐ ๋์ค์ ๋นจ๋ผ์ง๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋ฐฐํฌ์์ ๊ท ์ผํ ์ฑ๋ฅ ๋ณด์ฅ์ด ํ์ํ๋ค๋ฉด ๋ฐ์์ฃผ๋ ์์ ์ ํด์ค์ผ ํ๋ค.
-
์ค์๊ฐ ์ปดํ์ผ ๊ฒฐ๊ณผ๋ฌผ์ ๊ณ์ํด์ ๊ด๋ฆฌํ๊ณ ๋ฉ๋ชจ๋ฆฌ์๋ ์ฌ๋ ค์ผ ํ๋ค.
๊ทธ๋์ ๋ญ๊ฐ ์๋ฒ ๋ฑ์ ๋น ๋ฅด๊ฒ ๋น ๋ฅด๊ฒ ์ฌ๋ ค์ผ ํ๊ฑฐ๋,
์ด๋ฐ ๋จ์ ๋ค์ด ์น๋ช ์ ์ด๋ผ๋ฉด 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