Windows 개발 플랫폼 통합과 크로스 플랫폼 앱 개발
디바이스가 점점 다양해지고 멀티 스크린 환경이 되면서, 사용자들은 서로 다른 플랫폼에서 같은 앱을 이용하는 것을 당연하게 받아들이고 있습니다. 그러나 파편화된 플랫폼으로 인해서 개발자가 서로 다른 플랫폼을 넘나들며 개발을 하기에는 여전히 어려운 상황입니다.
마이크로소프트는 앱 개발자들이 더욱 편리하게 멀티 스크린 앱을 개발할 수 있도록 Windows 개발 플랫폼 통합 작업을 몇 년에 걸쳐 진행해 왔고 Build 2014에서는 그 결과물인 Universal Windows App을 발표하였습니다. 또한, 타 플랫폼에서도 C#으로 앱을 개발할 수 있도록 크로스 플랫폼 앱 개발 솔루션인 Xamarin을 공식적으로 지원하기 시작했습니다.
이 글에서는 통합된 Windows, Windows Phone 앱 개발 플랫폼에 대해서 살펴 보고, Android와 iOS 앱을 C#과 .NET Framework 으로 개발하는 방법을 알아 봅니다.
개발자를 위한 하나의 Windows 앱 개발 플랫폼
Build 2014에서는 Windows와 Windows Phone 앱 간에 코드를 공유하는 Universal Windows App, 스토어와 앱 아이덴터티의 통합을 발표하였습니다. 이러한 변화로 인해서 서로 다른 스토어에 동일 앱을 개발하는 생산성이 높아졌으며 최종 사용자 경험을 개선할 수 있습니다.
Universal Windows App은 하나의 프로젝트에서 Windows와 Windows Phone 앱을 모두 개발할 수 있는 새로운 앱 개발 프로젝트를 말합니다. Universal Windows App은 이번 Windows Phone 8.1 업데이트를 통해 가능하게 되었는데, 그 바탕에는 Windows 8에서 처음 소개된 Windows Runtime(줄여서 WinRT)API들이 Windows Phone 8.1에서 완벽하게 이식되었기 때문입니다. 마이크로소프트는 Windows Phone 7.5에서부터 이러한 플랫폼 통합을 진행해 왔고, Universal Windows App은 플랫폼 통합의 결과물이자 완성 단계라고 할 수 있습니다.
Windows 8의 WinRT앱와 달리, 이전 Windows Phone 8.0에서는 Silverlight 앱으로 개발을 했고 일부 WinRT API만 사용할 수 있었습니다. Silverlight앱과 WinRT 앱 모델, API 구성, UI 컨트롤의 차이로 인해서 기존의 C# 및 XAML 코드를 재활용하는 것이 상당히 복잡했습니다. 하지만, WinRT API가 Windows Phone 8.1에 완전히 적용이 되고 WinRT 앱을 개발할 수 있게 되면서 동일한 코드를 재사용하는 것이 가능해졌고, 단순한 코드 재사용 뿐 아니라 공유 프로젝트를 통해서 단일 코드를 사용하는 것도 가능하게 되었습니다.
개발자들은 두 플랫폼에서 완전히 동일한 코드를 사용할 수 있습니다. 90% 이상의 WinRT API가 Windows와 Windows Phone 플랫폼에서 동일하게 지원되고, 스크린 사이즈에 따라 같은 UI컨트롤의 표시 방식을 자동으로 변경합니다. 단, PC와 폰의 사용 환경 차이로 인한 기능의 차이가 있기 때문에 10% 이하의 플랫폼 고유의 API는 다른 코드를 사용해야 하고, 디바이스에 최적화된 경험을 제공하고자 하는 경우 UI 코드도 일부 다르게 분기 구문 등을 이용해서 다르게 구성할 수 있습니다.
Visual Studio 2013 Update 2 이상 버전에서는 Universal Windows App을 개발할 수 있는 프로젝트 템플릿을 제공하여, 처음 시작하는 개발자가 손쉽게 두 가지 플랫폼 앱을 동시에 개발할 수 있도록 지원합니다. (개발 툴에서 실제 Universal Windows App 프로젝트를 생성하는 방법은 Visual Studio 주제의 포스팅을 참고하시기 바랍니다.)
개발자를 위한 Windows통합은 앞서 언급했듯이, 개발 플랫폼 뿐만 아니라 스토어의 통합도 함께 이루어 져야 합니다. 이를 위해서 마이크로소프트는 개발자가 두 가지 플랫폼 앱을 개발할 때 하나의 스토어 계정으로 할 수 있도록 통합하였고, Windows와 Windows Phone 스토어 간에 같은 앱을 인식할 수 있도록 앱 아이덴터티를 통합하였습니다.
통합된 아이덴터티를 통해서 개발자는 사용자로 하여금 한번 결제한 앱을 다시 구매 하지 않도록 할 수 있으며, 앱 간에 클라우드를 통한 데이터 로밍이 가능하고, 단일 푸시 알림 서비스를 사용하여 앱을 효과적으로 운영할 수 있게 되었습니다.
하나의 Windows 개발 환경을 통해서 개발자들은 멀티 스크린 앱 개발의 생산성을 높이고, 편리하게 앱을 관리할 수 있을 뿐 아니라, 더 나은 사용자 경험을 제공할 수 있게 되었습니다.
크로스 플랫폼 앱 개발
잘 알려지지는 않았지만 C#과 .NET API를 이용해서 Android나 iOS와 같은 타 플랫폼 앱도 개발할 수 있습니다. 실제로 해외에서는 C#을 이용한 크로스 플랫폼 프로젝트를 진행한 성공적인 비즈니스 앱 사례 들이 있습니다.
Figure 1 인터넷 라디오 Rdio의 사례
Figure 2 Kimberly Clark의 영업직 아이패드 앱 사례
이러한 사례들은 크로스 플랫폼 앱 개발 솔루션인 Xamarin 을 이용하여 개발하였습니다. Xamarin은 C# 코드와 .NET API를 이용해서 Android와 iOS 네이티브 앱을 개발하는 솔루션이자 이를 서비스하는 회사 이름입니다. Xamarin에 따르면, 현재 3만 여개의 고객사와 50만 명의 개발자가 그들의 솔루션을 사용하고 있다고 합니다.
마이크로소프트가 Xamarin와 협력하는 이유는, Xamarin이 .NET Framework를 Windows 외의 플랫폼에서 사용할 수 있도록 하는 오픈소스 프로젝트들에 기반하고 있으며, C# 개발자들이 다양한 크로스플랫폼에서 앱을 개발할 수 있도록 기회를 제공하고 있기 때문입니다.
마이크로소프트는 차세대 C# 및 VB 컴파일러 플랫폼인 Roslyn을 오픈소스화 하면서 .NET Foundation을 설립하는데 Xamarin 과 협력하고 있다고 Build에서 발표하였습니다. Xamarin은 서로 다른 디바이스 환경에서 동일한 API를 사용할 수 있도록 하는 Xamarin Mobile, 크로스 플랫폼 인증 API인 Xamarin.Auth등의 6가지 오픈소스 프로젝트를 통해 .NET Foundation에 기여하기로 하였습니다.
현재 Visual Studio 2013을 이용하면 Xamarin으로 개발한 Android와 iOS 앱에 기존 Universal Windows App의 공유 코드를 사용할 수 있습니다. 즉, 개발자들은 Windows와 Windows Phone 뿐만 아니라 타 플랫폼에서도 같은 C# 코드를 사용할 수 있다는 뜻입니다. 물론, Android와 iOS는 Windows에서 처럼 XAML UI를 사용하지 않기 때문에 UI 단계나 폰의 기능을 구현하는 API 단계에서는 다른 코드를 작성할 수 밖에 없습니다. 하지만 Java나 Object C를 새로 배우거나 혼용하지 않고도 C# 만으로도 각 플랫폼의 Native 기능을 100% 활용할 수 있습니다.
마이크로소프트는 Build 2014의 C#과 .NET의 향후 방향으로 Open, Cross Platform, Native를 제시했습니다.
이제 개발자들은 새로운 Universal Windows App프로젝트와 Xamarin을 통해서 플랫폼에 관계없이 멀티 스크린 앱을 C#과 WinRT/.NET API를 이용해서 개발할 수 있으며 같은 코드를 사용하는 공유 프로젝트가 가능해져 더욱 생산성을 높일 수 있게 되었습니다.