스트리밍은 대부분의 브라우저와
Developer 앱에서 사용할 수 있습니다.
-
Virtualization으로 매끄러운 경험 만들기
Virtualization 프레임워크의 최신 업데이트 내용을 발견하세요. 자동으로 디스플레이 크기를 조정할 수 있도록 가상 머신(VM)을 구성하는 방법과 실행 중인 VM을 저장 및 복구하는 방법을 알아보고, 데스크톱이나 데이터 센터에서 작동 중인 Virtualization 앱을 위한 저장 장치와 성능 옵션을 탐색합니다. Virtualization 프레임워크에 대해 더 알아보려면, WWDC22의 'macOS 또는 Linux 가상 머신 만들기' 세션을 확인해 보세요.
챕터
- 1:38 - Resize displays automatically
- 2:33 - Save and restore virtual machines
- 7:01 - Connect remote storage with Network Block Device
- 10:30 - Meet the NVMe storage device
- 11:48 - Add the Mac keyboard
- 12:01 - Improve Rosetta 2 performance in Linux virtual machines
리소스
관련 비디오
WWDC22
-
다운로드
♪ ♪
안녕하세요, Virtualization 팀의 Scott Mionis입니다 오늘 저는 macOS Sonoma의 기능을 통해 Virtualization으로 매끄러운 경험을 만들어 볼건데요 Virtualization 프레임워크를 통해 가상 머신을 구성하고 관리, 실행까지도 할 수 있습니다 macOS Sonoma에서는 가상 Macs와 Linux 가상 머신이 그 어느 때보다 강력해졌습니다 사용하기에 훨씬 쉬워졌고 새로운 구성 옵션을 통해 사용자화하기에도 정말 좋아졌죠 이걸 가능하게 하는 기능에는 여러 가지가 있는데요 이번 세션에서는 그 몇 가지 항목들과 그것들을 앱에서 이용하는 법을 알아보도록 하겠습니다 가상 머신에서 새 작업흐름과 그를 통한 개선 사항을 보고 새로운 저장 옵션과 키보드 구성 옵션 마지막으로 Rosetta 2가 가상 머신에서 어떻게 x86_64 앱을 훨씬 빠르게 실행하는지 살펴 볼게요 먼저 가상 머신으로 작업할 수 있는 새 방법들을 살펴보죠 두 가지 강력한 새 기능이 있는데요 첫 번째는 '크기 조절 가능 디스플레이'입니다 창을 채우기 위해 런타임에 크기를 조정하는 가상 머신의 새로운 디스플레이 옵션이죠 그다음은 '가상 머신의 저장과 복구'인데요 디스크에 대해 실행 중인 가상 머신을 직렬화하는 매커니즘이라 나중에 재개될 수 있습니다 크기 조절 가능 디스플레이부터 시작해 보죠 스크린 크기는 가상 Mac에서 작업 시 큰 부분을 차지합니다 이 디스플레이가 있으면 가상 머신은 스크린 해상도를 조정해 창을 역동적으로 채워 공간을 가장 효율적으로 사용할 수 있죠 이걸 코드에 만들어 볼게요
크기 조절 가능 디스플레이를 앱에서 사용하기 위해서는 먼저 VZVirtualMachineView를 초기화해야 합니다
크기 조절을 가능하게 만드려면 automaticallyReconfiguresDisplay 프로퍼티를 참으로 설정해야 하고요 이게 끝입니다! VZVirtualMachineView의 크기를 조절하면 가상 머신에게 디스플레이 크기를 자동 조절하라고 말하는 건데요 디스플레이 고정을 원하신다면 이 값은 기본값으로 유지할 수 있습니다 다음은 가상 머신의 저장과 복구입니다 가상 머신을 멈춘다는 건 VM 동력 공급을 끈다는 거죠 가상 머신을 가동하는 건 콜드부팅을 한다는 겁니다 Mac에서 작업 시 대부분의 앱은 작업 시 진행 상황을 저장하는데요 가상 머신에서도 똑같습니다
제가 가상 머신을 실행 중이라고 해볼게요 진행 상황을 잃지 않고 이걸 닫고 싶은데요 가상 머신을 파일링해서 나중에 실행을 재개할 수 있습니다 작업을 백업하고 싶다면 어느 지점에 있든 가상 머신을 저장해서 디스크나 보조 저장 장치 등 외부 자원에 복제 가능합니다 시간 상 이전으로 돌아가길 원한다면 가상 머신 되감기도 가능합니다 바로 이전 상태로요 이 기능으로는 수많은 것들이 가능한데요 이걸 실행시켜 볼게요 여기서는 macOS Sonoma를 실행 중입니다 제 데스크톱이 가상 Mac으로 Virtualization 샘플 앱에서 macOS Sonoma를 실행시키고 있죠 Apple Store로 가는 길을 찾고 있는 중이었는데요 지도를 열어 놓고 AirPods에 관한 정보를 공식 홈페이지에서 찾고 있었죠 이제 가상 머신을 끄지 않고 그냥 잠시 쉬고 싶습니다 그래서 앱을 끌 때 가상 머신을 저장하죠
나중에 앱을 재구동하면 가상 머신이 중단한 지점에서 실행을 재개합니다 모든 탭이 그대로 열리죠 이걸 앱에 구축하는 방법을 알아볼까요?
가상 머신 저장 전에 우선 정지시켜 주세요 가상 머신을 정적 상태로 만들어 실행을 중단하는 겁니다 다음으로 saveMachineState API를 호출하고요 이건 여러분이 지정하는 URL에 파일을 씁니다 가상 머신의 모든 런타임 상태를 포함하죠 이후 실행을 게속하기 위해 필요한 모든 걸요 디스크 이미지 등 외부 자원은 별도로 복사해야 합니다 가상 머신을 저장했으니 복구해 보도록 할게요
가상 머신 상태를 복구하기 위해서는 동일 구성에서 VZVirtualMachine을 만드는 것부터 하면 됩니다
가상 머신을 바로 시작하는 대신 즉, 가상 머신을 콜드부팅하는 대신 새로운 restoreMachineState API를 호출하는 거죠 그래서 이전에 저장된 파일의 URL을 통과시키는 겁니다 이제 가상 머신은 이전과 완전 동일한 상태입니다
중단한 지점부터 바로 재시작할 수 있죠 이전 저장 상태로 가상 머신을 복구하는 경우에는 몇 가지를 기억하셔야 합니다 저장 파일에는 가상 머신 데이터가 들어있는데요 이건 보호되어야 합니다 이 파일들은 하드웨어 암호화되어 가장 강력한 보증을 제공하죠 다른 Mac이나 사용자 계정에서 다른 사용자의 저장 파일 읽기나 가상 머신 복구는 불가능합니다 오늘 저장된 파일은 버전화되기도 하고요 그래서 새로운 기능을 향후 추가할 수 있습니다 만약 파일 형식이 바뀌어 저장 파일 복구가 불가능하다면 프레임워크는 앱이 처리 가능한 특정 오류 코드를 반환합니다 그럼 그 파일은 버려지고 가상 머신을 재부팅하죠 그럼 다시 정상이 됩니다 이제 가상 머신 구축의 새로운 방식을 살펴보죠 먼저 Network 블록 디바이스입니다 이건 저장 장치 디바이스가 네트워크를 통해 가상 머신에 첨부되도록 하는데요 다음은 NVMe 컨트롤러 디바이스 지원입니다 virtio 블록 디바이스의 대안이죠 마지막으로 Mac 키보드입니다 Globe 키 같은 Apple 전용 키를 가상 머신을 통해 직접 매핑하여 가상 Mac에서 더 직관적인 작업이 가능해집니다 먼저 Network 블록 디바이스부터 보겠습니다 Virtualization 프레임워크에서는 저장이 보통 로컬로 이루어져서 동일한 Mac의 디스크 이미지를 읽고 씁니다 하지만 macOS Sonoma에서는 이 프레임워크가 서버에서 저장 장치를 원격 제공하죠 이걸 가능케 하는 프로토콜이 Network 블록 디바이스 즉, NBD입니다 작동 원리를 더 자세히 살펴 볼까요? 이 프레임워크에서는 NBD의 클라이언트 측을 구현하는데요 가상 머신이 디스크에 접근하면 동일한 사양을 준수하는 NBD 서버에 요청이 전송됩니다 NBD 서버는 I/O가 필요한 걸 하고 나서 데이터로 응답하죠 이건 두 가지 이유에서 굉장히 유연합니다 먼저 저장 장치가 동일한 Mac 어디에든 있을 수 있다는 점인데요 네트워크를 통해 원격 서버에도 있을 수 있습니다 두 번째로 저장 공간이 자체 서버에서 관리되면 원하는 커스텀 I/O를 구현할 수 있다는 겁니다 커스텀 이미지 포맷도 물리적 드라이브까지도요 이 모든 건 가상 머신에 대해 완전히 투명하게 이루어지죠 이렇게 설정하는 방법을 알아볼까요? Virtualization 프레임워크 API에서는 저장 장치 디바이스 초기화에 두 부분이 있는데요
먼저 디바이스 유형을 선택하세요 이건 가상 머신에 제시되는 인터페이스를 정의합니다 그다음 첨부 파일을 선택하세요 이건 데이터가 실제로 Mac에서 어떻게 표현될지 택하는 겁니다 가상 머신에서는 믹스 앤 매치가 가능하죠 Virtualization 프레임워크는 virtio 블록 디바이스나 USB 대용량 저장 장치 같은 가상 디바이스를 지원합니다 이 기기들로는 디스크 이미지 첨부 같은 첨부를 사용할 수 있습니다 그럼 디스크 이미지에 데이터를 읽고 쓰죠 아니면 새로운 Network Block Device 첨부도 가능합니다 이건 NBD 서버에서 데이터를 읽고 쓰죠 코드에서 이 NBD 첨부를 설정해 보죠 이걸 앱에서 사용하기 위해서는 NBD 서버를 가리키는 URL부터 지정해 주세요 특정 서버에서 특정 디스크를 식별하는 특수 URL입니다 이제 이 URL로 새 NBD 저장 첨부를 초기화하세요 그리고 이 첨부로 저장 장치 디바이스를 초기화하세요 여기서는 virtio 블록 디바이스를 사용했습니다 대부분의 경우 성능 기준에 가장 부합할 가능성이 높습니다 저장 공간이 네트워크를 통해 제공되기 때문에 연결은 언제든지 끊어질 수 있고요 이런 일이 발생했을 때 조치를 취하고 싶다면 가상 머신을 중단하거나 다시 연결해 보세요
이 경우 커스텀 델리게이트 클래스를 첨부할 수 있습니다 연결 상태가 바뀌면 알려주기 때문에 필요한 코드가 무엇이든지 실행시킬 수 있죠 Virtualization 프레임워크의 다른 추가 저장 장치 옵션은 비휘발성 기억 익스프레스 NVMe입니다 NVMe는 Linux 커널에서 활성화되는 표준 기술인데요 이 앱은 더 구체적입니다 우선 이걸 왜 사용해야 하는지부터 살펴보죠 사용 사례 대다수에서 virtio 블록 스토리지가 제공하는 반가상화 인터페이스가 사용하기 가장 쉽고 빠릅니다 이건 확실히 가상 Mac에서도 그렇고요 하지만 Linux 가상 머신은 virtio 드라이버를 가지고 있지 않죠 가상 환경 실행에 구축되지 않는 커널일 수 있습니다 이 커널들은 보통 NVMe 컨트롤러 디바이스 드라이버를 가지는데요 macOS Sonoma에서는 Virtualization 프레임워크에 의해 이들이 모방되어 더 많은 운영 시스템이 가상 머신에서 돌아가게 하죠 NVMe 구성을 위해 가상 머신 구축 시 새 디바이스 유형을 사용하세요 NVMe는 Linux 가상 머신에만 쓸 수 있어 당연히 NBD도 지원합니다 이제 Mac 키보드를 보죠 Apple 전용 키프레스는 가상 Mac에서 포착됩니다 가상 Mac에서도 Globe 키를 사용해 언어 변환 같은 기능을 쓰거나 이모티콘을 쓸 수 있다는 거죠 이제 Rosetta 2에 대해 알아볼게요 Rosetta 2는 Linux 가상 머신으로 macOS에서 사용되는 기술과 동일합니다 macOS Sonoma에서 성능 개선이 이루어졌다는 건 가상 Linux 환경에서 실행이 훨씬 빠르다는 겁니다 어떻게 가능한 일인지 한번 살펴보죠
Rosetta 2는 실행 가능한 페이지를 요청 시 번역합니다 그래서 x86_64 앱 전체가 번역될 때보다 실행 가능한 앱을 더 빠르게 구동할 수 있죠 이건 앱이 실행 중일 때에도 Rosetta 2가 주기적으로 실행을 멈추고 새로운 코드 영역을 번역해야 한다는 뜻입니다 이 오버헤드는 앱이 실행을 시작했을 때 가장 눈에 띄기 쉽죠 코드가 처음으로 번역되어야 하기 때문입니다 하지만 동일 라이브러리에 연결된 다른 앱을 구동하거나 동일한 실행 가능 앱을 구동한다면 Rosetta 2는 그 작업을 전부 다시 해야 합니다 코드가 이미 번역되어 있더라도요 그리고 이 문제는 캐싱으로 해결됩니다 라이브러리나 실행 가능 이진이 번역되면 Rosetta 2는 디스크 캐시에 결과를 저장하고 그게 필요한 다른 앱에 그 결과를 공유하여 불필요한 재번역 오버헤드를 피할 수 있죠 macOS Sonoma에서 Virtualization 프레임워크는 이 Linux 가상 머신 최적화를 새로운 런타임 상주 프로그램에 가져옵니다 여기서 설정에는 두 단계가 필요한데요 먼저 Rosetta 2 런타임과 새 캐싱 상주 프로그램 사이의 커뮤니케이션 채널을 구성하는 새 API가 있습니다 그다음 가상 머신에서 그 프로그램을 구동하면 되고요 이제 Rosetta 2 런타임과 새 상주 프로그램은 가상 머신에서 함께 실행될 겁니다 두 프로그램은 Virtualization 프레임워크와 소통하여 연결을 확립하죠 특히 동적 링커 요청은 상주 프로그램으로 전송돼 그 캐시를 관리하고 Rosetta 2 런타임은 이전에 번역된 바이너리를 상주 프로그램에서 직접 가져와서 재번역 오버헤드를 제거할 겁니다 특히 컴필레이션이나 패키지 설치와 같은 실행이 과한 태스크에 가장 큰 영향을 주죠 이렇게 Virtualization 프레임워크를 통해 아주 좋은 옵션들을 앱에 선사할 수 있습니다 시작 방법을 다시 한번 정리해 보죠 가상 Mac과 Linux 가상 머신에 크기 조절 가능 디스플레이 사용을 고려하세요 코드 한 줄로 사용자 경험을 상당히 개선할 수 있습니다 Mac 키보드는 특별히 디자인되어 최신 가상 Mac과 매끄럽게 작동합니다 이 디바이스로 가상 Mac을 구성하는 건 사용자 경험 극대화가 가능한 아주 쉬운 방법이고요 이러한 기능 몇 가지로도 강력한 경험을 구축할 수 있습니다 가상 머신 저장 기능이 하나의 예죠 진행 상태 되감기와 저장을 앱에 어떻게 가져올지 한번 탐색해 보시길 바랍니다 NBD가 제공하는 유연성은 가히 놀랍죠 NBD는 커스텀 I/O가 필요한 앱에 무한한 가능성을 열어줍니다 여기까지 시작에 불과합니다 감사합니다 Virtualization 팀에서는 여러분의 활약을 기대하겠습니다 ♪ ♪
-
-
1:58 - Set display as resizable
// virtualMachine is a VZVirtualMachine. let virtualMachineView = VZVirtualMachineView() virtualMachineView.virtualMachine = virtualMachine virtualMachineView.automaticallyReconfiguresDisplay = true
-
4:20 - Save a virtual machine
// virtualMachine is a running VZVirtualMachine. try await virtualMachine.pause() let saveFileURL = URL(filePath: "SaveFile.vzvmsave", directoryHint: .notDirectory) try await virtualMachine.saveMachineStateTo(url: saveFileURL)
-
4:58 - Restore a virtual machine
let configuration = VZVirtualMachineConfiguration() // Customize configuration. let virtualMachine = VZVirtualMachine(configuration: configuration) let saveFileURL = URL(filePath: "SaveFile.vzvmsave", directoryHint: .notDirectory) try await virtualMachine.restoreMachineStateFrom(url: saveFileURL) try await virtualMachine.resume()
-
9:28 - Configure a Virtio block device with the NBD attachment
let url = URL(string: "nbd://localhost:10809/myDisk")! let attachment = try VZNetworkBlockDeviceStorageDeviceAttachment(url: url) let blockDevice = VZVirtioBlockDeviceConfiguration(attachment: attachment)
-
10:02 - Respond to events with a delegate with the NBD attachment
let url = URL(string: "nbd://localhost:10809/myDisk")! let attachment = try VZNetworkBlockDeviceStorageDeviceAttachment(url: url) // NetworkBlockDeviceAttachmentDelegate implements the delegate protocol. let delegate = NetworkBlockDeviceAttachmentDelegate() attachment.delegate = delegate let blockDevice = VZVirtioBlockDeviceConfiguration(attachment: attachment)
-
-
찾고 계신 콘텐츠가 있나요? 위에 주제를 입력하고 원하는 내용을 바로 검색해 보세요.
쿼리를 제출하는 중에 오류가 발생했습니다. 인터넷 연결을 확인하고 다시 시도해 주세요.