[ClouDeveloper News – Azure Edition] 2016년 12월 15일

클라우드 컴퓨팅을 중심으로 관련된 여러 기술과 업계 소식을 매주 전하는 ClouDeveloper News를 시작합니다. 파일럿 프로그램으로 구상하여 운영 중에 있으며 추후 여러 피드백과 의견 수렴을 통하여 프로그램의 틀을 갖추어 나갈 예정이오니 많은 관심과 구독을 부탁드립니다.

이번주 커뮤니티 소식

Azure 서비스 공지 사항

  • General availability: Package Management extension for Visual Studio Team Services
    • Visual Studio Team Service에서 NuGet Package와 NPM Package를 관리할 수 있는 익스텐션 서비스가 새로 출시되었습니다. Visual Studio Marketplace에서 청약할 수 있는 상품입니다.
  • General availability: Azure IoT Gateway SDK
    • 기존 하드웨어나 인프라를 교체하지 않고, 게이트웨이 장치를 개발하여 Azure IoT와 자연스럽게 연동될 수 있도록 만들 수 있습니다. 오픈 소스로 공개된 Azure IoT Gateway SDK를 사용하여 기존 장치가 Azure IoT Hub와 직접 통신할 수 있는 여건이 되지 않더라도 원격에서 장치를 제어하거나 상태를 보고하는 대행 게이트웨이 하드웨어를 더 쉽게 개발할 수 있습니다.
  • With general availability, enhancements abound in Azure IoT Hub Device Management
    • Azure IoT Hub에서 그동안 강조되지 않았거나 샘플 코드 수준으로만 제공되어오던 “장치 관리”에 관련된 기능과 API가 GA로 전환되었습니다. 예약 작업, 다이렉트 메서드, 쿼리, 디바이스 트윈 API를 사용하여 좀 더 많은 장치 제어 시나리오를 커버할 수 있게 되었습니다.
  • Latest update of Azure Analysis Services preview brings scale up and down
    • Azure Analysis Service의 인스턴스 크기를 조정할 수 있는 기능이 포털에서 새롭게 제공됩니다. 상황에 따라 강력한 성능 발휘를 위하여 인스턴스 등급이나 규모를 늘리고, 사용하지 않는 때에는 최소한으로 낮추어 경제적으로 Azure Analysis Service를 활용할 수 있게 됩니다.

교육 자료

새로운 제품 및 서비스

  • Introducing Windows Server & SQL Server Premium Assurance
    • 지원이 중단될 예정인 Windows Server와 SQL Server에 대한 보안 업데이트 제공 서비스가 유상으로 제공됨에 따라 기존 라이프사이클에서 최대 6년까지 지원이 연장됩니다. 신규 플랫폼과 서비스로 이행을 하기에 시간적 여유가 없는 경우 선택할 수 있는 옵션입니다. Windows Server 2008, Windows Server 2008 R2, SQL Server 2008, SQL Server 2008 R2가 첫 지원 대상입니다.
  • Announcing SQL Server Management Studio – 16.5.1 Release
    • SQL Server Management Studio의 최신 버전인 16.5.1이 릴리스되었습니다. 제품 출시 후 발견된 문제점들을 수정한 패치 성격의 업데이트 버전입니다.

활용 및 노하우

웹 캐스트

  • SQL Server + Java: What’s new
    • 새 Microsoft JDBC 드라이버를 통해 Java 기반 애플리케이션에서 SQL Server에 접속하여 쓸 수 있는 새로운 기능들을 소개하는 웹 캐스트입니다. 최근 JDBC 드라이버의 소스 코드를 GitHub 리포지터리에 게시하여 오픈소스화 하였으며, Maven 리포지터리를 통하여 JDBC 드라이버에 대한 종속성을 간편하게 추가할 수 있게 되었습니다.
  • Azure Media Indexer 2: Japanese support, punctuation improvements, no more time limit
    • 동영상에서 화자가 말하는 언어를 음성 인식하여 자막을 만들고 동영상 검색의 기본 데이터를 형성하는데 도움을 주는 Azure Media Indexer의 새 버전에서는 Microsoft Research의 연구 성과를 바탕으로 지속적으로 품질과 성능을 개선하고 있으며, 이번 릴리스에서는 일본어 음성 인식 지원, 10분 길이 제한 해제, 발음과 문법 품질 향상을 주안점으로 두고 있습니다.
  • Get Started with Azure Functions
    • Azure Function에 대한 튜토리얼 웹 캐스트입니다.
  • Digital marketing solutions on Azure
    • Orchard, Umbraco와 같은 유명 CMS 솔루션을 Azure 위에서 기술적인 지식 없이 손쉽게 구축하여 디지털 마케팅 전략에 활용할 수 있는 방안을 소개하는 웨비나 세션을 소개합니다.
  • Dev and test better in the cloud
    • Azure 및 클라우드 환경에서 개발과 테스트 전략을 더 효율적으로 수행할 수 있는 방법을 소개하는 무료 웹 캐스트입니다.

서드파티 소식

  • Kafka Connect for Azure IoT Hub
    • Azure IoT Hub에 연결하여 데이터를 Kafka로 보낼 수 있는 Connector의 오픈 소스 버전이 새롭게 공개되었습니다.

ClouDeveloper 페이스북 페이지에 댓글로 의견을 남겨주시면 뉴스 발행 및 각종 정보 전달에 반영하도록 하겠습니다. 고맙습니다.

의견 남기기: https://fb.com/cloudeveloper

Cloud Service 레시피 – Windows Azure Cloud Service 프로젝트 안에서 실행 환경을 구분하는 방법

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure Cloud Service에서 실행되는 응용프로그램을 개발하는 과정에서 자주 필요성을 느끼게 되는 기능 중 하나는 지금 코드가 호스팅되는 위치가 실제 Windows Azure 데이터 센터 내인지, 에뮬레이터 내인지, 아니면 일반적인 서버 환경인지를 알고자하는 경우입니다. 이러한 위치 구분이 필요한 이유는 바로 코드 재사용성을 위해서인데, 정확하게 구분하기가 쉽지 않은 점이 있습니다.

여기에 대한 다양한 방법과 Workaround가 존재하지만 추천할만한 코드 Snippet이 있어서 글로 정리하여 올려봅니다.

RoleEnvironment.IsAvailable 속성

실제 Windows Azure Cloud Service 환경이거나 에뮬레이터 환경에서 실행되는 경우를 알아낼 수 있는 방법입니다. 이 방법은 Windows Azure 런타임을 사용할 수 있는지 없는지에 대한 구분으로 활용할 수 있고, 에뮬레이터인지 아닌지는 구분할 수 없습니다.

사용 예시

public static bool EnsureRunningInAzureOrDevFabric()
{
    return RoleEnvironment.IsAvailable;
}

RoleEnvironment.DeploymentId 속성

실제 Windows Azure Cloud Service 상에 패키지를 Deploy해서 실행 중인 경우 이 속성에 Guid 값이 부여되므로 .NET Framework FCL이 제공하는 System.Guid.Parse 정적 메서드를 사용하여 Guid로 파싱할 수 있습니다. 파싱에 성공한다면 실제 환경, 그렇지 않다면 에뮬레이터 환경으로 구분할 수 있습니다.

사용 예시

public static bool EnsureRunningInAzure()
{
    Guid guidId;
    return (RoleEnvironment.IsAvailable &&
        Guid.TryParse(RoleEnvironment.DeploymentId, out guidId));
}

한 번만 조회하기

최대한의 효율성을 기하기 위하여, 단순 작업이지만 같은 작업을 여러번 수행할 필요가 없겠지요. 논리적으로 생각해보면, 이와 같은 사항이 코드를 실행하는 실행 시점에서 변경될 일은 2013년 현재의 Windows Azure 플랫폼 스펙으로 볼 때에는 없습니다. 클라우드 서비스가 아닌 환경으로 실행 중인 가상 컴퓨터가 별도 VM으로 분리 이동하는 기능은 제공되지 않으며, 일반적으로 개발자 환경과 실제 데이터센터 환경 사이에 실시간으로 VM을 주고 받을 일 또한 없습니다. 따라서 위의 메서드에 대한 호출 결과를 정적 생성자를 호출하는 시점에만 부르거나 Lazy Initialization으로 다루더라도 전혀 기능에 이상이 없을 것입니다.

유틸리티 클래스로 만들기

아래의 소스 코드는 http://stackoverflow.com/questions/6160947/how-can-i-determine-if-i-am-running-locally-on-my-pc-or-on-the-cloud 에서 발췌한 것임을 밝혀둡니다.

using Microsoft.WindowsAzure.ServiceRuntime;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Sample

{

    public static class CloudEnvironment

    {

        private static bool m_IsRunningAzure = GetIsRunningInAzure();

        private static bool GetIsRunningInAzure()

        {

            Guid guidId;

            if (RoleEnvironment.IsAvailable &&

                Guid.TryParse(RoleEnvironment.DeploymentId, out guidId))

                return true;

            return false;

        }

        public static bool IsRunningInAzure()

        {

            return m_IsRunningAzure;

        }

        private static bool m_IsRunningAzureOrDevFabric = GetIsRunningInAzureOrDevFabric();

        private static bool GetIsRunningInAzureOrDevFabric()

        {

            return RoleEnvironment.IsAvailable;

        }

        public static bool IsRunningInAzureOrDevFabric()

        {

            return m_IsRunningAzureOrDevFabric;

        }

    }

}

Windows Azure Platform에 대한 소개

요즈음 클라이언트 측 운영 체제는 Windows 7으로, 서버 측 운영 체제는 Windows Server 2008 R2로 모든 이목이 집중되고 있습니다. 양쪽 모두 획기적으로 개선된 기능들로 중무장하여 IT 업계를 흔들고 있고, 오랫만에 “이것이 Windows다” 라고 이야기할 수 있을만큼 선전하고 있습니다.


 


이런 추세와는 별개로, 꾸준히 Microsoft가 공을 들여서 선보이고 있는 기술이 하나 있는데, 바로 Windows Azure에 관한 것입니다. Windows Azure는 클라우드 컴퓨팅 기술에 대한 Microsoft의 구현 (Implementation)입니다.


 


Windows Azure는 지난 PDC (Professional Developer Conference) 2008 행사에서 처음 선보였고 현재는 지속적으로 CTP (Community Technology Preview)의 형태로 관련 개발 도구를 제공하고 있습니다. Windows Azure는 Visual Studio 2010과 함께 완전한 개발 도구가 출시될 것으로 현재는 예견되고 있습니다.


 


이야기로는 Windows Azure가 클라우드 컴퓨팅 플랫폼이라는 말이 참 많이 알려져있지만, 구체적으로 어떤 내용들이 포함되고 어떻게 활용될 수 있는지에 대해서 정리해볼 필요가 있다는 생각으로 글을 써봅니다.


 


Windows Azure는 다음의 세 가지 구성 요소로 이루어집니다.


 


Windows Azure: Windows Azure는 클라우드 컴퓨팅 환경 위에서 구동되는 클라우드형 운영 체제입니다. 기존에 우리가 학술적으로 배우고 이해하였던 운영 체제의 개념은 실제 물리적인 컴퓨터 하드웨어 한 대와 실제 사용자 한 명 사이의 창구 개념이었습니다만, Windows Azure에서 소개하는 클라우드형 운영 체제는 조금 다릅니다. 기존 운영 체제의 역할과는 달리, 서비스와 사용자 사이를 중계하는 데에 사용하는 것이 클라우드형 운영 체제의 의미가 될 것입니다.


 


Windows Azure는 다음과 같은 구조를 가지고 있습니다.


 



 


위의 그림은 Windows Azure Fabric의 구조를 설명하고 있습니다. Fabric은 사전적인 의미로 천조각을 뜻합니다만, 여기서의 의미는 사용하고자 하는 컴퓨터의 인스턴스 개체 수를 뜻합니다. 그렇게 보았을 때, Windows Azure 개발자는 Fabric을 필요한 수만큼 할당받아, Fabric Agent와 통신하면서 실제 응용프로그램을 작성하게 됩니다.


 


할당받은 Fabric을 활용하게 되면, 모든 작업은 계산 작업 (Compute)과 저장 작업 (Storage)으로 구분할 수 있습니다. 계산 작업에서는 웹 서비스를 처리하는 것과 백그라운드 작업을 수행하는 것을 가상 머신을 통해서 처리하며, 저장 작업에서는 흔히 생각할 수 있는 BLOB (일반 바이너리 파일이나 데이터)이나 간단한 테이블, 데이터 큐 같은 것들을 저장할 수 있습니다.


 


Windows Azure를 사용한다는 것은 쉽게 생각하면, 기존의 웹 호스팅과 유사합니다. 실제로 Windows Azure를 이용하여 개발하는 응용프로그램 모델은 HTTP를 통하여 통신하기 때문에 더욱 그러합니다. 하지만 어떻게 개발하는지에 따라서 확장 가능성이 더욱 커지고, 이전보다 더욱 풍부한 소프트웨어를 마음껏 개발할 수 있는 것이 중요한 차이점입니다.


 


Windows Azure로 호스팅할 수 있는 응용프로그램의 종류는 생각보다 다양한데, 내부적으로 IIS 7.0과 .NET Framework 3.5 SP1을 사용하기 때문입니다. 더불어서, FastCGI를 지원하므로 PHP와 같은 웹 프로그래밍 언어로 작성된 웹 응용프로그램도 얼마든지 호스팅이 가능합니다. 그리고, 이 환경 안에서 실행되는 .NET Framework 코드들은 Full Trust 환경에서 실행이 가능하므로 비관리 코드 (C/C++ 등으로 작성한 DLL이나 운영 체제의 API들)를 자유롭게 호출할 수도 있습니다.


 


자세한 내용은 http://www.microsoft.com/windowsazure/windowsazure/ 를 참고하십시오.


 


SQL Azure: SQL Azure는 Microsoft SQL Server를 기반으로 제공되는 클라우드형 RDBMS 서비스입니다. 데이터 보안을 완벽하게 유지해야 하는 시나리오가 아니라면, 급증하는 데이터베이스에 대한 요구 사항을 손쉽게 수용할 수 있는 것이 가장 큰 매력입니다.


 


참고로, Windows Azure가 제공하는 Storage 서비스와는 차이가 있습니다. Windows Azure 서비스의 Storage 서비스는 RDBMS와는 무관한 것이며, 응용프로그램에 영속성을 부여하기 위한 목적이 강합니다.


 


SQL Azure가 SQL Server를 기반으로 제공되는 서비스이므로, 당연히 우리가 기존에 사용해 오던 SQL Server Management Tool을 그대로 SQL Azure에서도 사용할 수 있습니다. 그리고 보안 패치나 각종 성능 향상이 자동으로 이뤄지므로 많은 고민 거리들을 머릿속에서 지울 수 있습니다. 그리고 기존에 사용하던 ODBC도 연동이 가능하므로, 일반 데스크톱 응용프로그램에서도 환경에 가변적이지 않은 완벽한 데이터베이스 솔루션을 사용할 수 있습니다. (심지어 VC++ 6.0으로 개발했던 프로그램일지라도 말입니다.) 그리고 PHP 개발자들의 경우, 멀리가서 DB를 찾지 않아도 됩니다. (PHP 전용 프로바이더가 제공됩니다.)


 


자세한 내용은 http://www.microsoft.com/windowsazure/sqlazure/ 를 참고하십시오.


 


Microsoft .NET Services: Microsoft .NET Services는 Windows Azure 위에서 구현된 서비스로, 서로 다른 응용프로그램 사이에 통일된 커뮤니케이션 채널을 만들어서 같은 내용을 공유하고, 송신하거나, 수신할 수 있도록 도와주는 서비스입니다. 여기에는 보통의 텍스트, XML 문서, 그래픽, BLOB과 같이 일상적으로 많이 사용하는 데이터 종류들이 모두 포함됩니다. 다음은 상세한 구조에 대한 그림입니다.


 



 


그림에서 보여지는것처럼, Windows Azure 플랫폼을 기초로 하는 .NET Service Bus는, 서로 다른 응용프로그램을 현대 IT 환경에서 사용하는 다양한 제약 사항들 (방화벽, NAT 등)을 건너뛰고 응용프로그램 사이에 커뮤니케이션 채널을 만드는 과정을 보여주고 있습니다.


 


뿐만 아니라, .NET Service Bus는 아래와 같이 Access Control Service에 대한 내용도 소개하고 있습니다. Access Control Service를 통하여 보안 정책을 설정하고 관리한다면, 의도하지 않았거나 차단 정책에 포함해야 할 상대를 정확히 파악하고 관리하여 서비스 보안에 만전을 기할 수 있습니다. 그리고 무엇보다도, Windows Azure 플랫폼 위에서 실행되므로 다른 Windows Azure 플랫폼과 연동하기가 편리합니다.


 



 


자세한 내용은 http://www.microsoft.com/windowsazure/dotnetservices/ 를 참고하십시오.


 


향후에도 더욱 편리하고 클라우드 컴퓨팅 환경에 필요한 솔루션들이 더 등장할 것입니다만, 이 글을 작성하는 현 시점에서는 이와 같은 서비스들이 선을 보이고 있습니다. 앞으로의 발전 방향이나 추세가 더욱 기대되는 플랫폼입니다.


 


Windows Azure는 현재 CTP 단계에 있으며, 이에 따라 다음과 같은 제한 사항이 있습니다.



  • 총 컴퓨터 사용 가능 시간: 총 2000 시간 (가상 머신 기준)

  • 총 사용 가능 저장소 용량: 총 50GB

  • 총 트래픽 허용량: 매일 20GB 이내

그리고 실제로 서비스가 상용화되면 다음과 같이 가격이 매겨질 것임을 발표한 바 있습니다.



Windows Azure를 테스트해보고 싶으신 분들은 http://www.microsoft.com/windowsazure/getstarted/ 의 내용을 참고하시어 필요한 SDK와 서비스 신청을 완료하실 수 있을 것입니다.