Windows 8 개발 이야기를 하면서 빼놓을 수 없는 것이 바로 WinRT에 대한 것입니다. 사실, WinRT는 Windows 8 Metro Style App 개발의 전부라고 해도 과언이 아닙니다.

 

그래서, 이번 글에서는 WinRT에 대해서 간략히 살펴보도록 하겠습니다.

 

 

 

다음 그림은 Microsoft의 Windows 8 개발 관련 PPTX에 자주 등장하는 거의 공식적인(?) Windows 8 플랫폼의 구조도입니다.

 

Structure_2.png

 

 

위 그림에 따르면 메트로 스타일 앱을 만드는 방법에는 XAML을 이용하는 것과 HTML/CSS를 이용하는 방법이 있군요.

XAML을 이용하는 경우에는 C++/C#/VB를 사용할 수 있으며, HTML/CSS를 이용하는 경우에는 JavaScript로 개발하게 됩니다.

그리고 바로 아래에 WinRT가 있어서 어떤 언어를 사용하더라도 WinRT의 API를 사용하도록 되어 있군요.

 

위 그림에서 Metro Style APP 영역과 Desktop Apps 영역의 색깔이 다르죠? 이 두 영역 사이에는 너무나 큰 간격이 있어서 양쪽을 오갈 수 없습니다. 즉, 두 영역이 서로 상관없이 완전히 따로 논다는 것이죠.


 

WinRT는 Windows Runtime의 약자입니다. WinRT는 메트로 스타일 앱 개발을 위한 새로운 Windows API입니다. 메트로 스타일 앱을 만드는데 있어서 WinRT는 마치 데스크탑 어플리케이션 개발에서의 Win32와 같은 역할을 수행한다고 볼 수 있지요.

 

 

 

자 그럼 여기서 질문 하나, WinRT는 새로운 .NET Framework일까요?

 

현재까지 조사해본 바에 따르면 WinRT는 COM 기반의 Native API입니다. WinRT는 C언어 기반의 오래된 Win32 API는 달리 객체지향을 기반으로 하여 현대적으로 설계되었으며 C++로 만들어졌다고 하는군요. 그리고 COM 기반으로 하는 Native API라고 합니다.

 

즉, WinRT가 .NET Framework의 영향을 많이 받긴 했지만 .NET Framework 그 자체는 아니라는 것이지요.

 

 

 

그럼, Windows 8에서 .NET Framework은 어디로 갔을까요?

 

다음 그림을 봅시다. (출처: http://dougseven.com/2011/09/15/a-bad-picture-is-worth-a-thousand-long-discussions/)

 

Structure-Modified_2.png

 

 

 

 

위 그림은 Windows 8 개발과 관련하여 좀더 상세하고 정확하게 보여주는 그림입니다.

위 그림에 따르면 C#/VB로 메트로 스타일 앱을 개발할 때는 .NET Framework 4.5를 이용한다고 되어 있네요. 그런데, 오른쪽 데스크탑 쪽에도 .NET 4.5가 보입니다. 어떻게 된 일일까요?

 

 

.NET Framework 4.5에는 .NET Metro Profile이라는 것이 추가되었습니다. C#/VB로 메트로 스타일 앱을 개발할 때는 데스크탑용 Full .NET Framework 4.5 대신 .NET Metro Profile이라는 서브셋만을 사용하게 됩니다. 참고로 데스크탑용 .NET 프로그램을 개발할 때는 .NET Client Profile을 사용하게 됩니다. 즉, WinRT는 메트로 스타일 앱 개발 시 기존의 Win32와 유사한 역할을 수행하며 그 위에서 .NET Framework 4.5 Metro Profile이 작동하고 있는 것이 됩니다.

 

 

 

 

그럼, 여기서 질문 하나 더 해보죠. WinRT는 Win32를 대체하는 걸까요?

 

이 질문에 대한 답은 적어도 x86에서는 아니라는 겁니다. 여러 사람들이 이 문제에 대해서 조사를 해봤는데 x86 CPU에서 Windows 8 Metro Style App을 실행해보면 기존 데스크탑 응용 프로그램과 같이 Win32용 DLL들을 로딩한다고 합니다. 즉, x86 CPU 상에서는 WinRT는 Win32 API 상에서 작동한다고 볼 수 있겠네요.

 

그런데, Windows 8은 x86 뿐만 아니라 ARM Core CPU도 지원한다고 하고 있죠. 아직 ARM Core CPU용 Windows 8이 공개가 되지 않았기 때문에 단정할 수는 없겠지만, 개인적으로 ARM Core CPU에서는 WinRT가 Win32를 대체하는 그런 느낌으로 사용될 것으로 예상하고 있습니다. ARM Core CPU애서는 Win32 API가 작동하지 않으니까요.

 

 

 

정리하면, WinRT는 메트로 스타일 앱을 위한 새로운 Windows API라고 보시면 되겠습니다.
마치 “새 술은 새 부대에” 같은 느낌이군요^^

 

 

 

 

 

WinRT는 .NET Framework만 지원하는 것이 아니라 다른 언어에서도 사용이 됩니다.

  

매트로 스타일 앱은 크게 다음 3가지 방법으로 개발될 수 있습니다.

 

Tools_2.png

 

 

 

당연하게도 C#/VB + XAML 개발이 가능합니다. 이 경우 .NET Framework 4.5 Metro Profile을 이용하며 WPF/Silverlight 개발과 매우 유사합니다. (사실 WPF보다는 Silverlight와 더 유사합니다.) 이 경우 컴파일한 결과는 *.exe로 생성이 되는데, 이렇게 생성된 exe 파일은 데스크탑 모드에서는 실행되지 않습니다. 윈도우 탐색기에서 exe를 더블클릭해보면 다음과 같이 경고 메시지만 뜹니다. 즉 메트로 스타일 앱의 exe는 반드시 Metro UI를 통해서만 실행이 됩니다.

 

image_2.png

 

 

 

 

사실, Window 8로 넘어오면서 가장 덕을 보는 사람들이 바로 WPF/Silverlight 개발자가 아닌가 싶습니다. 물론, WPF와 Silverlight의 XAML이 차이가 있는 것처럼 메트로 스타일 앱의 XAML도 WPF/Silverlight와 차이가 있습니다. 하지만 기본적인 내용은 거의 같기 때문에 WPF나 Silverlight를 해본 사람이면 단시간 내에 메트로 스타일 앱 개발자가 될 수 있습니다. 그 중에서도 Silverlight 개발자가 가장 빨리 익숙해질 수 있습니다.

 

 

Windows Phone7과 달리 C++도 지원합니다. C++로 개발 시 XAML도 사용할 수 있지만 아마도 C++은 주로 DirectX를 이용할 때 주로 사용되지 않을까 싶네요. 모바일 개발자 중 C++ 개발자 비중이 많은 현실이다 보니 C++ 지원은 꽤나 중요할 듯 싶습니다.

 

 

마지막으로, WinRT에서는 HTML5/JavaScript 개발도 지원합니다. 이 경우 개발되는 Metro Style App은 *.appx라는 압축 파일 안에 패키징 되며 Metro 버전의 IE 상에서 작동하게 됩니다. HTML5로 메트로 스타일 앱을 만들 수 있다는 것은 매우 중요한 의미를 가집니다. HTML5로 메트로 스타일 앱을 개발할 때는 WinJS라는 메트로 스타일 앱 전용 자바스크립트 라이브러리를 사용해야 하기 때문에 기존 Javascript코드를 100% 재활용할 수는 없지만 분명 기존 소스를 어느 정도는 재활용할 수 있고, 무엇보다도 이미 익숙한 HTML과 JavaScript로 앱을 개발할 수 있다는 점에 수많은 잠재 개발자를 확보하게 되는 것이죠. 즉, Windows 8의 생태계를 단시간 내로 확장하고 견고하게 만들 수 있는 것입니다.

 

 

그런데, 위 3가지 개발 모두 밑단에서는 결국 WinRT의 API를 사용합니다. 그리고 컴포넌트도 공유할 수 있습니다. 즉, 어떤 WinRT용 컴포넌트를 개발했다면 C#/VB/C++/JavaScript에서 모두 사용할 수 있다는 겁니다. 단, 이처럼 다양한 언어에서 호출이 가능하려면 WinRT 컴포넌트에 맞게 개발을 해야 합니다. 이 부분은 아직 상세히 공부하지 못했는데, 예를 들면 C#으로 개발할 경우 C#의 모든 데이터 타입을 컴포넌트 API로 노출할 수 없고, WinRT에서 공용으로 사용할 수 있는 데이터 타입만을 사용해야 하는 걸로 알고 있습니다. 데스크탑 개발에서 COM 컴포넌트 만들면 여기저기에서 사용할 수 있었는데, 이 때 COM 인터페이스에 맞게 컴포넌트를 개발해야 하는 것과 비슷한 느낌이네요.

 

 

 

아직까지는 Windows 8이 정식 출시되지 않아서 서드파티 컨트롤이 전혀 없지만 Windows 8 정식이 출시되면 매우 다양한 컴포넌트들이 출시가 되어 어떤 언어로 개발하더라도 쉽고 빠르게 개발할 수 있게 되지 않을까 싶습니다. 마치 데스크탑 응용 프로그램을 위한 수많은 ActiveX 컴포넌트나 .NET 컴포넌트들이 있었던 것처럼 말입니다.

 

 

사실 Metro Style App을 개발할 때 WinRT에 대해서 직접적으로 몰라도 만들 수는 있을 겁니다. 하지만 데스크탑 응용 프로그램을 만들다 보면 Win32 API에 대해서 알 필요가 있는 경우가 많은 것처럼, Metro Style App 개발을 하다 보면 WinRT에 대해서 어느 정도 알아야 할 필요가 있지 않을까 싶네요. 아직은 초기 단계라서 WinRT에 대한 정보가 매우 부족하지만 시간이 지남에 따라 “Windows API 정복”과 같은 책처럼 “WinRT API 정복”과 같은 책이 나올지도 모르겠네요.

 

 

한 가지 좋은 소식이 있는데, “Programming Windows’로 유명한 찰스 펫졸드 아저씨가 “Programming Windows” 6th 에디션을 준비중이라고 합니다. 이번 책에서는 C#과 XAML로 Windows 8 메트로 스타일 앱 개발에 대한 내용이 된다고 하는군요. 무척이나 기대가 됩니다.

http://www.charlespetzold.com/blog/2012/02/Programming-Windows-6th-Edition.html





profile