티스토리 뷰
728x90
✅ AOT란? (Ahead-Of-Time Compilation)
AOT 컴파일은 말 그대로 애플리케이션 실행 전에, 코드를 미리 컴파일해서 최적화된 기계어 바이너리를 만들어두는 방식입니다.
📌 즉, 실행 전에:
- 클래스 로딩
- 빈 등록
- 리플렉션 분석
- 리소스 탐색
이런 작업을 미리 수행해서 Native 실행에 적합하도록 정리해 놓는 거예요.
🤔 왜 AOT가 중요할까? (특히 GraalVM Native에서)
GraalVM의 Native 이미지 기능은 Java 애플리케이션을 C처럼 단일 실행 파일로 컴파일합니다.
이 과정에서는 리플렉션, 프록시, 리소스 로딩 등 동적 기능이 안 보이면 포함되지 않아요.
그래서 Spring Boot 같은 프레임워크는 미리 정적인 분석을 통해 필요한 것들을 Native에 반영해야 해요.
이게 바로 AOT의 역할입니다!
⚙️ AOT vs JIT 간단 비교
항목 | AOT (Ahead-Of-Time) | JIT (Just-In-Time) |
시점 | 실행 전에 컴파일 | 실행 중에 컴파일 |
속도 | 빠른 시작 속도 (Startup time) | 느린 시작 속도 |
크기 | 더 작거나 최적화된 바이너리 | JVM 포함으로 크기가 큼 |
유연성 | 리플렉션, 동적 코드 제한 | 자유로운 동적 기능 |
사용처 | 서버리스, CLI 앱, 경량 MSA | 전통적인 웹 앱, 데스크탑 앱 |
💡 Spring Boot에서는?
Spring Boot 3부터는 AOT 지원이 내장되어 있어요.
예시: Gradle로 Native 빌드 (AOT 포함)
./gradlew bootBuildImage --imageName=my-app --builder paketobuildpacks/builder:tiny -PBP_NATIVE_IMAGE=true
또는:
./gradlew nativeCompile
이 과정에서 Spring은 내부적으로 AOT 컴파일을 수행하고, 필요한 구성 정보를 추출해서 GraalVM에 전달합니다.
📌 정리하면
- AOT는 실행 전 미리 분석하고 컴파일하는 방식
- Native 이미지(예: GraalVM)에서 필수적
- Spring Boot 3+ 는 AOT를 자동으로 지원
728x90
'Programming' 카테고리의 다른 글
@ReflectionHint란? (0) | 2025.03.24 |
---|---|
GraalVM Native 이미지로 빌드 에러 발생 원인 (0) | 2025.03.24 |
Spring Boot + GraalVM Native 빌드 최적화 설정 (0) | 2025.03.23 |
[Spring Boot 2.x -> Spring Boot 3.x] 마이그레이션 Spring Security 설정 방식 (0) | 2025.03.22 |
[Spring Boot 2.x -> Spring Boot 3.x] 마이그레이션 javax.* → jakarta.* 패키지 변경 (0) | 2025.03.22 |