Native AOT(Ahead-of-Time) 프로젝트를 구성할 때 프로젝트 파일(.csproj)에 추가해야 할 가장 필수적인 속성과 성능 및 호환성을 위해 권장되는 주요 속성들은 다음과 같습니다.
1. 필수 활성화 속성
- <PublishAot>true</PublishAot>: Native AOT 컴파일을 활성화하는 가장 핵심적인 속성입니다. 이 설정은 게시(Publish) 시점에 네이티브 코드 생성을 지시할 뿐만 아니라, 빌드 및 편집 과정에서 동적 코드 사용 분석 기능을 활성화하여 AOT 호환성 문제를 미리 파악할 수 있게 해줍니다.
2. 최적화 및 디버그 관련 속성
- <OptimizationPreference>: 빌드 결과물의 우선순위를 결정합니다.
- Speed: 실행 속도와 초당 요청 수(RPS)를 극대화하며, 기본적으로 BenchmarkDotNet 등에서 성능 측정 시 사용됩니다.
- Size: 실행 파일의 크기를 최소화하는 데 집중합니다.
- <StripSymbols>: 바이너리에서 디버그 기호를 제거할지 결정합니다.
- true로 설정하면 파일 크기가 줄어들지만, false로 설정하면 크래시 덤프 분석 등을 위한 디버그 정보가 포함되어 파일 크기가 커집니다.
3. 라이브러리 및 호환성 분석 속성
- <IsAotCompatible>true</IsAotCompatible>: 해당 라이브러리가 Native AOT와 호환됨을 나타냅니다. 이 속성을 설정하면 IsTrimmable, EnableAotAnalyzer 등의 분석기가 자동으로 활성화되어 호환성을 검증합니다.
- <VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility>: 프로젝트가 참조하는 모든 라이브러리가 AOT 호환성을 갖추었는지 엄격하게 확인하며, 호환되지 않는 종속성이 있을 경우 경고(IL3058)를 발생시킵니다.
- <WarningsAsErrors>IL*</WarningsAsErrors>: 트리밍 및 AOT 관련 경고를 오류로 처리하여, 호환되지 않는 코드가 포함된 채로 빌드되는 것을 방지합니다.
4. 보조 및 고급 설정
- <EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>: Native AOT에서 리플렉션 대신 사용하는 **소스 생성기(Source Generators)**가 만든 실제 코드 파일들을 확인할 수 있게 해줍니다.
- <TrimmerRootDescriptor>: 트리밍 과정에서 정적 분석기가 제거하지 않아야 할 특정 타입을 명시한 XML 파일을 포함할 때 사용합니다.
비유하자면: Native AOT 설정을 하는 것은 해외여행을 위해 짐을 싸는 것과 같습니다. <PublishAot>가 '해외여행 확정'이라는 기본 선언이라면, <OptimizationPreference>는 '가벼운 배낭여행(Size)'과 '모든 장비를 갖춘 탐험(Speed)' 중 하나를 선택하는 것이고, <IsAotCompatible>은 방문할 국가의 '비자(호환성)'를 미리 체크하여 입국 거절(런타임 오류)을 방지하는 과정이라고 할 수 있습니다.
'[프로그래밍]' 카테고리의 다른 글
| PGO(Profile-Guided Optimization, 프로필 기반 최적화) (0) | 2025.12.26 |
|---|---|
| 리플렉션 대신 권장되는 AOT 호환 기술은 무엇인가? (0) | 2025.12.26 |
| Native AOT가 JIT보다 시작 속도가 빠른 이유는? (2) | 2025.12.26 |
| Native AOT 빌드 시 사용 가능한 두 가지 최적화 모드는? (0) | 2025.12.26 |
| 정적 라이브러리로 빌드된 Native AOT 바이너리의 주요 제한 사항 (0) | 2025.12.26 |





