4. AOT & JIT

박은서's avatar
Apr 29, 2026
4. AOT & JIT

🧠 AOT vs JIT 컴파일 — 핵심 정리

1️⃣ AOT (Ahead-Of-Time Compilation)

1) 개념

  • 실행 전에 미리 컴파일
  • 소스코드 → 기계어(native code) 로 사전 변환 후 실행

2) 동작 흐름

소스코드 → (컴파일) → 기계어 실행파일 → 실행

3) 특징

  • 실행 시 추가 컴파일 없음 → 즉시 실행
  • 런타임 오버헤드 없음
  • 플랫폼 의존적 (OS/CPU마다 빌드 필요)

4) 장점

  • 빠른 시작 속도 (Startup Time 우수)
  • 예측 가능한 성능
  • 런타임 환경 단순 (VM 불필요)

5) 단점

  • 실행 중 최적화 불가능
  • 환경 변화에 대응 못함
  • 빌드 시간이 길어질 수 있음

6) 대표 사례

  • C
  • C++
  • Go
  • GraalVM Native Image (Java AOT)

2️⃣ JIT (Just-In-Time Compilation)

1) 개념

  • 실행 중에 컴파일
  • 바이트코드 → 실행 시점에 기계어로 변환

2) 동작 흐름

소스코드 → (컴파일) → 바이트코드 → (실행 중 JIT 컴파일) → 기계어 실행

3) 특징

  • 런타임에 실제 사용 패턴 기반 최적화
  • VM(Java VM 등) 필요
  • 초기 실행 시 느림 (워밍업 필요)

4) 장점

  • 실행 중 최적화 가능 (HotSpot 최적화)
  • 플랫폼 독립성 (Write Once Run Anywhere)
  • 반복 실행될수록 성능 향상

5) 단점

  • 초기 실행 속도 느림
  • 런타임 메모리 사용 증가
  • VM 의존성

6) 대표 사례

  • Java (JVM)
  • C# (.NET CLR)
  • V8 (JavaScript 엔진)

3️⃣ 핵심 차이 비교

구분
AOT
JIT
컴파일 시점
실행 전
실행 중
실행 속도
빠름 (초기부터)
점점 빨라짐
시작 속도
매우 빠름
느림 (워밍업 필요)
최적화
제한적
동적 최적화 가능
플랫폼 의존성
높음
낮음
실행 환경
단순
VM 필요

4️⃣ 현실적인 관점 (중요)

단순 비교는 의미 없다. 실제 시스템에서는 혼합 전략이 일반적이다.

1) 예: Java

  • 기본: JIT (HotSpot)
  • 옵션: AOT (GraalVM Native Image)
⬇️
  • 빠른 시작이 중요 → AOT
  • 장기 실행 + 고성능 → JIT

5️⃣ 실무 판단 기준

1) AOT가 유리한 경우

  • 서버리스 (Lambda, Cloud Functions)
  • CLI 도구
  • 컨테이너 빠른 기동 필요
  • 메모리 제한 환경

2) JIT가 유리한 경우

  • 장시간 실행 서버
  • 트래픽이 많은 백엔드
  • 반복 연산 많음 (Hot code 존재)

6️⃣ 한 줄 정리

  • AOT: “미리 만들어놓고 바로 실행”
  • JIT: “실행하면서 똑똑하게 최적화”
Share article