다음을 통해 공유


Windows 앱에 Arm 지원 추가

점점 더 많이 사용되는 AI 및 Machine Learning 워크로드에 맞게 조정된 NPU(신경 처리 장치)에 대한 Windows on Arm 지원 외에도, 전원 절약한 특성, 더 긴 배터리 수명 및 인상적인 처리 능력 덕분에 Arm 기반 디바이스가 점점 더 인기를 끌고 있습니다.

이 가이드에서는 Arm64 프로세서로 구동되는 디바이스에 대한 Windows 앱에 지원을 추가하는 단계를 설명합니다. 또한 이 지침에서는 Arm64 기반 버전의 앱을 만드는 데 방해가 될 수 있는 잠재적인 문제 또는 차단(예: 타사 종속성 또는 플러그인) 해결 방법도 설명합니다.

x86 또는 x64 Windows 앱용 Arm 기반 디바이스에 대한 에뮬레이션

Windows 10의 Arm 버전에는 Arm 디바이스에서 기존 수정되지 않은 x86 앱을 실행할 수 있도록 하는 에뮬레이션 기술이 포함되어 있습니다. Windows 11은 해당 에뮬레이션을 확장하여 Arm 기반 디바이스에서 수정되지 않은 x64 Windows 앱을 실행합니다.

Arm 디바이스에서 x64 및 x86을 에뮬레이트하는 기능은 더 나은 단계이지만, 이 가이드는 다음을 포함하여 앱이 네이티브 성능 향상 및 Arm64 기반 디바이스의 고유한 품질을 활용할 수 있도록 Arm 네이티브 지원을 추가하는 데 도움이 됩니다.

  • 앱의 전원 사용량 최적화하여 디바이스 배터리 수명을 연장합니다.
  • 특히 AI를 사용할 때 워크플로를 가속화하기 위해 CPU, GPU 및 NPU에 대한 성능을 최적화합니다.

또한 커널 드라이버는 네이티브 Arm64로 빌드해야 합니다. 커널에는 에뮬레이션이 없습니다. 이는 주로 가상화 시나리오에 영향을 줍니다. 사용자 모드가 아닌 커널 모드로 실행되는 OS 또는 하드웨어의 내부에 직접 액세스해야 하며, 아직 Arm64 프로세서를 지원하도록 업데이트되지 않은 디바이스 드라이버를 활용하는 앱은 WDK를 사용하여 Arm64 드라이버 빌드를 참조하세요.

참고

PWA(Progressive Web Apps)는 이미 네이티브 Arm64 성능으로 실행됩니다.

필수 조건

Arm 기반 디바이스(네이티브 컴파일 - 실행 중인 동일한 플랫폼에 대한 코드 생성)를 사용하여 앱을 업데이트하는 경우 다음을 사용할 수 있습니다.

  • Visual Studio 17.10 – 미리 보기 1 소개(2024년 2월)

  • Visual Studio 2022 v17.4 이상 이것은 ARM 기반 프로세서에서 ARM64 앱 빌드 및 디버깅을 기본적으로 지원하는 Visual Studio의 첫 번째 GA 릴리스가 될 것입니다. Visual Studio 2022 17.4 및 MSVC(Microsoft Visual C++) 네이티브 Arm64 버전은 모두 이전 에뮬레이트된 버전에 비해 훨씬 더 나은 성능을 제공합니다.

  • (선택 사항) LLVM(Clang) v12 이상. LLVM 12는 Clang 컴파일러, LLD 링커 및 컴파일러 rt 런타임 라이브러리를 포함하여 Arm64의 Windows에서 호스트되는 공식 이진 릴리스를 추가합니다.

x64 또는 x86 Intel 기반 디바이스(교차 컴파일)를 사용하여 Arm을 지원하도록 Windows 앱을 업데이트하는 경우 다음을 사용할 수 있습니다.

사용 가능한 하드웨어 및 테스트 실행의 단순성과 같은 교차 컴파일 또는 네이티브 컴파일 중에서 선택할 때 고려해야 할 몇 가지 요소가 있습니다.

참고

GCC, GNU 컴파일러 컬렉션 지원은 가까운 미래에 대상 지정됩니다.

Arm64 네이티브 지원을 추가하는 단계

Arm64에서 기본적으로 실행되도록 앱을 업데이트하려면 다음을 수행하십시오.

  1. Visual Studio에서 프로젝트에 Arm64 구성 추가
  2. 새로 빌드된 Arm64 앱을 테스트 및 디버그
  3. Arm 디바이스에서 앱 빌드 및 테스트

앱이 Arm 디바이스에 최적화되었음을 확인했으면 다음을 수행하십시오.

  1. 설치 관리자 업데이트 및 업데이트된 앱 게시
  2. 지속적인 업데이트 계획

1단계 - Visual Studio에서 프로젝트에 Arm64 구성 추가

디버그 및 릴리스 대상이 있는 새 ARM64 솔루션 플랫폼을 기존 x64 또는 x86 앱 프로젝트에 추가하려는 경우, 다음을 수행하십시오.

  1. Visual Studio에서 솔루션(프로젝트 코드)을 엽니다(지원되는 버전에 대한 필수 구성 요소 참조).
  2. 표준 도구 모음의 '솔루션 플랫폼' 드롭다운 메뉴(또는 '빌드' 메뉴)에서 Configuration Manager...를 선택합니다.
  3. '활성 솔루션 플랫폼' 드롭다운 목록에서 <New...>를 선택합니다.
  4. '새 플랫폼 입력 또는 선택' 드롭다운 메뉴에서 ARM64를 선택하고 '새 프로젝트 플랫폼 만들기' 검사 상자가 활성화된 상태에서 "설정 복사" 값이 x64로 설정되어 있는지 확인하고 OK를 선택합니다.

축하합니다! 앱에 Arm 지원을 추가하기 시작했습니다. 다음으로, 검사 Arm64 솔루션이 성공적으로 빌드되는지 확인합니다.

솔루션이 성공적으로 빌드되지 않은 경우, 빌드 실패가 일어나는 원인을 해결해야 합니다. 가장 가능성이 큰 이유는 아래 문제 해결에서 다루는 ARM64에 종속성을 사용할 수 없기 때문입니다.

(선택 사항): Arm64용 앱 이진 파일이 빌드되었는지 직접 확인하려면 PowerShell에서 프로젝트 디렉터리를 열면 됩니다(Visual Studio 솔루션 탐색기 앱 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 터미널에서 열기 선택). 프로젝트의 새 bin\ARM64\Debug 또는 릴리스 디렉터리가 선택되도록 디렉터리를 변경합니다. 다음 dumpbin /headers .\<appname>.exe 명령을 입력합니다(<appname>을(를) 앱 이름으로 바꾸기). 터미널의 출력 결과에서 위로 스크롤하여 FILE HEADER VALUES 섹션을 찾고 첫 번째 줄이 AA64 machine (ARM64)인지 확인합니다.

2단계 - 새로 빌드된 Arm64 앱을 테스트 및 디버그

Visual Studio에서 프로젝트에 Arm64 솔루션 플랫폼을 추가한 후 Arm64 솔루션이 성공적으로 빌드되는지 여부를 검사하려면 다음을 수행하십시오.

  1. '활성 솔루션 플랫폼' 창을 닫습니다.
  2. 빌드 설정을 디버그에서 릴리스로 변경합니다.
  3. '빌드' 드롭다운 메뉴에서 솔루션 다시 빌드를 선택하고 프로젝트가 다시 빌드되는 것을 기다립니다.
  4. '모두 다시 빌드하기 성공' 출력이 표시됩니다. 그렇지 않은 경우 아래의 문제 해결 섹션을 참조하십시오.

앱이 Arm64를 지원하기 위한 이진 파일을 빌드한 후에는 이진 파일을 테스트해야 합니다. 이를 위해서는 ARM 기반 Windows를 실행하는 디바이스 또는 가상 머신이 있어야 합니다.

ARM 기반 Windows 디바이스에서 개발을 수행하는 경우 Visual Studio 로컬 디버깅을 사용하여 쉽게 설정할 수 있습니다. ARM 프로세서에서 실행되지 않는 디바이스를 사용하여 교차 컴파일하는 경우 ARM 기반 Windows 디바이스 또는 가상 머신에서 원격 디버깅을 사용하여 다른 디바이스에서 Arm64 앱을 실행하는 동안 Visual Studio에서 개발 환경을 사용하도록 설정하려고 합니다.

테스트에 사용할 수 있는 Windows on Arm 하드웨어 또는 가상 머신

CI(연속 통합) 및 테스트에 사용할 하드웨어를 찾는 경우, 약; Arm64 기반 프로세서가 있는 몇 가지 Windows 디바이스가 있습니다.

CI 및 테스트를 지원하기 위해 Windows on Arm을 실행하는 VM(가상 머신)을 설정하는 방법에 대한 도움말은 빠른 시작: Azure Portal에서 Windows on Arm 가상 머신 만들기를 참조하세요.

3단계 - Arm 디바이스에서 앱 빌드 및 테스트

CI/CD(지속적인 통합 및 지속적인 업데이트) 전략을 고려할 때 테스트 자동화 패스를 추가하는 것은 중요합니다. Windows에서 실행되는 Arm64 솔루션의 경우 Arm64 아키텍처에서 테스트 제품군을 실행하는 것이 중요합니다. 이는 위에 나열된 Arm 디바이스 중 하나 또는 위에 나열된 VM의 Virtual Machine을 사용하여 Arm 하드웨어의 실제 Windows일 수 있습니다.

테스트와 동일한 컴퓨터에서 수행하는 경우 앱 컴파일이 더 편리하지만, 대부분의 경우에서는 필요하지 않습니다. 대신 기존 빌드 인프라를 확장하여 Arm64에 대해 교차 컴파일된 출력을 생성하는 것이 좋습니다.

4단계 - 설치 관리자 업데이트 및 업데이트된 앱 게시

Microsoft Store에 게시하는 경우 위의 단계에 따라 Arm64 버전의 앱을 빌드한 후에 파트너 센터 대시보드를 방문하여 새로 빌드된 ARM64 이진 파일을 제출에 추가하여 Microsoft Store에서 기존 앱 패키지를 업데이트할 수 있습니다.

앱이 Microsoft Store에 아직 게시되지 않은 경우 지침에 따라 MSI 또는 EXE, MSIX 패키지, PWA 또는 앱 추가 기능을 제출할지 여부에 따라 앱 제출을 생성할 수 있습니다.

자체 설치 관리자를 빌드하는 경우 새 Arm64 버전을 성공적으로 설치할 수 있는지 확인해야 합니다. WiX, Squirrel, InnoSetup, InstallAware 등과 같은 대부분의 설치 관리자 프레임워크는 문제 없이 Windows on Arm을 지원합니다.

웹 페이지에서 앱의 설치 관리자를 제공하는 경우 사용자 에이전트 클라이언트 힌트를 사용하여 고객이 Windows on Arm 디바이스에서 방문하는 시기를 감지하고 업데이트된 Arm 네이티브 버전의 앱을 제공할 수 있습니다. 사용자 에이전트 문자열과 달리 사용자 에이전트 클라이언트 힌트를 사용하면 Arm의 고객을 x86 디바이스의 고객과 구별할 수 있습니다.

5단계 - 진행 중인 업데이트 계획

Arm64 버전의 앱이 게시되었으므로 다른 버전의 앱과 동일한 방식으로 업데이트된 상태로 유지되도록 해야 합니다. 향후 고객 혼동을 방지하기 위해 버전과 기능을 아키텍처에 맞게 조정하는 것이 가장 좋습니다.

문제 해결

기존 x64 또는 x86 Windows 앱의 Arm64 버전을 추가하지 못하도록 방해 또는 차단할 수 있는 일반적인 문제는 다음과 같습니다.

ARM64에 대해 컴파일되지 않은 종속성에 따라 성공적인 빌드가 차단됩니다.

내부, 타사 또는 오픈 소스 라이브러리에서 종속성에 따라 빌드할 수 없는 경우 ARM64 아키텍처를 지원하도록 해당 종속성을 업데이트하거나 제거하는 방법을 찾아야 합니다.

  • 내부 종속성의 경우 ARM64 지원에 대한 종속성을 다시 빌드하는 것이 좋습니다.

  • 써드파티 종속성에 대해 ARM64 지원을 사용하여 유지 관리자를 다시 빌드하도록 요청하는 것이 좋습니다.

  • 오픈 소스 종속성의 경우 업데이트할 수 있는 ARM64 지원을 포함하는 최신 버전의 종속성이 있는지 확인하기 위해 vcpkg를 검사 것이 좋습니다. 업데이트가 없는 경우 ARM64 지원을 패키지에 직접 추가하는 것이 좋습니다. 많은 오픈 소스 유지 관리자는 기여에 감사할 것입니다.

  • Linaro 조직은 또한 기업 및 오픈 소스 커뮤니티와 협력하여 Arm 기반 기술에 대한 소프트웨어를 개발합니다. Linaro Service Desk에 요청을 제출하여 Windows on Arm과 관련된 누락된 종속성에 대한 패키지 지원을 업데이트할 수 있습니다.

  • Arm64EC를 사용하는 것이 좋습니다. 종속성의 Arm64EC 버전을 사용하여 애플리케이션을 다시 빌드하는 동시에 x64 버전의 종속성을 계속 활용할 수 있습니다. Arm64EC 프로세스의 종속성 코드를 포함한 모든 x64 코드는 앱에서 에뮬레이션으로 실행됩니다. (이 경우 Arm64 버전의 종속성은 사용할 수 없습니다.)

  • 마지막으로 선택할 사항은 앱 프로젝트에 대한 종속성을 제거 및/또는 대체하는 것입니다.

코드는 Arm64 이외의 특정 아키텍처에 대해 작성됩니다.

앱은 커널 드라이버를 사용합니다.

커널 드라이버는 네이티브 Arm64로 빌드해야 합니다. 커널에는 에뮬레이션이 없습니다. 이는 주로 가상화 시나리오에 영향을 줍니다. 사용자 모드가 아닌 커널 모드로 실행되는 OS 또는 하드웨어의 내부에 직접 액세스해야 하며, 아직 Arm64 프로세서를 지원하도록 업데이트되지 않은 디바이스 드라이버를 활용하는 앱은 WDK를 사용하여 Arm64 드라이버 빌드를 참조하세요.

또한 Windows의 드라이버는 Arm64로 빌드해야 하며 에뮬레이트할 수 없습니다. Arm64 프로세서를 지원하도록 아직 업데이트되지 않은 소프트웨어 드라이버를 사용하는 앱의 경우 WDK를 사용하여 Arm64 드라이버 빌드를 참조하세요.

Windows on Arm용 도구 체인

이 가이드의 필수 구성 요소 섹션에서 공유하는 Visual Studio 및 LLVM(CLANG)에 대한 지원 외에도 Arm64에 대해 다음과 같은 도구와 프레임워크가 지원됩니다.

다음과 같은 써드파티 프레임워크도 포함됩니다.

지원이 필요하십니까? App Assure 서비스 활용

앱 Assure Arm 자문 서비스는 개발자가 Arm 최적화 앱을 빌드하는 데 도움이 됩니다. 이 서비스는 기존 공약에 추가됩니다. 앱은 Windows on Arm에서 실행되며, 문제가 발생하면 Microsoft에서 문제 해결을 도와드립니다. 자세히 알아보기.

Windows Arm Advisory Services에 등록하기.