Unity

IL2CPP 파고들기

kark 2025. 4. 24. 13:04
728x90

IL2CPP 란 뭔가요?


C#으로 작성된 스크립트의 실행방식을 C++ 로 변경하는 방식을 의미합니다.

최종적으로 네이티브 기계어로 빌드를 미리 마치고, 해당 파일을 빠르게 실행시킬수 있다는 장점이 있습니다.


 

 

구체적인 IL2CPP 과정에 대해 설명해주세요


우선 기존의 .NET 컴파일 과정으로 IL 변환까지 동작은 동일합니다.

이후 유니티가 지원하는 IL2CPP 변환기를 통해 C++ 코드로 변경되고, AOT 컴파일링 과정을 통해
컴퓨터가 더빠르게 동작할 수 있는 네이티브 언어의 실행파일을 만들어낼수 있습니다.


 

 

Mono방식과 차이점이 뭔가요?


.NET으로 만들어내는 CIL은 똑같지만 이후의 과정에서 차이가 있습니다.

Mono방식은 CIL 까지만 만들어두고 이후 CLR의 JIT 컴파일러가 해당파일을 실행환경에 맞게

변환하는 과정이 있고

IL2CPP방식은 만들어진 CIL을 지정된 운영체제의 설정에 맞게 전부 컴파일,빌드를 완성시키고

이 파일은 CLR의 JIT 컴파일 과정없이 즉시 실행이 가능합니다.

이로인해 Mono방식의 경우 프로그램을 동작시킬때마다 JIT 컴파일링 시간이 포함되지만 그때마다 성능을 고려한 실행이 가능하다는 유연성이 있고

IL2CPP은 Mono와 달리 미리 운영체제를 설정시킨 빌드파일이 생성되어 Mono 방식보다 유연성은 떨어지지만, 프로그램을 실행시킬때 마다 JIT 컴파일 과정 자체가 없기에 실행 속도를 더 빠르게 앞당길수 있으며 IL2CPP 방식의 경우 Mono 방식보다 보안성이 뛰어납니다.


 

 

왜 IL2CPP의 보안성이 뛰어나나요?


Mono방식의 빌드의 완성본은 중간언어의 IL로 구성된 파일입니다.

중간언어의 경우 완전한 기계어가 아니므로 코드를 유추해낼수 있습니다.

반면 IL2CPP의 경우 컴파일 과정이 IL제작으로 끝내지 않고 AOT를 통해

바로 네이티브 언어로 변환시키게 되는데, 이는 완전한 기계어이므로 IL보다 해석이 어렵기 때문입니다


 

 

요즘 게임유통 플랫폼은 대부분 운영체제 별로 개별적인 빌드를 올리게 강제화 되어있기도 하며,

성능, 보안성의 차이가 이렇게 있다는것은 Mono방식은 쓸모가 없겠네요?


IL단계에서 빌드가 완료되는 Mono 방식은 IL2CPP 방식보다 과정이 짧음을 의미합니다.

수많은 빌드 테스트 시 두개의 방식으로 발생되는 시간비용은 극명하게 드러나게 됩니다.

그렇기에 Mono 방식은 개발과 빌드테스트를 위해 활용되며

IL2CPP 방식은 성능과 보안을 고려한 배포용 파일을 만들어 내기 위해 활용될 수 있습니다.


 

AOT 란 뭔가요?


IL2CPP 방식의 빌드 과정중에 생성된 C++코드를 기계어로 변환시키는 선행 컴파일방식의 컴파일러 입니다.

반대로 필요한 때마다 컴파일을 진행하는 CLR의 JIT 컴파일러와 구분될 수 있습니다.