[TIL] Day 69 AOT vs JIT 컴파일러 비교

현서·2026년 3월 6일

[TIL] Flutter 9기

목록 보기
81/102

AOT vs JIT 컴파일러 비교

개요

AOT(Ahead-of-Time)JIT(Just-in-Time) 컴파일러는 소스 코드를 기계 코드로 변환하는 방식이 다른 두 가지 주요 컴파일 전략이다. 각각의 장단점을 이해하는 것은 애플리케이션 성능을 최적화하는 데 중요하다.


AOT(Ahead-of-Time) 컴파일러

정의

AOT 컴파일러는 애플리케이션 실행 전에 소스 코드 전체를 기계 코드로 미리 컴파일한다.

특징

특성설명
컴파일 시점배포 전 (빌드 타임)
실행 속도빠름 (컴파일된 코드 직접 실행)
시작 시간빠름
메모리 사용낮음
파일 크기증가

장점

  • 빠른 애플리케이션 시작: 미리 컴파일된 코드를 바로 실행한다
  • 낮은 메모리 사용량: 런타임 컴파일 오버헤드가 없다
  • 일정한 성능: 예측 가능한 성능을 제공한다
  • 보안: 소스 코드를 배포하지 않는다
  • 배터리 절감: 모바일 환경에서 전력 효율이 우수하다

단점

  • 긴 빌드 시간: 배포 전 전체 컴파일이 필요하다
  • 코드 최적화 한계: 런타임 정보를 활용할 수 없다
  • 플랫폼 종속성: 각 플랫폼별로 별도 컴파일이 필요하다
  • 동적 코드 실행 제한: 동적 기능 사용이 어렵다

사용 예시

C/C++ → 컴파일러 → 기계 코드 (exe, o 파일) → 실행

주요 사용 기술

  • C/C++
  • Rust
  • .NET Native
  • Google Native Image (GraalVM)

JIT(Just-in-Time) 컴파일러

정의

JIT 컴파일러는 애플리케이션 실행 중에 자주 사용되는 코드를 동적으로 기계 코드로 컴파일한다.

특징

특성설명
컴파일 시점런타임 (실행 중)
실행 속도중간 (워밍업 필요)
시작 시간느림
메모리 사용높음
파일 크기작음

장점

  • 빠른 개발 사이클: 빌드 타임이 없다
  • 런타임 정보 활용: 실행 패턴을 분석한 후 최적화한다
  • 플랫폼 독립성: 한 번의 컴파일로 모든 플랫폼을 지원한다
  • 동적 코드 실행: 리플렉션, eval 등 동적 기능을 지원한다
  • 작은 배포 파일: 바이트코드만 배포한다

단점

  • 느린 시작 속도: 워밍업 시간이 필요하다
  • 높은 메모리 사용: 런타임 컴파일러와 컴파일된 코드를 보관한다
  • 예측 불가능한 성능: 컴파일 중 지연이 발생할 수 있다
  • 배터리 소모: 모바일 환경에서 전력 소비가 증가한다
  • 보안 취약: 바이트코드 역분석이 가능하다

사용 예시

Java 소스 → 자바 컴파일러 → 바이트코드 → 
JIT 컴파일러 (런타임) → 기계 코드 → 실행

주요 사용 기술

  • Java (HotSpot JVM)
  • JavaScript (V8, SpiderMonkey)
  • Python (PyPy)
  • .NET Framework

직접 비교

성능 비교

AOT: 빌드 타임 빠른 런타임  
JIT: 빠른 시작 워밍업 → 빠른 런타임

사용 사례 비교

상황추천
모바일 앱AOT
클라우드 서버JIT
마이크로서비스AOT
웹 브라우저JIT
엣지 디바이스AOT
개발 생산성 중시JIT

Flutter의 컴파일러 전략

Flutter는 개발 생산성과 배포 성능을 모두 고려하여 AOT와 JIT 컴파일러를 상황에 따라 사용한다.

개발 단계: JIT 컴파일러 (Hot Reload)

Flutter 개발 중에는 JIT 컴파일러를 활용하여 빠른 피드백을 제공한다.

Hot Reload의 작동 원리

Dart 소스 코드 변경 → JIT 컴파일러 → 런타임에 코드 업데이트 → 앱 상태 유지

특징

  • 변경된 부분만 컴파일하여 매우 빠른 업데이트가 가능하다
  • 앱의 상태를 유지하면서 UI 변경을 즉시 확인할 수 있다
  • 개발 사이클이 극적으로 단축된다

배포 단계: AOT 컴파일러

Flutter 애플리케이션을 배포할 때는 AOT 컴파일러를 사용하여 최적화된 네이티브 코드를 생성한다.


결론

항목AOTJIT
장점빠른 시작, 낮은 메모리좋은 런타임 성능, 플랫폼 독립성
단점긴 빌드 타임, 플랫폼 종속느린 시작, 높은 메모리
최적모바일, 엣지 디바이스클라우드, 장시간 실행 서버

현대의 최선의 선택은 상황에 맞는 최적화 전략을 선택하는 것이며, 많은 플랫폼과 언어들이 Hybrid 방식으로 진화하고 있다.

0개의 댓글