4P by dimohy 2023-01-08 | favorite | 댓글 5개
  • .NET AOT란?
  • Native AOT 배포

.NET 7은 이제 콘솔 애플리케이션으로 윈도우, 리눅스 및 macOS에서 .NET 런타임 없이 2M 수준의 작은 사이즈의 네이티브 코드를 생성할 수 있고 의존 없이 실행 가능합니다.

.NET 7에서 지원하지 않았던 macOS를 .NET 8에서 공식 지원하게 됩니다.
https://learn.microsoft.com/en-us/dotnet/…

Microsoft 공식 문서를 보면, 이 기능은 미리 네이티브로 컴파일하는 데서 오는 근본적인 제약점 이외에도 개발 초기 단계이기 때문에 생기는 부가적인 제약점이 좀 있습니다. 아직 ASP.NET Core 앱에는 적용이 안 되고, 라이브러리 단계에서의 지원이 필요하며, 디버깅이나 프로파일링에도 아직 한계가 있습니다. 덧붙이자면 CPU 아키텍쳐는 x64와 ARM64만 지원하기 때문에 32비트 윈도우용 앱은 만들지 못합니다. 그리고 눈에 띄는 점이라면, 이 기능을 통해 비 .NET 앱에서 가져다 쓸 수 있는 정적 라이브러리를 만들 수 있다는 점이 있군요.

MS에서 .NET 7을 발표하면서 “클라우드 네이티브 앱을 위한” 플랫폼이라고 말했습니다. 이를 위해 앱을 Docker 컨테이너로 배포하는 기능도 추가했지요. AOT 지원 또한 이런 컨테이너화된 앱의 이미지 용량과 시작 시간을 최적화하기 위한 도구로 추가된 것이 아닌가 싶습니다. 하지만 정작 ASP.NET Core에 대한 지원이 아직 작업 중이니, 이 기능이 클라우드 네이티브 앱에서 실질적으로 빛을 발하는 것은 좀 더 훗날의 일이 되겠지요.

참고:

친절한 답변 감사합니다.

콘솔 애플리케이션은 미리 보기 단계를 넘은 정식 릴리스 단계로 실제 애플리케이션을 개발할 수 있습니다.

말씀하신 것 처럼 초기 단계라 ASP.NET Core라던가 WPF, Windows Form 또는 WinUI의 지원이 아직 없습니다.

또한 도커 컨테이너로 배포하고자 하는 니즈에는 부합되지 않습니다. ASP.NET Core를 아직 지원하지 않거든요.

마찬가지로 말씀하신 것 처럼 네이티브 코드로 컴파일 되므로 Reflector의 대부분의 기능을 사용할 수 없습니다. 이 부분은 초기단계에서 비롯되는 제약점이라기 보다는 IL코드와 네이티브 코드의 다른 특성 때문으로 보입니다.

현재의 NativeAOT의 의미는 윈도우, 리눅스 및 macOS에서 의존성 없는 순수한 네이티브 코드를 콘솔 애플리케이션 수준에서는 훌륭하게 배포할 수 있다는 점 같습니다.

macOS는 아닙니다. 제가 링크한 Microsoft Learn 문서를 보시면 아시겠지만, 현재 이 기능의 지원 플랫폼은 Windows와 Linux뿐입니다. macOS는 아마 나중에 추가되겠지요.
시간이 해결해 주겠습니다만, 이 기능은 아직 현업에서 쓰기 힘든 경우가 더 많지 않을까 생각합니다.

macOS는 아직 지원하지 않는 것이 맞습니다.