오늘은 [유니티 Tips] 알고 있으면 쓸데 있는 IL2CPP, Mono, AOT, JIT 개념 파헤치기 라는 영상을 보며 간단하게 정리해보려고 한다.
스크립팅 백엔드는 개발자가 작성한 스크립트를 실행가능한 형태로 변환하는 컴파일러이다.
Unity는 스크립팅 백엔드로 Mono와 IL2CPP를 지원한다.
스크립팅 백엔드를 사용하는 이유는 C#은 .NET Framework 안에 존재하는 언어인데, .NET Framework는 Windows에만 실행된다는 큰 단점이 존재하기 때문이다. (다양한 플랫폼에서 실행할 수 없음)
JIT(Just In Time) 컴파일 방식을 사용하는 스크립팅 백엔드이다. JIT 컴파일 방식이란 프로그램이 실행되는 시점에 필요한 코드를 동적으로 컴파일하는 방식이다. 이러한 특징을 살려 Unity 에디터에서 게임을 실행할 때 사용된다.
작동방식은
C#을 IL라는 중간 언어로 컴파일한 뒤,런타임에 IL을 기계어로 컴파일하는 방식이다.
AOT(Ahead Of Time) 컴파일 방식을 사용하는 스크립팅 백엔드이다. AOT 컴파일 방식이란 프로그램이 실행되기 이전에 필요한 코드를 컴파일하기 때문에 초기 실행 속도가 빠르고 메모리 사용량이 최적화되며, 코드 보안이 강화된다. 이러한 특징을 살려 Unity에서 Build할 때 사용된다.
IL2CPP는 Mono의 단점인 최적화 부분을 보완하기 위해 만들어진 스크립팅 백엔드이다. 런타임에 컴파일하는 Mono는 당연히 속도가 느릴 수 밖에 없다. 그래서 프로그램 실행 전에 완전히 컴파일을 해두고 런타임에 추가적인 작업을 하지 않는 C++을 사용하기 위해 IL2CPP를 사용하는 것이다.
작동방식은
C#을 IL로 컴파일하고IL을 다시 C++ 코드로 디컴파일한 뒤,C++ 코드를 다시 컴파일 하여 기계어로 바꾸는 방식이다.
Mono의 특징을 정리해보면, 컴파일 시간이 상대적으로 짧아 유연하게 코드를 변경하며 개발할 수 있다. 하지만, 런타임 성능이 상대적으로 떨어져 최적화 부분에서 신경을 많이 써야한다.
반대로 IL2CPP는 컴파일 시간이 상대적으로 길어 개발하는 데 있어 불편할 수 있다. 하지만, 런타임 성능이 우수하기 때문에 최적화 부분에서 큰 이점을 느낄 수 있을 것이다.
결론적으로 가벼운 프로젝트를 진행할 땐 Mono를 사용하고, 무거운 프로젝트를 진행할 땐 IL2CPP를 사용하면 될 것 같다.