나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2026-03-25 17:14:34

AOT


파일:관련 문서 아이콘.svg   관련 문서: 프로그래밍 언어/실행 방식
#!if 문서명2 != null
, [[]]
#!if 문서명3 != null
, [[]]
#!if 문서명4 != null
, [[]]
#!if 문서명5 != null
, [[]]
#!if 문서명6 != null
, [[]]

[[컴퓨터공학|'''컴퓨터 과학 및 공학
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="margin: 0 -10px -5px; min-height:calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<bgcolor=#1282d7,#1282d7> 기반 학문 수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(음운론 · 형태론 · 통사론 · 의미론 · 화용론) · 인지과학
하드웨어 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · 바이오스 · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 함수형 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · LinuxBoot · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구 및 기타 논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 카르노 맵 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영체제(멀티태스킹 · 프로세스 스케줄링 · 데드락 · 식사하는 철학자 문제 · 뮤텍스 · 세마포어 · 인터럽트) · 데이터베이스 · 컴퓨터 언어 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 어휘 분석 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 마크업 언어 · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크(네트워크 포트) · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론(애자일 · 워터폴) · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템) · 난수생성 · 놀람 최소화 원칙 · 프레임워크 · 라이브러리 · 모듈 · API · ABI · 이진 탐색
}}}}}}}}} ||
[[컴퓨터 언어#종류|'''컴퓨터 언어의 분류
{{{#!wiki style="font-family: Times New Roman, serif; display: inline"
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#444488><colcolor=#fff,#fff> 형식 언어론적 분류 정규 언어 · 문맥 자유 언어 · 문맥 인식 언어 · 무제약 언어
프로그래밍 언어 <bgcolor=#444488> 추상화 수준별 기계어 · 저수준 프로그래밍 언어 · 고수준 프로그래밍 언어
실행 방식별 AOT 컴파일 언어 · 인터프리터 언어 · JIT 컴파일 언어
타입 시스템별 정적 타입 프로그래밍 언어 · 동적 타입 프로그래밍 언어 · 강타입 프로그래밍 언어 · 약타입 프로그래밍 언어
패러다임별 명령형 프로그래밍 언어(절차적 프로그래밍 언어 · 객체 지향 프로그래밍 언어) · 선언형 프로그래밍 언어(함수형 프로그래밍 언어 · 반응형 프로그래밍 언어)
난해한 프로그래밍 언어 · 셰이딩 언어 · 수치해석 프로그래밍 언어 · 스크립트 언어 · 시각적 프로그래밍 언어 · 증명보조언어 · 한글 프로그래밍 언어
마크업 언어 조판 언어 · 수식 마크업 언어 · 메타 마크업 언어
기타 그래프 기술 언어 · 다이어그램 기술 언어 · 데이터 직렬화 언어 · 설정 언어 · 스타일시트 언어 · 쿼리 언어 · 하드웨어 기술 언어
도메인 특화 언어 }}}}}}}}}

1. 개요

Ahead Of Time Compilation, AOT Compile

컴퓨터 과학과 프로그래밍 언어에서 사용하는 용어. 프로그램을 실행하기 전에 처음 한 번 컴파일하고 실행하는 실행 방식이다.

2. 상세

단순히 컴파일이라고 부르기도 하며, 이러한 방식을 채택한 언어를 컴파일 언어 또는 native language라고 부르기도 한다.

소스 코드를 미리 특정 플랫폼(아키텍처)의 고유 기계어로 번역(컴파일)하며, 이후 해당 결과물을 프로세서가 직접 실행한다. 여기서의 프로세서는 말 그대로 CPU를 말하는 것으로, 인터프리터 또는 VM 기반의 언어들은 이러한 명령의 수행을 기저의 또다른 프로그램이 대신하지만, AOT 컴파일에서는 컴파일 과정 이후 실행에 대해서는 (해당 플랫폼의) CPU가 실행의 주도권을 가진다. 중간에 CPU가 주도권을 뺏기는 일도 없기에, 즉시성 및 예측성이 중요한 분야에서 적극 이용된다. MISRA-C, AUTOSAR, ISO 26262 등의 산업 표준이 AOT 컴파일 언어만 대상으로 하는 것도 이 때문.

AOT 컴파일하면 무조건 속도가 빨라진다는 오해가 있으나, 이는 해석기가 코드를 직접 읽어들이는 시간이 생략되기에 생기는 착시(misconception)일 뿐이다. 일반적으로 C계열의 언어들의 런타임 퍼포먼스가 좋기 때문에 AOT 컴파일된 언어들이 근본적으로 다른 구현방식에 비해 빠르다는 착각을 하게 되는 것. 하지만 미리 컴파일 하더라도 삽입되는 런타임 코드나 가비지 컬렉션의 유무, green thread 및 스케줄러의 구현 방식 등등 수많은 요인에 따라 실행속도가 천차만별로 차이나게 되므로, AOT 컴파일이 되었다고 실행 성능이 좋을 것이라고 지레짐작 하는 것은 금물이다. 일례로, 사람들이 Java 언어를 AOT 컴파일하면 빨라질 것이라고 착각해, GraalVM으로 AOT 컴파일한 후에 최초 실행시를 제외하고 전반적으로 더 느려짐에 당황하는 경우가 많다.

또한 AOT 컴파일은 본질적으로 JIT 컴파일러보다 더 적은 정보를 이용해 최적화를 수행해야 하므로, JIT 컴파일이 끝난 다음의 결과물과 비교해서는 일반적으로 성능상 떨어진다. # 나아가 플랫폼에 맞춰 따로 빌드를 해야 하고, 종속성이 바뀌면 처음부터 다시 빌드해야 하는 등, 유지 보수 면에서도 AOT 컴파일이 상대적으로 불리하다.

3. AOT 컴파일을 사용하는 플랫폼의 예