Files
2nd/10_Wiki/Topics/Architecture/AOT_Compilation_Ahead-of-Time.md
T

3.7 KiB

category, tags, title, description, last_updated
category tags title description last_updated
Computer_Science_and_Theory
auto-wikified
technical-documentation
computer_science_and_theory
AOT Compilation (Ahead-of-Time) AOT(Ahead-of-Time) 컴파일은 애플리케이션이 실행되기 전에 소스 코드를 기기의 네이티브 기계어(ARM 코드 등)로 미리 컴파일해 두는 기술입니다 [1, 2]. 2026-05-04

AOT Compilation (Ahead-of-Time)

📌 Brief Summary

AOT(Ahead-of-Time) 컴파일은 애플리케이션이 실행되기 전에 소스 코드를 기기의 네이티브 기계어(ARM 코드 등)로 미리 컴파일해 두는 기술입니다 [1, 2]. 주로 Flutter 프레임워크의 Dart 언어나 Spring Boot의 GraalVM 네이티브 컴파일 환경 등에서 활용됩니다 [3, 4]. 실행 시점에 코드를 동적으로 해석하거나 파싱할 필요가 없으므로 애플리케이션의 콜드 스타트(Cold start) 시간을 크게 단축시키며, 네이티브 수준의 높은 실행 효율과 성능을 보장할 수 있습니다 [1, 5].

📖 Core Content

  • Flutter와 Dart의 AOT 컴파일: Flutter를 구동하는 Dart 가상 머신(VM)은 빠른 컴파일 환경을 제공하기 위해 JIT(Just-In-Time) 컴파일과 AOT 컴파일을 모두 지원합니다 [6]. 프로덕션 배포 시 Flutter 앱은 AOT 컴파일을 통해 Android 및 iOS용 네이티브 기계어(ARM 코드 등)로 사전에 직접 컴파일됩니다 [1, 2]. 엔진 초기화 및 자바스크립트 번들 파싱 과정을 거쳐야 하는 다른 크로스 플랫폼 기술과 비교했을 때, 런타임 오버헤드가 대폭 제거되어 콜드 스타트 시간이 눈에 띄게 단축되며 실행 효율이 극대화됩니다 [1, 5]. 결과적으로 네이티브 애플리케이션 본연의 성능(Original performance)을 달성할 수 있습니다 [3].
  • Spring Boot의 네이티브 컴파일 (GraalVM 활용): 자바(Java) 기반 백엔드 프레임워크인 Spring Boot 환경에서도 AOT 최적화 맥락과 맞닿아 있는 GraalVM 네이티브 컴파일을 채택하고 있습니다 [4]. 일반적인 JVM 애플리케이션은 시작하는 데 5~30초의 시간이 소요되지만, 이 네이티브 컴파일을 적용하면 코드가 사전 빌드되어 밀리초 단위로 애플리케이션을 시작할 수 있고 기존보다 훨씬 적은 힙 메모리(a fraction of the heap)만으로도 가동할 수 있습니다 [4].

⚖️ Trade-offs & Caveats

AOT 및 사전 네이티브 컴파일 방식을 애플리케이션 아키텍처에 도입할 경우, 최적화 이면에서 다음과 같은 반대 급부와 제약 사항을 반드시 고려해야 합니다.

  • 빌드 복잡성 증가 및 런타임 유연성 제한: Spring Boot와 같은 환경에서 GraalVM을 활용한 네이티브 빌드를 적용할 경우, 사전에 정적 분석 및 컴파일을 수행해야 하므로 빌드 환경 구축과 과정의 복잡성(build complexity)이 크게 증가합니다 [4]. 더불어 코드가 네이티브 이미지로 완전히 고정되기 때문에, 기존 JVM이 지니고 있던 동적 로딩 등의 런타임 유연성(runtime flexibility)이 일부 상실되는 제약을 감수해야 합니다 [4].
  • 애플리케이션 파일 크기(앱 번들) 상승 부담: 네이티브 기계어로 직접 컴파일되는 Flutter 애플리케이션의 경우, 컴파일된 결과물과 함께 Dart 런타임 및 자체 렌더링 엔진(예: Impeller)이 하나로 패키징되어 포함되어야 합니다 [1]. 이로 인해 아주 단순한 앱이라도 최소 기본 APK 크기가 8~12MB 수준에 달하게 되며, 복잡한 네이티브 코드가 포함됨에 따라 전체 앱 크기(App Size)가 다소 커지는 단점이 발생할 수 있습니다 [1, 7].

Last updated: 2026-05-03