Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

  • Korea Evangelist

    Build 2015 Day 2 Keynote 요약

    • 0 Comments

    clip_image002

    다양한 분야의 개발자들은 마이크로소프트의 기술들을 활용하여 다양한 결과물들을 만들어 내고 있습니다. 빌드 둘째 날은 바로 이런 개발자들의 이야기를 들어보는 시간이었습니다.

    clip_image004

    미디어 분야를 예로 든다면 Muzik 팀은 낮은 Latency에서 동작할 수 있도록 새롭게 추가된 AudioGraph를 활용한 가상 드럼 세트를 만들어 냈으며, Propellerhead와 같은 회사는 클라우드와 다양한 디바이스를 이용하여 음악을 만드는 제품을 만들어 냈습니다.

    빌드 첫째날 생중계를 시청하신 분이 30만명에 이르고, 7만5천명이 동시시청을 하였으며, 최근 수퍼볼 경기에서는 마이크로소프트의 미디어 기술을 이용하여 120만명이 동시에 스트리밍 미디어를 시청하였다고 합니다. 이 모두가 마이크로소프트의 기술을 활용하여 서비스 되고 있습니다.

    clip_image006

    Autodesk와 같은 회사는 프로토타이핑과 프린팅 분야에서 마이크로소프트의 기술을 활용하고 있습니다. Acumatica와 같은 회사는 클라우드 기반의 ERP 시스템을 개발 하였는데 ORM과 OData 기술을 이용하기 때문에, 손쉽게 PowerBI와 연동하여 데이터를 분석하고 다양한 방식으로 결과를 살펴볼 수 있는 기능을 제공하고 있습니다

    clip_image008

    Universal Windows Platform은 Desktop, Xbox, Surface Hub, Holographic, IoT, Mobile과 같은 다양한 분야에서 활용할 수 있는 단일의 개발 플랫폼입니다. 이처럼 다양한 디바이스들은 디스플레이 장치, 키보드, 마우스, 센서, 터치 등 다양한 peripheral과 결합되어 더욱더 개인화된 컴퓨팅 환경을 만들어 냅니다. 마이크로소프트는 이러한 다양성을 극복하는 단일의 플랫폼과 함께 단일의 디자인, 개발, 디버깅, 배포 환경을 제공합니다.

    clip_image010

    디자인 단계에서 Universal Windows Platform이 제공하는 모든 컨트롤들은 마우스, 터치, 펜, 게임 컨트롤러에 이르기까지 다양한 입력 방식에도 올바르게 동작하도록 개발 되어 있으며, 단 하나의 디자인 방식을 유지하고 있기 때문에, 단일의 코드로 다양한 디바이스를 지원할 수 있습니다. 더불어 개발자는 개별 디바이스의 특성에 맞추어 가장 적합한 형태로 사용자의 인터페이스를 맞춤형으로 구성할 수도 있습니다.

    clip_image012

    개발자들은 Universal Windows Platform을 이용하기 때문에 디바이스의 다양성에도 불구하고 동일한 플랫폼 특성과, 단일의 API를 공유하게 됩니다. XAML, DirectX, HTML/CSS와 같이 이미 익숙한 방식으로 UX를 디자인하고 개발할 수 있으며, C#/VB, C/C++, JavaScript와 같이 다양한 언어들을 사용할 수 있습니다. 뿐만 아니라 Feature Detection이나 Extension API 등의 이용하면 디바이스별 고유 특성을 세부적으로 제어할 수도 있습니다. 이렇게 개발된 앱은 다양한 디바이스에서 활용될 수 있는 단일의 패키지로 구성될 수 있습니다. Windows 10에는 2,500개 이상의 플랫폼 기능이 새롭게 추가되었으며, 이에 따라 8,000개 이상의 API가 추가 되었습니다.

    clip_image014

    Visual Studio 2015를 사용하면 각각의 디바이스에서 앱 들이 어떻게 나타날지를 미리 살펴보고 조정할 수 있습니다. 새로운 Visual Tree를 사용하면 수행 중인 앱의 구성 요소도 살펴볼 수 있으며, 웹 개발의 경우 F12 개발툴도 빼놓을 수 없는 디버깅 기능입니다. 뿐만 아니라 디버거를 떠나지 않고 PerfTip, CPU & Memory 사용률 그래프 등을 이용하여 성능 문제를 분석하고, 다양한 지표를 살펴보면서 최적화를 수행할 수 있습니다.

    clip_image016

    한번의 앱 제출과 인증 과정을 거치면 모든 디바이스에 배포가 가능하고, 이 과정에서 앱의 다운로드 수나 유료 판매 현황 등을 분석할 수 있습니다. 또한 앱 인사이트와 결합하여 앱 사용 추의를 살펴본다거나 특정 기능을 사용자가 얼마만큼 자주 사용하고 있는지 등을 살펴볼 수 있으며, 캠페인 기능도 추가되어 캠페인을 수행하고 그 결과를 실시간으로 조회할 수도 있습니다.

    clip_image018

    유니버셜 앱 플랫폼을 사용하는 또 다른 방법도 다양하게 제공합니다. 가장 먼저 알아볼 것은 첫째 날 키노트에서 발표한 Microsoft Edge입니다. Microsoft Edge는 4,200개 이상의 상호운용을 위한 기능과 45개 이상의 새로운 웹 표준 기술을 새롭게 탑재하였습니다. 기능의 확대에 더하여 성능도 대폭 향상되었습니다. 애플의 JetStream 벤치마크나 Google의 Octane 벤치마크 결과를 통해 Microsoft Edge가 IE11 보다 2배나 나은 성능을 보여주고, Chrome(43.0.2369.0), FireFox(Alpha 40.0a1) 보다 높은 성능을 보여주는 것을 확인할 수 있었습니다.

    clip_image020

    Microsoft Edge에서 정상적으로 동작하는 모든 웹사이트들은 수정 없이 앱으로 전환될 수 있는데, 이 과정에서 Xbox Live를 활용하도록 기능을 추가하거나 Cortana와 연동하여 기능을 풍성하게 확장할 수 있습니다. 이미 Shazam과 같은 회사는 이러한 방식으로 기능을 확장하여 음악 인식 앱을 성공적으로 만들고 있습니다.

    clip_image022

    마이크로소프트의 전통적인 응용 프로그램 개발 기술인 WPF나 WinForm을 사용하는 .NET 응용 프로그램, Win32를 사용하는 응용 프로그램 조차도 UWP를 사용하도록 코드를 추가할 수 있을 뿐 아니라 Appx로 패키징 하여 윈도우 스토어에 제출하고, 이를 통해 배포될 수 있습니다.

    clip_image024

    Java와 C++이용하여 개발한 안드로이드 앱도 기존 코드를 재활용 하여 손쉽게 윈도우 앱으로 변경할 수 있습니다. 기존에 사용하던 Java 개발도구를 그대로 사용할 수 있으며, 라이브 타일과 같은 UWP 고유의 기능을 사용할 수도 있습니다. Google의 위치 정보 서비스나, Google Map, Google 통지 서비스를 사용하는 부분은 마이크로소프트의 위치 정보 서비스와 Bing Map, Microsoft 통지 서비스를 사용하도록 하부 시스템 수준에서 리다이렉션을 수행 하도록 변경됩니다. 뿐만 아니라 Objective C를 이용하여 개발된 iOS 앱은 Visual Studio 내에서 재컴파일을 수행하여 윈도우 앱으로 만들 수 있습니다.

    clip_image026

    Cordova와 같은 기술을 이용하면 HTML/JavaScript와 같은 기반기술을 이용하여 동일한 코드로 윈도우나 안드로이드, iOS에서 수행되는 앱을 손쉽게 만들 수 있습니다. HTML/JavaScript 기술을 활용하는 웹앱의 디버깅 기능을 지원하기 위해서 마이크로소프트 Vorlon 이라는 도구를 만들었을 뿐 아니라 고성능 웹 개발을 위해서 asm.js를 지원합니다.

    clip_image028

    소스 공유와 관리는 개발자에게 매우 중요합니다. 이제 GitHub Enterprise를 쓰고 싶으신 분도 Azure를 활용할 수 있습니다.

    clip_image030

    마이크로소프트는 디지털 데이터의 폭발적인 증가와 디지털 데이터가 상호 연결되고 있는 현재와 미래의 현상을 직시하고, 데이터를 분석하는 다양한 방식과 이를 통해 미래 예측하는 통찰을 얻기 위한 기술을 개발하고 있습니다.

    clip_image032

    회고분석(Retrospective Analysis)의 한 예로, Fujitsu는 축산 농장에서 소의 질병을 신속히 확인하고, 소의 발정기를 정밀하게 확인하기 위한 용도로 센서기술과 Azure 클라우드 기술을 적용 하였습니다. 이를 통해 질병으로 소를 잃지 않고, 소의 체온을 이용한 데이터 분석 기술을 적용하여 발정기를 정밀하게 확인하여 생산량을 늘릴 수 있었을 뿐 아니라, 데이터 분석 과정에서 암수의 결정 메커니즘도 확인할 수 있었습니다. 이러한 서비스는 이제 또 다른 형태의 플랫폼 서비스로 확장 될 수도 있을 것입니다.

    clip_image034

    실시간 데이터 분석은 센서, 웹사이트, 소셜 등에서 변모하는 데이터를 살펴 즉각적으로 통찰을 얻기 위한 방법으로 사용됩니다. 마이크로소프트는 실시간 데이터 분석의 예를 보여주기 위해서 https://gallery.azureml.net/를 통해 다양한 머신 러닝 예를 보여 준 바 있으며, 이중 얼굴 인식, 음성 인식, 비전 인식 등의 몇 가지 서비스를 일반 개발자들이 손쉽게 사용할 수 있도록 공개 API로 서비스 하기 위한 옥스포드 프로젝트(https://www.projectoxford.ai/)를 시작하였습니다. 뿐만 아니라 얼굴 인식 API를 활용한 예로써 http://How-Old.net 을 오픈 하였는데 이를 통해 사진 속의 사람의 성별과 나이를 분석해 줍니다. 뿐만 아니라 이 사이트는 스트림 분석을 통해 획득한 사용자의 성별과 나이 정보를 사이트 모니터링 정보로 재활용 합니다.

    clip_image036

    과거 데이터의 패턴을 분석하여 미래를 예측하기 위한 데이터의 활용 예로서 에너지 제어나 의료분야 등이 있으며, 마이크로소프트 밴드도 이 같은 데이터 분석 기법을 활용하고 있습니다. 마이크로소프트 애저의 머신 러닝 또한 미래를 예측하기 위한 데이터 분석 기법을 지원하며, 예측 정보의 정밀도를 개선할 수 있는 다양한 알고리즘을 지원하고 합니다. 최근 마이크로소프트는 또한 지난 20년간 데이터 언어로 알려진 R을 이용하여 Big Data 분석 서비스를 제공하는 Revolution Analytics사를 인수하여 경쟁력을 강화하였습니다.

    clip_image038

    미래를 예측하기 위한 데이터 분석의 또 다른 예로 인간 지놈 분석을 예로 들 수 있습니다. 1인당 2GB에 가까운 지놈 분석을 위해서는 강력한 컴퓨팅 리소스가 필요합니다. 마이크로소프트 애저 데이터 센터중 4개의 데이터 센터와 8개의 HDInsight 클러스터를 이용하여 단시간에 지놈 분석을 통해서 힙 맵을 생성할 수 있었으며, 이를 통해 개인의 질병 가능성을 예측할 수 있었습니다. 또한 분석에 사용된 알고리즘은 간단히 REST기반 API로 전환할 수 있으며, 모바일 디바이스 등에서 활용될 수 있습니다. 이 같은 빅데이터 분석은 인간의 삶을 변화 시킬 수도 있을 것입니다.

    clip_image040

    또 다른 예로는 이탈리아 정부와 협력하여 비행기에서 촬영한 300,000개의 고화질 사진을 받아, 마이크로소프트 애저의 Machine Learning과 Big Data를 이용하여 폼페이를 3차원으로 재구성할 수도 있었습니다.

    clip_image042

    Windows 10에서 제공되는 DirectX 12를 이용하면 기존에는 상상하기 어려웠던 수준의 정밀도를 가진 게임들을 만들어 낼 수 있습니다. 파이널 판타지 15은 DirectX 12를 이용하여 한 화면에 6,300만개의 폴리곤을 이용하는 한 차원 높은 수준의 게임을 제공할 수 있게 되었습니다. 이는 DX 11에 비해 6배에서 11배에 이르는 숫자입니다.

    마인크레프트는 또 다른 흥미로운 게임 플랫폼 입니다. Visual Studio안에서 Java를 이용하여 마인크레프트 게임을 만들 수도 있습니다.

    clip_image044

    빌드 둘째날의 결론은 바로 "We are Makers!" 입니다.

    Day Two Keynote Presentation 다시보기

  • Korea Evangelist

    Build 2015 Day 1 Keynote 요약

    • 1 Comments

    마이크로소프트는 40년 전 2명의 개발자에 의해 만들어졌습니다. 그간 엄청난 변화가 있었지요. 수많은 장치와 기술이 새롭게 생겨나고 또 사라졌지만 마이크로소프트의 변하지 않는 본질은 개발자를 위한 회사이며 플랫폼 회사라는 것입니다.

    우리의 미션은 모든 조직과 사람들이 더 많은 일을 할 수 있도록 돕는 역할이라고 생각합니다. 스타트업, 학생 개발자, 기업 개발자, ISV, 모바일 앱 개발자, 가상현실 개발자 등 각자가 가지고 있는 전문성과 기술들을 활용하여 만들어낸 이 모든 것들이 우리가 만든 모든 플랫폼에서 가치가 발현될 수 있도록 다리를 만드는 역할을 할 것입니다.

     

    빌드의 키노트에서는 크게 3가지의 플랫폼 변화에 대해서 이야기 하였습니다. 먼저 클라우드 플랫폼은 더욱 지능화 되어 모든 디바이스에서 수행되는 응용 프로그램을 위한 Backend의 역할을 수행할 것입니다. 둘째로 오피스에 대한 이야기입니다. 오피스는 그 자체로 플랫폼화 되었으며 이를 통해 새로운 생산성과 비즈니스 과정을 재개발할 수 있게 될 것입니다. 셋째로 윈도우에 대한 이야기입니다. Windows 10은 차세대 윈도우로서 더욱 개인화된 컴퓨팅 환경을 창조할 것입니다. 이제 라즈베리파이로부터 홀로그래픽 컴퓨터까지 모두 Windows를 사용할 수 있습니다.

     

    마이크로소프트는 매해 10억불 이상을 투자하여 클라우드 데이터센터를 확충하고 있으며, 오늘날 AWS와 Google Cloud를 합한 것 보다 더 많은 19개 지역에 데이터 센터를 설립하고 100만대 이상의 컴퓨팅 디바이스를 관리하고 있습니다. 마이크로소프트는 지난 한해 동안 500개 이상의 새로운 기능을 새롭게 개발하였습니다. 이에 한 달에 9만명 이상이 새롭게 Azure를 사용하고 있으며, 300만명 이상의 개발자가 개발자 등록을 하였으며, 140만개의 데이터베이스와, 50조개의 객체가 저장되어 있을 만큼 활발하게 사용되고 있습니다. Azure는 이제 윈도우 에코 시스템뿐 아니라 리눅스 에코 시스템 까지를 포괄하는 가장 유연한 클라우드입니다. 최고의 도구를 활용할 수 있고 현재 보유하고 있는 기술을 그대로 사용할 수 있을 뿐 아니라, 온프레미스와 클라우드 환경을 통합하여 운영 관리할 수 있는 유일한 클라우드 이기도 합니다.

     

    이제 ASP.NET을 이용하여 개발한 응용 프로그램을 Visual Studio를 벗어나지 않고 Docker로 묶어서 Linux에 배포하고, 운영할 수 있을 뿐 아니라, Visual Studio의 디버거를 이용하여 소스 수준에서 바로 디버깅을 수행할 수 있습니다. 이제 .NET Core는 Windows뿐 아니라, Linux, Mac OSX까지 지원합니다.

     

    최적의 클라우드 앱을 개발하기 위해서 Azure App Service(Web Apps, Logic Apps, Mobile Apps, API Apps), Azure Service Fabric, 개선된 SQL Database를 직접 사용하거나 SQL Elastic Database Pool을 사용할 수 있으며, 개발 전반에 걸친 ALM 기능을 제공하는 Visual Studio Online, 응용 프로그램의 상태를 모니터링 하고 장애를 감지하는 Application Insight 등을 활용하여 클��우드 용 프로그램을 개발할 수 있습니다.

      

    개발 툴 또한 다양한 개발 환경을 지원하기 위해서 Visual Studio 2015 외에도 Windows, Mac, Linux에서 개발을 수행할 수 있는 코드 중심 편집기인 Visual Studio Code를 개발하였으며 무료로 사용 할 수 있습니다. http://code.visualstudio.com

       

    SQL Data Warehouse를 사용하면 다양한 소스로부터 데이터를 취하고 결합한 후, Power BI, Excel, Machine Learning의 소스로 사용할 수 있습니다. IoT의 Backend로써 데이터를 취합하기 위한 EventHub, 스트리밍 분석을 위한 Stream Analytics 등을 활용할 수 있을 뿐 아니라 Data Lake service를 이용하여 용량과 형태에 제한 받지 않고 통합적으로 데이터를 저장, 관리할 수 있습니다.

     

    오피스는 이제 그 기저에서 앱 플랫폼으로 변모하고 있으며, UWP와 JavaScript를 이용하여 오피스 문서의 DOM에 접근할 수 있습니다. 오피스는 이제 Windows, Mac, iPad, 안드로이드에서 사용 가능하며, 설치형뿐 아니라 오피스 웹 앱에서도 동일하게 동작합니다. Office 365 API는 이제 통합된 URL을 통하여 사용할 수 있으며, 이를 이용하면 다양한 비즈니스 시나리오를 오피스 플랫폼 내에서 개발할 수 있습니다.

     

    Windows 10은 단순히 새로운 버전의 Windows가 아니라, 한층 더 개인화된 모바일 컴퓨팅 시대의 시작을 알리는 운영체제입니다. 다채로운 디바이스를 하나로 묶는 운영체제이며, 동시에 터치, 펜, 마우스, 키보드, 홀로그램에 이르기까지 자연스러운 인터페이스를 사용할 수 있도록 해줍니다. 또한 Windows 10은 배포 방식에 있어서 다른 윈도우와도 큰 차이를 보입니다.

    우리는 Windows 10이 계속 최신의 상태가 유지될 수 있도록 하기 위해서 윈도우를 하나의 서비스로 간주하였습니다. 또한 Windows 10은 라즈베리파이로부터 홀로렌즈에 이르기까지 다양한 장치에서 설치되지만, 이 전체를 아우르는 단일의 개발 플랫폼으로 자리 매김 할 수 있도록 하였습니다. 또한 개발자들이 더 많은 사용자들에게 다가갈 수 있도록 스토어를 하나로 묶고 다양한 기술을 수용할 수 있도록 노력하였습니다.

     

    윈도우 스토어는 신용카드 이외에도 90개의 통신사를 통해서 모바일 결제를 할 수 있도록 스토어를 개선 하였으며, 기업용 스토어를 따로 두어 기업 내에서 사용하는 앱을 배치하거나 자체적인 결제 시스템을 연동할 수도 있습니다.

     

    윈도우 10은 1년동안 무료로 업그레이드 가능하며, 향후 2~3년 안에 10억개의 디바이스에 Windows 10이 설치되는 것을 목표로 삼고 있습니다. 이를 위해서 다양한 개발 기술을 수용하기 위해서 노력하였습니다.

     

    이러한 노력의 결과로 웹 기반 기술을 이용하여 개발된 웹 사이트는 큰 변화 없이 바로 앱으로 변경이 가능하며, .NET과 Win32로 개발된 앱 또한 모든 Universal Windows Platform을 제한 없이 사용할 수 있을 뿐 아니라, 윈도우 스토어를 통해서 다운로드 받을 수 있습니다. 뿐만 아니라 안드로이드 폰 앱을 개발하기 위해서 사용한 Java/C++로 작성한 코드들을 모두 재사용하여 Windows 10이 수행되는 폰용 앱을 개발할 수 있으며, Visual Studio에서 XCode Project 파일을 열어서 Objective C로 작성된 iOS용 코드를 직접 컴파일하고 디버깅 하여 윈도우 앱을 만들 수 있습니다.

    Project Spartan은 Microsoft Edge라는 이름으로 공개되었으며, 모든 Windows 10에서 사용할 수 있습니다. 놀라운 속도, 강력한 상호 운용뿐 아니라, Cortana 결합, 읽기 전용 모드, 펜을 통해서 그림을 그리고 공유할 수 있는 기능이 포함되었으며, 최소한의 수정으로 앱으로도 변경할 수 있습니다.

    Windows 10이 수행되는 디바이스는 다양한 기능상의 차이가 있을 수 있으며, 이를 위해 continuum이라는 기능을 통해서 단일의 앱을 이용하더라도 디바이스의 상태에 따라 서로 다르게 동작함으로써 앱의 사용성을 높여줍니다.

     
    Windows 10 for phone은 키보드/마우스와 모니터가 연결되면 마치 PC용 Windows를 사용하는 것 과 같은 UI를 보여주어 사용자가 손쉽게 응용 프로그램을 사용할 수 있도록 해줍니다.

     

     

    많은 개발자를 열광시킨 홀로렌즈는 동영상으로 살펴보시기 바랍니다.
    https://www.youtube.com/watch?v=3AADEqLIALk

    빌드 첫째날 결론은 바로 "Empower every developer!" 입니다.

    Day One Keynote Presentation

  • Korea Evangelist

    Windows 10 개발자 가이드

    • 0 Comments

    Windows 10 개발자 가이드 Part. 1

       

    이 문서는 Windows 10 개발자를 위해서 관련된 내용들을 정리한 문서로 현재 Windows 10 Preview 버전을 기준으로 작성되었으며 따라서 최신 정보와 차이가 있을 수 있다. 항상 최신의 정보는 MSDN(Microsoft Developer Network http://msdn.microsoft.com)을 참조하기 바란다.

       

    Windows 10 Overview.

    Windows 10은 2015년 출시 예정으로 있는 새로운 버전의 Windows 이다. 사용자 입장에서는 다시 돌아온 시작 메뉴, 고해상도 모니터의 지원과 액션센터와 타블릿과 데스크탑에서 각각 맞는 인터페이스 그리고 변경된 참바 등등을 본다면 변화가 작지않은 것도 사실이다.

    <그림1> 진화되어 돌아온 시작 메뉴

     하지만 정작 변화의 폭이 큰 기존의 버전과는 변화의 폭이 크다는 말이 적절하지 않을 정도로 처음부터 다시 쓴 클라이언트 플랫폼이다. Windows 10의 가장 큰 특징은 하나의 Windows Core로 PC, Phone, XBox 그리고 IoT에 사용되는 디바이스 등 다양한 디바이스를 지원하게 된 점이다.

       

    <그림2>Windows 10에서는 하나의 동일한 Windows Core가 다양한 디바이스에 사용된다.  

    Wiindows Core를 공통으로 사용할 수 있게 되면서 Windows 10은 다음과 같은 특징을 갖게 되었다.

    - PC, Mobile, XBox 이외에도 IoT나 기타 장비를 동일한 Windows Core를 기반으로 하고 있다.
    - 동일한 커널위에 동일한 API 집합인 UAP(Universal App Platform)가 제공된다.
    - 모든 디바이스들이 하나의 스토어에 연결된다.

    <그림3>One Windows Platform

     

    Universal App Platform 

    디바이스와 관계없이 동일한 Windows Core를 사용하면서 동일한 API집합이 제공되는 데 이 부분이 UAP(Universal App Platform)이다.  UAP를 기반으로 개발된 앱들은 동일한 앱 모델을 가지고 있고 바이너리 수준의 호환성을 가지고 있다. 
     기존 Windows 8.1에서도 제한적으로 Windows와 Windows Phone 사이에 Universal App이 제공되었지만 Windows 10에서는 더 넓게 Universal App이 적용된다.

     Windows 10에서 제공하는 UAP는 최소한의 노력으로 다양한 디바이스를 지원하는데 큰 이점을 제공해 줄 뿐만 아니라 사용자의 입장에서는 디바이스 간의 연결된 사용자 경험을 제공 할 수 있다.

    UAP에 대해서 자세한 내용은 Windows Blog에 올라와 있는 글 (http://blogs.windows.com/buildingapps/2015/03/02/a-first-look-at-the-windows-10-universal-app-platform/)을 참조 할 수 있다.

    여기서 중요한 점은 앞으로는 Windows의 버전이 아니라 UAP 버전을 중심으로 호환성이 제공된다. 즉 OS 버전과는 상관없이 UAP 버전이 앱의 호환성의 기준이 된다. 그래서 UAP의 최소, 최대 버전을 프로젝트에서 명시 하도록 되어 있다.

    <TargetPlatform Name="Microsoft.UniversalminVersion="2.0.0.0maxVersionTested="3.5.0.0" />

     여기서 중요한 점은 앞으로는 Windows의 버전이 아니라 UAP 버전을 중심으로 호환성이 제공된다. 즉 OS 버전과는 상관없이 UAP 버전이 앱의 호환성의 기준이 된다. 그래서 UAP의 최소, 최대 버전을 프로젝트에서 명시할 수 있다.

    <그림4>Platform.xml 파일의 내용

     

    Extension SDK

    UAP에서 모든 기능을 다 제공할 수는 없다. 디바이스 독립적으로 설계되어 있기 때문에 디바이스들이 가지고 있는 고유한 특징은 제공되지 않는다. Windows Phone의 백 버튼이나 진동 기능 혹은 Xbox에서 제공하는 아바타와 같은 요소들은 해당 디바이스에만 존재하는 기능들이다. 그래서 각각의 디바이스 별로 고유한 기능을 제공하는 방법이 필요하다.

    이럴 때 사용하는 것이 바로 Extension SDK이다. Extension SDK는 각 디바이스 별 특징을 담고 있는 컴퍼넌트로 프로젝트에 참조 추가를 통해서 추가할 수 있다. <그림5>에서는 스토어 앱 프로젝트에 데스크탑과 모바일의 Extension SDK가 추가되어 있는 것을 볼 수 있다.

    <그림5> Extension SDK가 추가되어 있는 프로젝트

     이렇게 Extension SDK가 추가되어 있는 상태에서 상황에 따라 각 디바이스에 해당하는 기능을 호출하면 하나의 앱으로 다양한 디바이스의 특징을 모두 살릴 수 있는 Universal App을 만들 수 있다.

    Extension SDK의 활용 방법에 대한 소개와 발표자료는 아래 링크를 참조 할 수 있다.
    http://channel9.msdn.com//Series/Developers-Guide-to-Windows-10-Preview/04?wt.mc_id=player

    UAP에 대한 전반적인 내용은 아래 동영상을 참조 할 수 있다.
    http://channel9.msdn.com/Shows/Inside-Windows-Platform/A-First-Look-at-Building-Windows-10-Universal-Applications

       

    Visual Studio 2015 CTP6 

    Windows Insider Program 

    을 위해서는 Visual Studio 2015와 Tools for Windows 10 Technical Preview 가 필요하다. Microsoft는 Windows Insider Program을 통해서 Windows 10 Technical Preview와 Tools for Windows 10 Technical Preview를 제공하고 있다. 그래서 Windows 10을 미리 체험해 보기 위해서는 Insider Program에 가입하는 것이 필요하다.

    Windows Insider Program 가입 https://insider.windows.com/  

       

    당연한 이야기 이지만 Windows 10 개발을 위해서는 Windows 10을 먼저 설치해야 한다.

    Windows 10 Technical Preview Download
    http://windows.microsoft.com/ko-kr/windows/preview-faq

    개발도구는 Visual Studio 2015 버전을 설치해야 하는데 아래와 같이 세가지 버전 중 하나를 선택해서 설치하면 된다.

    Visual Studio Editions
    - Ultimate (Architecture Modeling, Diagnostics, VSO/ALM & Release Management
    - Premium (Architecture Validation, VSO/ALM & Feedback Management
    - Community Edition (Visual Studio Professional Edition)
     

    현재는 아래 링크에서 Visual Studio 2015 Preview 버전을 다운받아 설치 할 수 있다.

    http://www.visualstudio.com

     

    Tools for Windows 10 Techinical Preview
    Visual Studio 2015 만 설치해서는 개발을 바로 시작할 수 없다. Windows 10과 관련된 기능들은 Tools for Windows 10 Techinical Preview를 설치해야 가능하다. 설치 용량은 5기가 정도이며 시간이 다수 걸릴 수 있다.

    Tools for Windows 10 Techinical Preview Download
    http://dev.windows.com/en-US/windows-10-developer-preview-tools

       

    Windows 10 개발자 가이드 Part. 2

       

    Windows 10 개발자 가이드 1/2에서 Windows 10 Overview와 Universal App Platform그리고 개발 환경에 대해서 알아보았다. 여기에서는 UAP 앱을 개발하기 위해서 새롭게 추가되거나 변경된 컨트롤과 기능 그리고 웹 플랫폼에 대해서 MVA의 Windows 10 Preview 개발자 가이드 강좌의 내용을 기반으로 Adaptive UI, Communication, Platform Features 그리고 Web Platform에 대해서 살펴보겠다. 추가로 윈도우 개발자 센터의 Windows Universal 앱 가이드 문서도 같이 참고하길 바란다.

         

    Adaptive UI

       

    UAP는 다양한 크기의 디바이스를 지원해야 하고, 이에 따라 화면에 보여질 수 있는 콘텐트 가로 및 세로 크기가 달라질 수 있다. 디바이스 별로 자연스러운 모습을 보여주는 앱을 만들기 위해서 구동 시에 해당 디바이스에 대한 정보를 가져와서 그에 맞는 UI를 구성할 수 있다.

       

    먼저 SplitView 컨트롤을 사용하면 스크린 크기에 따라 유연하게 콘텐트 레이아웃 형태를 변경할 수 있다. 컨트롤은 아래 이미지에서처럼 왼편의 네비게이션 바와 우측의 콘텐트 영역으로 나누어진다. 네이게이션 바는 화면 크기가 작아졌을 때는 내용 없이 아이콘만 나타나며, 상단의 세 줄로 된(햄버거 모양의) 버튼을 클릭하면 메뉴가 펼쳐진다. 반응 형으로 작성된 웹 페이지에서와 유사한 방식이다.

    <그림 1> SplitView 컨트롤 예제

     

    그리고 RelativePanel 컨트롤은 새로운 레이아웃 컨트롤이며 다른 컨트롤이나 컨테이너에 맞춰서 콘텐트를 배치할 수 있게 한다. 다양한 스크린 크기나 방향에서 동작하는 맞춤형(Adaptive) 페이지를 개발 시에 특히 잘 활용될 수 있다. Panel자체나 sibling에 대해서 왼쪽, 오른쪽, 중앙, 위아래 등으로 위치를 맞출 수 있다. 아래 이미지는 파란색 사각형의 아래, 왼쪽으로 맞춤을 한 것이다.

    <그림 2> Relative Panel 구성 및 XAML 예제

    또한 기존에 XAML에서 자동으로 스크린 크기 같은 환경적인 요인을 감지하기 위해 사용된 Adaptive Triggers UAP에서는 Visual State부분에서 향상된 것으로 Setters는 Properties와 분리해서 설정할 수 있고, Triggers는 특정 state가 적용 되는 시점을 선언할 수 있게 되었다. Adaptive Triggers는 RelativePanel 컨트롤과 같이 사용해서 UAP에서 맞춤형(Adaptive) UI를 만드는 게 쓰이는 강력한 도구이다.

       

    Communication

       

    UAP에서는 앱 간에 통신을 하는 새로운 방법들이 추가 되었다. App-to-App Communication 을 통해서 URI Activation을 통해서 특정 앱을 불러내거나 파일을 보낼 수 있고, 해당 URI를 처리할 앱의 설치 여부를 확인할 수 있다. 또한 다른 앱으로 부터 결과 값을(Results) 받아오는 동작을 할 수도 있다. 그리고 같은 퍼블리셔가 배포한 앱 간에는 저장소 폴더를 공유할 수도 있다.

       

    <그림 3> Windows 10의 App 간 통신 방식

       

    App Services 는 어떤 스토어 앱이 다른 스토어 앱에게 서비스를 제공하는 것이다. 이는 내장된 플랫폼 앱 뿐만 아니라 일반 개발자가 만든 앱 간에도 가능하다. 동작 시 클라이언트 앱이 요청을 하면, 서버 역할을 하는 앱에 있는 Background Task가 응답한다. 클라리언트와 서버 모두 메시지를 주고 받을 수 있다.

    <그림 4> Windows 10 의 App Service 동작 방식

       

    앱 서비스는 클라이언트가 요청한 서비스가 활성화 되어 있는 동안 시스템에서 동작하게 된다. 클라이언트가 연결을 끊거나 중지하는 메시지를 보낼 수 있으며, 디바이스의 리소스가 부족해도 서비스가 중지 될 수 있다. 그리고 앱서비스는 REST 웹 서비스 모델에 기반해서 디자인되어 있다.

       

    Platform Features

         

    많은 앱에서 지도 서비스를 사용한다. 모든 UAP에서 기본적으로 탑재된 Maps 컨트롤과 Maps 서비스 API를 사용할 수 있다. MapControl에서는 이미지나 텍스트 등을 지도 상에 표시할 것이 (아래 이미지의 오른편 같이) 많을 경우 MapIcon을 사용할 수 있고, 몇몇 개의 위치를 표시 하거나 할 때에는 MapItemsControl을 쓸 수 있다. 그리고 TileSource를 이용해서 기본 맵에 타일화된 이미지를 겹쳐서 보여주거나 다른 소스들을 같이 사용할 수 있다.

       

    <그림 5> Windows 10의 Maps 컨트롤

       

    Windows 10은 디바이스에 따라서 Pen으로 정교한 입력을 할 수도 있고, 혹은 터치스크린을 통해 손가락 터치를 인식할 수 있다. Windows 10에서 Pen & Ink 기능은 모든 디바이스에서 빠르게 반응하며 압력 센서 및 손바닥 감지 그리고 손가락 글쓰기 등을 제공한다. XAML에서 InkCanvas 를 사용하며, InkPresenter API로 Ink Stoke 속성 설정, 저장 및 복구, 선택 및 편집, 손글씨 인식 등을 처리한다.

       

    <그림 6> 메일 앱에서 Ink 사용 예

       

    Windows 8.x 에서 앱에 대한 알림 메시지는 앱 타일을 통해서 표시할 수 있었다. 그리고 Windows Phone 8.1부터는 Action Center에서도 이 같은 알림을 확인할 수 있게 되었고, 이제 PC용 Windows 10 에도 액션 센터가 생겼다.

       

    <그림 7> Windows 10 Phone 및 PC에서의 Action Center

         

    알림 내용에 접근하는 방식이 늘어남에 따라서 앱, 액션센터 그리고 타일에서 일관된 형태로 정보를 주고 동작하는 것이 필요하다. 이를 위해 알림 메시지에 태그를 달거나 그룹을 지정 할 수 있고, 혹은 알림 시간을 지정하거나 임의로 알림을 제거할 수도 있다. 또 타일에는 표시되지 않고 액션 센터에만 나오도록 하는 Ghost Toast를 활용할 수도 있다.  

          

    이 외에 플랫폼 적인 측면에서 앱과 앱 간에 드래그앤 드랍이 지원되게 되며, 데이터바인딩 성능 향상을 위해 컴파일 시점에 바인딩을 할 수 있다. 그리고 Transform3D를 통해 GPU를 사용하여 move, size, angle, shape 등을 변형할 수 있다. 아래는 scene의 구성 예이다.

       

    <그림 8> Transform3D 구성

       

    Web Platform

         

    웹과 관련해서 플랫폼 간 더 높은 상호 운용성을 제공하기 위해서 Windows 10에서는 EdgeHTML 렌더링 엔진만을 탑재한 Project Spartan 브라우저를 제공한다. Spartan 브라우저는 모든 Windows 10 디바이스에서 동일하게 동작한다.

       

    <그림 9> Project Spartan의 EdgeHTML 랜더링 엔진

       

    그리고 PC용 Windows 10에 같이 포함된 Internet Explorer의 경우는 기본은 EdgeHTML 렌더링 엔진으로 동작하지만, ActiveX나 BHO가 필요한 사이트의 경우 호환성 모드로 동작할 수 있다.

    <그림 10> Windows 10의 Internet Explorer의 기본 및 호환성  모드

       

    EdgeHTML 랜더링 엔진에는 HTML5 관련한 새롭고 업데이트된 기능들이 포함되어 있다. 아래 표의 내용 외에도 2000개가 넘는 상호 운용성 관련한 개선 사항이 포함되어 있다.

    <그림 11> HTML5 관련하여 적용된 향상된 기능들

       

    이 외에도 웹을 앱 형태로 동작하게 하는 부분들에 대한 향상이 많이 이루어질 예정이다.

  • Korea Evangelist

    한 주간의 마이크로소프트 소식 [3월 4주차]

    • 0 Comments

    안녕하세요. 한 주간의 마이크로소프트의 개발 관련 주요 소식들을 정리합니다.

    관련 영상 : This Week on Channel 9 – Windows 10 Launch Date, Win10 Dev Tools, Azure Apps, API Tools, IoT more…

     

    Windows 10여름 출시됩니다

    Windows 10의 출시 시기가 올 여름으로 밝혀졌습니다. Windows 10은 190개국에 111개의 언어로 출시되며 출시 후 1년간 Windows 7, Windows 8.1, Windows Phone 8.1 사용자들에게 무상 업그레이드 권한을 제공하게 됩니다. Windows 10은 라즈베리파이 2나 Qualcomm사의 개발 레퍼런스 보드인 DragonBoard 410C 비롯한 여러 IoT 장치들을 지원합니다.

     

    Windows 10 개발자 도구 공개(Preview)

    Windows Insider 프로그램에 가입된 개발자들을 대상으로 Windows 10 개발자 도구(Preview)가 공개되었습니다. 이 도구를 다운로드 후 사용하기 전에는 Windows 10 Technical Preview와 Visual Studio 2015 CTP 6 를 먼저 설치 하셔야 합니다. Windows 10 개발자 도구와 관련하여 참고하실 만한 내용들을 아래와 같이 정리해 보았습니다.

    - Universal App Platform 소개, MWC 2015

    - Windows 10 Jumpstart Preview, MVA 영상

    - Windows 10 Developers Preview에서 달라진 점들

    - 코드 샘플(Github)

     

    Windows 10 개발자 도구 사용 방법 (Visual Studio 2015 CTP 6)

    Windows 10 개발자 도구에 포함된 내용들이 공개 되었습니다. 아래에 간단히 그 내용들을 정리해 보았습니다.

    1. Windows Universal App 개발 템플릿 추가 (개발 언어로 C#, VB, C++, JavaScript 사용 가능).

    2. Windows Universal App을 Windows 10이 설치된 PC와 폰 에뮬레이터에서 테스트 가능

    3. 특정 디바이스에 맞춰진 코드 작성 가능

    4. Visual Studio 2015 Preview의 디버깅 기능들을(새로운 진단 도구, XAML UI 디버깅 등) Windows Universal App에서도 사용 가능

    5. .NET 응용프로그램 을 .NET Native로 컴파일하고 실행할 수 있도록 지원

    6. Win32로 만든 Windows 데스크탑 응용프로그램 에서 Windows 10 API의 호출이 가능하며, .NET Framework 4.6 사용 가능.

    7. Windows 10 응용프로그램에 Application Insight가 통합되어 기본으로 사용

       

    Azure App Service 발표

    Azure App Service는 기존의 Azure Websites와 Mobile Service를 포함하여 새롭게 개편된 서비스로 아래와 같이 총 4가지의 서비스로 구성되어 있습니다.

    Web Apps는 기존의 WebSites 서비스에 해당하며, Mobile Apps는 Mobile Service에 해당합니다. 새롭게 추가된 부분은 Logic Apps와 API Apps 인데요, 각각의 서비스가 제공하는 내용은 아래와 같습니다.

    - Logic Apps

    Logic Apps를 사용하면 워크플로와 비즈니스 프로세스를 자동화 할 수 있습니다.


     
    예를 들면 API 호출시나 데이터베이스에 데이터를 저장할 때 마다 CRM에 기록하거나 메일을 보내는 등의 설정을 할 수 있습니다. 이러한 설정은 JSON 파일을 사용하거나 Azure Portal의 로직/워크플로우 디자이너를 사용하여 구성할 수 있습니다.
     
    - API Apps
    API Apps는 여러 API들을 쉽게 생성하고, 호출할 수 있는 방법을 제공합니다. ASP.NET Web API와 같은 프레임워크를 사용해서 만든 API 뿐만 아니라 타사가 제공하는 다양한 언어로 작성된 API들도 사용하실 수 있습니다.

    App Service는 기존의 Website 기능과 동일한 가격으로 서비스 됩니다. 현재 WebSite 서비스를 사용하고 있다면 Mobile Apps / Logic Apps / API Apps 도 별도의 추가비용 없이 사용하실 수 있습니다. 현재 App Service중 Web Apps가 정식 서비스 중이며, 나머지는 Public Preview 상태입니다.

     

    Visual Studio 2013에서의 Azure API Apps 사용법

    앞서 소개 드린 API Apps를 Visual Studio를 사용하여 만들고, 배포하는 상세한 가이드 문서가 Visual Studio 블로그에 공개되었습니다.

     

    MSBuild 엔진의 오픈소스화

    응용프로그램 빌딩 플랫폼인 Microsoft Build Engine(MSBuild)이 오픈소스화 되어 GitHub에 공개 되었습니다. 링크의 문서에 MSBuild를 활용하는 방법이 나와 있으니 참고하시기 바랍니다.

     

    IT Pro개발자를 위한 Office 2016 Preview 공개

    비공개 Preview 상태로 수 개월간 운영되어 왔던 Office 2016 Preview가 공개 되었습니다. 링크의 문서에는 개발자와 IT Pro들이 관심을 가질만한 Office 2016의 새로운 업데이트 내용들이 정리되어 있습니다.

     

    Azure IoT Suite 발표계획

    Azure IoT Suite가 올해 안에 Preview로 공개될 예정입니다. 기존의 Azure Stream AnalyticsEvent Hub 같은 Azure의 IoT 관련 서비스들이 Azure IoT Suite로 합쳐질 예정입니다.

     

    Node.js Tools 1.0 for Visual Studio (NTVS) 정식 서비스

    지난 1년간 beta로 서비스 되어오던 Node.js Tools for Visual Studio(NTVS)의 1.0 버전이 정식으로릴리즈 되었습니다. NTVS 1.0은 Visual Studio의 Professional 이상의 유료 에디션들을 비롯하여 Community 에디션과 Express for Web 에디션을 지원합니다. NTVS는 코드완성 기능(IntelliSense), 고급 디버깅 및 프로파일링, NPM 통합 등 다양한 기능들을 제공합니다. 관련하여 좀 더 자세한 내용은 링크의 글을 참고 하시기 바랍니다.

     

    Angular 2 프레임워크가 TypeScript작성됩니다

    오픈소스 웹 응용프로그램 프레임워크인 Angular 2가 TypeScript를 사용하여 개발 될 예정입니다. 링크의 글은 Angular 2의 데모 프로젝트를 실행해 보기 위한 절차들을 상세히 다루고 있습니다.

     

    WPF Team과의 Live Q&A 영상

    WPF 팀으로부터 직접 WPF 개발 현황을 들을 수 있는 영상들(영문)이 Channel 9에 공개되었습니다. 링크의 영상은 Connect("Live") 행사에서 진행되었던 WPF Team 과의 Live Q&A 영상이며, dotnetConf 2015 행사에서 진행된 WPF in .NET 4.6 and beyond 영상도 함께 확인해 보시기 바랍니다.

     

    C# 관련 인포그래픽 공개

    8000명의 C# 개발자들을 대상으로 한 조사결과를 바탕으로 하는 인포그래픽이 공개되었습니다. C#이 어떤 플랫폼 앱 개발에 사용되는지, 사용 비중이 어떻게 변했는지를 보여주고 있습니다.

     

    Prism 오픈소스화 소식

    마이크로소프트의 Patterns & Practices 팀이 주도해온 Prism 라이브러리가 오픈소스화 되고, 커뮤니티 주도하에 운영됩니다. 아울러 Prism 라이브러리 커뮤니티 멤버인 Brian Lagunas가 작성한 Xamarin.Forms Preview에서의 Prism 라이브러리 사용법도 살펴 보시기 바랍니다.

      

  • Korea Evangelist

    최신 Visual Studio를 사용하는 가장 안전하고 빠른 방법. 애저 가상 머신 활용하기

    • 1 Comments

    많은 분들이 이미 알고 계신 바와 같이 지난 2월 23일에는 Visual Studio 2015 Community Technology Preview(CTP) 6 버전의 발표가 있었습니다. 이 버전에는 XAML 개발을 위한 새로운 UI 디버깅 도구, 개선된 분석 및 편집 기능, 완전히 개선된 ASP.NET과 최신 C++ 까지 다양한 기능들이 개선되고 새롭게 탑재 되었습니다. (Visual Studio 2015 CTP 6 소개)

    6번째 CTP 버전이 출시되었다는 것만으로도 미루어 짐작하실 수 있겠지만, 마이크로소프트는 Visual Studio 차기작의 안정적인 출시를 위해서 최선을 다하고 있으며, 가능한 빠른 시간 내에 추가된 기능들을 커뮤니티에 소개하고, 이를 통해서 현장의 살아 있는 목소리를 듣고 제품에 반영하기 위한 노력을 경주하고 있습니다.

    다음의 다운로드 링크를 이용하시면 이미 제한 없이 Visual Studio 2015 CTP 6뿐 아니라 Team Foundation Server 2015 CTP와 추가 도구들을 다운로드 하실 수 있습니다.

    Download Visual Studio 2015 CTPs

    하지만 새로운 기능을 사용하고 테스트 해보고 싶다 하더라도 여전히 자신의 컴퓨터에 베타 버전이나 CTP 버전을 설치하는 것은 번거롭기도 하거니와 부담스러울 수 있습니다. CTP 버전의 경우 설치가 완벽하게 진행되지 않거나, 설치 이후에 시스템이 예상치 않은 문제를 일으킬 수도 있으며, 기존에 설치되어 있던 응용 프로그램에 영향을 미칠 수도 있기 때문입니다. 따라서 이러한 버전의 경우 설�� 이전에 중요한 데이터 등을 반드시 백업 해 놓기를 권고 합니다.

    이러한 문제를 해결 하기 위해서 마이크로소프트는 Visual Studio 2015의 최신 CTP 버전에 대한 가상 머신 이미지(Virtual Machine Image)를 마이크로소프트 애저를 통해서 제공하고 있습니다. 이를 이용하면 중요 데이터의 백업이나 복잡한 설치 과정이 필요 없을 뿐더러 시스템에 미치는 영향을 걱정하지 않고도 Visual Studio의 최신 버전을 간편하게 사용하고 테스트 해 보실 수 있습니다.

    아래에 그 절차를 나열 해 보았습니다.

    1. http://azure.com 에 접속하여 우측 상단의 '포털' 메뉴를 클릭한 후, 마이크로소프트 계정으로 로그인 하십시오. (마이크로소프트 애저를 처음 사용하시는 분이라면 http://azure.microsoft.com/ko-kr/pricing/free-trial/ 를 통해서 무료 계정을 신청하실 수 있습니다. 좀 더 자세한 가이드는 http://aka.ms/freeazureguide를 살펴보십시오.)

    2. 좌측 하단의 새로 만들기 버튼을 클릭 하십시오

    3. '계산'à'가상 컴퓨터'à'갤러리에서'를 선택하십시오.

    4. 아래와 같이 '이미지 선택' 창이 나타나면, 좌측 리스트에서 'VISUAL STUDIO'를 선택한 후, 우측 리스트에서 'Visual Studio Ultimate 2015 CTP 6' 를 선택하고, 다음을 누르십시오.

    5. '가상 컴퓨터 이름', '새 사용자 이름', '새 암호', '확인'를 각각 올바르게 입력하십시오. ('크기'는 A2 혹은 그 이상으로 선택하는 것이 좋습니다.) 다음을 누르십시오.

    6. '지역/선호도 그룹/가상 네트워크'에서 사용자와 가장 가까운 지역을 선택하십시오(한국에서 접속하는 경우 일본 동부와 서부를 권장합니다.) 다음을 누르십시오.

    7. 마지막 창에서는 특별한 변경 없이 최종 '확인'을 눌러 가상 컴퓨터를 생성 하십시오.

    8. 다음과 같이 가상 컴퓨터의 상태가 '시작 중(프로비젼)' 상태로 시작하여, '실행 중(프로비젼)'을 거쳐, '실행 중' 상태가 될 때까지 기다리십시오.(수분 정도 소요될 수 있습니다.)

    9. 화면 하단의 '연결' 버튼을 눌러 원격 데스크톱으로 가상 컴퓨터에 접속 하십시오.

    10. 바탕 화면에서 Visual Studio 2015 Preview 바로가기 아이콘을 더블 클릭 하여 Visual Studio 2015 CTP 6를 수행 한 후, 다음과 같은 창이 나타나면 'Sign in' 버튼을 눌러, 마이크로소프트 계정으로 로그인 합니다. (최초 기동 시에는 시간이 수분 정도 소요될 수 있습니다.)

    11. 이제 Visual Studio 2015 CTP 6를 이용할 수 있습니다.

    감사합니다.

Page 2 of 128 (640 items) 12345»