ART를 공부해보며 대략적인 컴파일 과정은 이해하셨을 것 같습니다.
조금 더 자세하게 컴파일이 어떤 과정을 거쳐 이루어지는 지 알아보겠습니다.
안드로이의 최신 컴파일 방식은 ART(Android Runtime)를 기반으로하며, 단순히 한 가지 방식이 아니라 AOT, JIT 그리고 클라우드 프로필이 정교하게 결합된 하이브리드 방식을 사용합니다.
먼저 컴파일 과정을 살펴봅시다.
사용자가 앱을 설치할 때 ART는 전체 코드를 미리 컴파일하지 않습니다.
때문에 설치 속도가 매우 빠르고, 설치 파일이 차지하는 초기 용량도 작게 유지됩니다.
앱을 실행하면 인터프리터가 바이트코드를 읽기 시작하며 필요한 부분을 실시간으로 컴파일하는 JIT방식이 작동합니다. 이때 시스템은 앱의 어는 부분이ㅣ 자주 호출되는지 관찰하며 HotCode라 불리는 실행 데이터를 수집합니다.
JIT 컴파일러가 실시간으로 코드를 번역하는 동안 기기 내부에 프로파일 정보가 기록됩니다. 이 정보에는 사용자가 앱에서 가장 많이 사용하는 기능과 자주 실행되는 메소드 경로가 담겨 있습니다.
스마트폰을 사용하지 않고 충전 중인 유휴 상태가 되면, 시스템은 백그라운드에서 최적화 작업을 시작합니다. 앞서 수집된 프로파일 데이터를 기반으로 자주 사용되는 핵심 코드들만 골라내어 미리 기계어로 번역해 두는 AOT컴파일을 수행합니다.
이후 사용자가 다시 앱을 켰을 때 자주 사용되는 핵심 기능들은 이미 기계어로 번역된 상태이므로 즉시 실행됩니다. 번역되지 않은 나머지 부분은 여전히 JIT 방식으로 처리하여 성능과 효율의 균형을 맞춥니다.
앞서 설명드린 과정을 근거로 하이브리드 방식의 장점을 나열해보겠습니다.
설치 시점에 모든 코드를 컴파일하지 않으므로 사용자는 앱 다운로드 후 기다리는 시간 없이 바로 앱을 실행할 수 있습니다.
사용자가 실제로 자주 사용하는 기능 위주로 미리 컴파일되어 있기 때문에 앱의 로딩 속도와 부드러움이 비약적으로 향상됩니다.
앱 전체를 무분별하게 미리 번역하지 않으므로 기기의 저장 공간을 절약할 수 있으며, 이미 번역된 코드를 실행할 때는 CPU 사용량이 줄어들어 배터리 소모를 낮춥니다.
사용자의 실제 앱 사용 패턴에 맞춰 시간이 지날수록 앱이 해당 사용자에게 가장 최적화된 상태로 변합니다.
구글 플레이스토어를 통해 성능을 극대화하는 방식입니다.
수많은 사용자가 앱을 사용하며 생된된 자주 쓰는 코드 데이터(Profile)를 구글 서버에서 수집, 통합하여 새로운 사용자가 앱을 설치할 때, 통합된 클라우드 프로필을 함께 내려받습니다. 이에 앱을 처음 실행할 때부터 이미 최적화된 상태(AOT)로 동작하여 실행 속도가 비약적으로 빨라집니다.
개발자가 직접 제어할 수 있는 최신 최적화 도구입니다.
개발자가 앱의 핵심 경로(ex. 앱 실행, 목록 스크롤)를 미리 프로파일링하여 APK/AAB에 포함하여 사용자는 앱을 처음 설치하자마자 주요 기능을 최고 성능으로 사용할 수 있습니다.
안드로이드의 컴파일 방식은 단순한 '번역'을 넘어, 사용자 기기의 상태와 수많은 유저의 사용 패턴을 학습하며 실시간으로 진화하고 있습니다. 우리가 무심코 사용하는 앱들이 처음보다 쓰면 쓸수록 부드러워지는 데에는 이런 ART의 정교한 노력이 숨어 있었던 것이죠.
결국 베이스라인 프로필 같은 도구를 잘 활용하는 것이 사용자에게 최선의 경험을 제공하는 안드로이드 개발자의 역량이 아닐까 싶습니다.
다음 포스트에서는 안드로이드 빌드(Build)에 대해 비슷한 형식으로 알아보도록 하겠습니다.