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

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

이번주 포커스/주요 소식

  • New Azure Logic Apps innovation – general availability of cloud-based Enterprise Integration Pack
    • Azure Logic App에서 클라우드 기반의 엔터프라이즈 시스템 연동 기능을 사용할 수 있게 되었습니다. 그중에서도, 이번에 새로 출시된 기능에는 EDI 문서 송수신에 관련된 기능이 포함됩니다.
  • Microsoft Azure Storage Import/Export Announcements
    • Azure Storage 가져오기/내보내기 기능이 정삭 출시되었습니다. 디스크 단위로 데이터를 가져오거나 내보내는 서비스와 해당 플랫폼 별로 실제 데이터 송수신 작업을 처리하는 에이전트 도구도 같이 출시되었습니다.
  • SQL Server next version Community Technology Preview 1.1 now available
    • SQL Server의 차세대 버전의 프리뷰 릴리즈가 Windows와 Linux 용으로 업데이트되어 출시되었습니다. 레드햇 7.3과 우분투 16.10에서의 실행을 지원하게 되었고, 데이터 가져오기 원본 데이터 소스로 MySQL을 사용할 수 있게 개선된 것을 포함, 다수의 개선 사항이 추가되었습니다.
  • AzCopy 5.1.1 Release
    • AzCopy 명령줄 유틸리티를 사용하여 BLOB 저장소 컨테이너 상의 데이터를 고속으로, 효율적으로 가져오거나 저장소로 업로드하는 기능을 수행하고, SDK를 이용하여 추가 개발하지 않고 스크립트 수준에서 자동화 로직을 개발하는데 활용할 수 있습니다. 이번 5.1.1 버전에서는 오픈 소스로 공개된  Azure Storage Data Movement Library 의 기능을 채택하도록 프로그램을 업데이트한 것이 주된 변경 사항입니다.
  • Introducing Microsoft R Server 9.0
    • Microsoft R Server 9.0이 출시되었습니다.

Azure 서비스 공지 사항

아티클, 기고

새로운 제품 및 서비스

활용 및 노하우

웹 캐스트

서드파티 소식

 

 

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

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

[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

ASP.NET Universal Provider 소개

ASP.NET 환경에서 사용자 멤버십, 프로파일, 역할과 세션 상태 관련 기능은 별도의 공급자 클래스에 의하여 구현되는 경우가 많은데, 이러한 공급자 클래스들은 개발자 스스로 원한다면 별도로 정의하여 각자의 서버 및 네트워크 인프라에 맞추어 다시 작성할 수 있습니다. 하지만 이렇게 작업하기에는 녹록치 않은 면들이 많고, 또 실제로 많은 테스트와 검증 과정이 뒷받침되어야 할 필요가 있습니다.


최근에는 SQL Server Compact Edition이나 SQL Server 2012에서 소개된 SqlExpress 또는 SQL Azure와 같이 전통적인 SQL Server 환경이 아닌 곳을 기반으로 택해야 하는 일도 자주 있습니다. 이러한 경우 많은 시행 착오와 오류를 경험할 수 밖에 없는데, 이러한 문제를 크게 덜어줄 유용한 기술이 하나 있습니다. 바로 ASP.NET Universal Provider이며, 향후 Microsoft가 언급하는 Hybrid Cloud Computing 환경에서의 단일 프로그래밍 모델을 구현하기 위한 초석으로 자리매김할 것으로 예상됩니다. 🙂


ASP.NET Universal Provider의 구성


ASP.NET Universal Provider는 다음과 같은 구성을 가지고 있습니다.



  • System.Web.Providers.DefaultMembershipProvider
    (기존의 System.Web.Security.SqlMembershipProvider에 대응)

  • System.Web.Providers.DefaultProfileProvider
    (기존의 System.Web.Profile.SqlProfileProvider에 대응)

  • System.Web.Providers.DefaultRoleProvider
    (기존의 System.Web.Security.SqlRoleProvider에 대응)

  • System.Web.Providers.DefaultSessionStateProvider
    (내장된 세션 상태 관리 공급자를 대체)

ASP.NET Universal Provider를 Visual Studio의 확장 패키지 갤러리 (NuGet 갤러리)를 통하여 설치하게되면 위의 각 공급자에 대한 설정을 현재 ASP.NET 프로젝트 상의 web.config 파일에 지정하게되고, 데이터 소스를 어떻게 선택하는지에 따라서 미리 구성된 데이터 스키마에 맞추어 관련된 서비스 기능을 수행할 수 있도록 맞추게 됩니다.


ASP.NET Universal Provider 설치하기


ASP.NET Universal Provider는 Nuget Package Install Site에서 손쉽게 asp.net 프로젝트에 추가할 수 있습니다. Visual Studio나 Visual Web Developer를 설치한 경우 Nuget Console에서 아래 패키지 이름을 검색하여 기존 프로젝트에 추가하시면 됩니다. 



패키지 설치가 끝나면 web.config 파일에 아래와 같이 Membership, Role, Profile, Session State에 대한 설정을 Universal Provider로 업데이트합니다.


<configuration>
    <connectionStrings>
        <add name=”DefaultConnection” connectionString=”Data Source=.SQLEXPRESS;AttachDbFilename=|DataDirectory|aspnet.mdf;Initial Catalog=aspnet;Integrated Security=True;User Instance=True;MultipleActiveResultSets=True” providerName=”System.Data.SqlClient”/>
    </connectionStrings>
    <system.web>
      <profile defaultProvider=”DefaultProfileProvider” >
        <providers>
          <add name=”DefaultProfileProvider” type=”System.Web.Providers.DefaultProfileProvider” connectionStringName=”DefaultConnection” applicationName=”/”/>
        </providers>
      </profile>
      <membership defaultProvider=”DefaultMembershipProvider”>
        <providers>
           <add name=”DefaultMembershipProvider” type=”System.Web.Providers.DefaultMembershipProvider” connectionStringName=”DefaultConnection”
             enablePasswordRetrieval=”false” enablePasswordReset=”true” requiresQuestionAndAnswer=”false” requiresUniqueEmail=”false”
             maxInvalidPasswordAttempts=”5″ minRequiredPasswordLength=”6″ minRequiredNonalphanumericCharacters=”0″ passwordAttemptWindow=”10″
             applicationName=”/” />
        </providers>
      </membership>
      <roleManager defaultProvider=”DefaultRoleProvider”>
        <providers>
           <add name=”DefaultRoleProvider” type=”System.Web.Providers.DefaultRoleProvider” connectionStringName=”DefaultConnection” applicationName=”/” />
        </providers>
      </roleManager>
      <sessionState mode=”Custom” customProvider=”DefaultSessionProvider”>
        <providers>
          <add name=”DefaultSessionProvider” type=”System.Web.Providers.DefaultSessionStateProvider” connectionStringName=”DefaultConnection” applicationName=”/”/>
        </providers>
      </sessionState>
    </system.web>


위의 설정에서 DefaultConnection에 적절한 연결 문자열과 함께 정확한 providerName을 기재하면 Universal Provider가 정확한 ADO.NET Connection Driver를 사용하여 필요한 서비스들을 제공하게 됩니다. 이렇게 만듦으로서 SQL Azure는 물론 기존 SQL Server, SQL Server CE를 데이터 원본으로 선택할 수도 있습니다.


좀 더 자세한 정보 알아보기


패키지의 최신 업데이트 정보와 설치 방법은 아래 웹 사이트에서 확인할 것을 권합니다.


http://nuget.org/packages/System.Web.Providers/1.0.1


구체적인 사용 방법과 시나리오에 대해서는 Scott Hanselman의 블로그 아티클을 참고하시기 바랍니다.

http://www.hanselman.com/blog/IntroducingSystemWebProvidersASPNETUniversalProvidersForSessionMembershipRolesAndUserProfileOnSQLCompactAndSQLAzure.aspx

 

Windows Azure 코드 샘플 컬렉션

Windows Azure 코드 샘플을 한 곳에 모아서 찾아보기 쉽게 만든 블로그 아티클이 있어서 올려봅니다. Windows Azure 실전 예제에 관심있으신 분들께 도움이 되셨으면 합니다. 🙂
예제 응용프로그램

아키텍처 및 디자인 예제

  • 코드 갤러리
    • 동적 스케일링 샘플 – 처리량에 대응하여 동적으로 인스턴스의 수가 늘어나고 줄어드는 것을 보여주는 다중 역할 샘플입니다: http://code.msdn.microsoft.com/azurescale
  • 본사 DPE 부서에서 작성한 예제
    • Project Riviera – 동적 스케일링 샘플에서 더 확장된 예제로, 윈도 애저 스토리지, Windows Workflow, 액티브 디렉터리 페더레이션 서비스, Patterns & Practices Enterprise Library 캐싱 및 로깅 응용프로그램 블럭, 윈도 라이브 ID 인증 등 엔터프라이즈 및 아키텍처에서 등장하는 기술들이 골고루 사용된 고급 샘플입니다: http://code.msdn.microsoft.com/riviera
  • Patterns & Practice – Windows Azure Platform을 위한 아티클이 새로 업데이트되고 있는 중입니다.

클레임 / 아이덴티티 예제

환경 설정

데이터 액세스 및 스토리지 예제

응용프로그램 배포

일반적인 내용들

로깅 및 운영 전략

기존 응용프로그램을 클라우드로 마이그레이션
서비스 버스 (AppFabric)
서비스 관리 API
SQL 애저
WCF (Windows Communication Foundation)
윈도 애저 스토리지

Windows Azure Update: Microsoft Project Code-Named “Houston” CTP 1

바로 가기: https://www.sqlazurelabs.com/houston.aspx


안녕하세요. Visual C# MVP 남정현입니다. Hello Windows Azure와는 별도로, Windows Azure Platform 및 Windows Azure 관련 커뮤니티 소식, Labs 프로젝트, 신 기술을 집중적으로 조명하는 Article을 비정기적으로 “Windows Azure Update” 시리즈를 통하여 소개할 예정입니다. 많은 관심 부탁드립니다.


Windows Azure Platform에서 가장 많은 관심과 아쉬움의 대상이었던 SQL Azure에 대한 사용자들의 갈증을 풀어줄 시원한 도구가 하나 등장했습니다. 바로 Codename: Houston이 그 주인공인데요, 간단히 요약하면 Silverlight로 제공되는, 웹 브라우저에서 쉽게 접속하여 사용할 수 있는 SQL Azure Database 관리 도구입니다. 일단 접속 화면부터 살펴보기로 할까요?



SQL Management Studio Express를 이용하는 것과 유사한 화면을 보실 수 있습니다. 접속할 SQL Azure 서버의 호스트 이름을 찾아서 넣고, 접근할 데이터베이스의 이름을 입력한 후, 관리자 ID와 비밀 번호를 넣고 Connect 버튼을 클릭하면 아래와 같이 접속 중임을 표시하는 화면이 나타납니다.



잠시 더 기다리면 멋진 초기화면이 나타납니다. 이런 스타일의 화면을 웬지 오랫만에 보는것 같군요. 🙂



접속한 데이터베이스의 상태를 한눈에 파악할 수 있는 Dashboard가 Start Page에 나타납니다. 화면에서 알 수 있듯이, 탭 페이지 방식으로 여러 화면을 구성할 수 있도록 되어있습니다. 그리고 우리가 평소에 사용하던 Microsoft Access의 버전 2007 이후부터 도입된 Ribbon UI를 사용한다는 것 또한 한눈에 들어옵니다. Dashboard에 또 다른 정보들이 어떤 것이 나타나는지 잠시 살펴볼까요?





사용량 정보가 상세하게 나타납니다. 그리고, 다소 식상하게 비칠지도 모르는 Help Links가 한 면을 차지하고 있군요. 현재 공개된 CTP 버전에서는 이 정도의 기능을 제공하는 것으로 나타나지만 좀 더 많은 사용자들의 의견이 더해짐에 따라서 매우 유용한 기능이 앞으로 이곳에 추가될 것 같습니다. 🙂



네. 그렇습니다. 정말 그리웠던 기능이죠. 시각적으로 테이블의 스키마를 편집할 수 있다는 사실은 정말 중요할 수 있습니다. SQL Management Studio Express를 이용해서 접속했어도 사용할 수 없었던 그 기능이 드디어 SQL Azure와 Codename: Houston의 만남으로 가능하게 된 것입니다. 그리고 이미 만들어진 테이블이라 할지라도 매우 편리하게 테이블의 이름을 아래 그림과 같이 수정할 수 있습니다.




그리고 Column을 추가하는 것도 무척 쉽습니다. 하단의 “+ Column” 버튼을 클릭하는 것 만으로도 손쉽게 추가가 됩니다. 아래 그림과 같이 새 Column이 추가되었다는 것도 시각적으로 잘 보여집니다.



그러면 이제 데이터 조회 기능을 살펴보도록 하겠습니다.



당연한 기능이지만 Codename: Houston에서 이러한 화면을 보고 있으니 더욱 놀랍게 비추어지는것 같습니다. 🙂 데이터 집합 말고도, 서버로부터 직접 전달받은 메시지도 Messages 탭을 클릭하면 아래와 같이 잘 보여집니다.



아래의 두 Screenshot은 View와 Stored Procedure를 생성하는 편집 화면입니다. 참고로 Stored Procedure는 매개 변수를 시각적으로 선택하고 관리할 수 있으므로 Stored Procedure의 본문만을 집중하여 편집하면 됩니다.





만약 저장되지 않은 상태에서 오른쪽 상단의 Logout 버튼을 클릭할 경우 아래와 같이 경고 메시지도 나타나게 됩니다.



여기까지, 간단했지만 초고속으로 살펴본 Codename: Houston의 모습이었습니다. 사용해보고 싶으시다구요? https://www.sqlazurelabs.com/houston.aspx 페이지를 방문하시면 Codename: Houston을 무료로 사용해보실 수 있습니다. 별도의 가입 절차나 등록 절차가 없으니 자유롭게 이용해보시기 바랍니다. 참고로, 아직은 Out-of-browser Application Type으로는 이용하실 수 없으니 Google Chrome의 Application Link 생성 기능을 이용하여 URL 자체를 창으로 띄울 수 있도록 구성하시면 더욱 편리하게 이용하실 수 있을 것입니다.


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와 서비스 신청을 완료하실 수 있을 것입니다.


 

Informix, Oracle, MSSQL을 위한 테이블 구조 확인 SQL문

실무에서 Enterprise Manager류의 유틸리티를 직접 이용할 수 없을 경우 재빠르게 스키마를 확인해볼 수 있는 스크립트 세 종류를 올려 봅니다.


— Informix의 Column 상세 내역 살펴보기
select a.* from syscolumns a, systables b
where (a.tabid = b.tabid) and (b.tabname = ‘테이블 이름’)


— Oracle의 Column 상세 내역 살펴보기
select * from sys.all_tab_cols
where table_name = ‘테이블 이름’;


— Microsoft SQL의 Column 상세 내역 살펴보기
use ‘대상 DB 이름’;
select a.* from syscolumns a, sysobjects b
where (a.id = b.id) and (b.name = ‘테이블 이름’);

Microsoft Jet를 사용하면서 발생할 수 있는 문제 몇 가지에 대한 대처법

Microsoft Jet를 사용하면 상당히 편리한 부분이 많다. 물론 많은 부분을 놓치기는 하지만 오히려 일을 간단하게 만들어줄 수도 있는 것이 사실이다. 오늘 내가 올려볼 글은 Microsoft Jet로 Microsoft Access DB에 데이터를 쓰려고할 때 발생할 수 있는 몇 가지 상황에 대한 해결책을 소개하는 글이다.

* INSERT와 UPDATE를 OleDbParameter 객체로 수행하고 싶은데 잘 안되나요?

INSERT와 UPDATE를 OleDbParameter 객체로 수행하기 전에 살펴볼 몇 가지가 있다. 쿼리문에서 지정한 순서대로 Parameter 컬렉션에 Add 함수를 호출하여 추가해주고 추가한 객체의 Value 속성에 반드시 정확한 값을 기재해야 한다. 물론 이것을 실행하기에 앞서서 Clear 메서드로 추가된 모든 파라미터를 제거하는 것은 기본이다.

만약 한 번 만들어놓은 OleDbCommand 객체를 여러 차례 재사용하는 방식의 패턴을 사용 중이라면 OleDbCommand 객체가 올바르게 초기화되지 않았을 상황도 가정해보는 것이 좋다. 이럴 때에는 Command 객체 내의 Connection 객체가 우선 아직 살아있는 지의 여부를 먼저 살펴보고 살아있다면 CreateCommand 메서드를 호출하여 다시 해당 Command 객체에 대입해본다. 대개의 경우 이러한 방식으로 일명 “꼬임” 현상이 해결된다.

* 여러 개의 Data Reader를 열어놓고 써야 하는데 에러나요!

당연한 이야기이지만 Microsoft Access는 다중 연결을 지원하지 않는다. 하지만 다중 연결은 언제나 필요하다. 방법이 없을까? ADO .NET의 DataTable 객체가 그 해답이다. .NET 2.0 이전에서는 OleDbDataReader 객체를 닫기 전에 DataTable에 먼저 데이터를 저장하는 루틴을 따로 프로그래밍하면 되고, .NET 2.0 이후에는 DataTable의 새로운 Load 메서드를 사용하면 된다. 그리고 .NET 2.0 만의 특별한 기능이라면 이렇게 만들어진 DataTable에 대해 전용 IDataReader 객체를 얻어올 수 있다는 점이다.

그럼 이와 같은 방법은 결국 무엇인가? 바로 스냅샷 채집 기법이다. Microsoft Access를 데이터 소스로 사용한다는 것은 몇 가지 전제가 따르는데 그 중 하나가 동시성을 인정하지 않는다는 점이다. 따라서, 이런식으로 작업하더라도 큰 문제는 없다고 본다.

* 트랜잭션을 사용하고 있다면 반드시 꼼꼼히 체크해볼 것!

Microsoft Access도 트랜잭션은 지원한다. 그러므로 트랜잭션을 사용하고 있다면 정확하게 체크해야 한다. 트랜잭션도 제대로 마무리 짓지 않고 안된다고 소리치면 나중에 원인이 드러났을 때 얼굴 붉힐 일이 문제다.

* ExecuteNonQuery 함수를 우습게 보지 마라!

ExecuteNonQuery 함수의 반환 값을 의외로 무시하는 경향이 있다. 무시하면 안된다. 이 함수의 반환 값으로 쿼리가 잘 실행되었는지 아닌지를 판별할 수 있는 기준이 된다. 물론 데이터 프로바이더가 의도적으로 반환 값을 누락할 수도 있다. 하지만 이런 프로바이더는 도덕적으로 매우 문제가 심각한 제품이다.

DB 연결 문자열 찾으러 멀리가지 마세요!

유명한 데이터베이스들에 접근하기 위한 연결 문자열 컬렉션을 제공하는 사이트가 있다. 흔히 사용하는 데이터베이스는 물론 데이터 파일, 액티브 디렉터리등에 연결할 수 있도록 해주는 연결 문자열을 모아놓았다. 보잘것 없어뵈지만 절대 보잘것 없지 않은 그런 사이트이니 북마크에 빠지면 안되겠다.

http://www.connectionstrings.com

SQL-Injection을 비즈니스 계층에서 해결하기

오랫만입니다. 얼마전에 해킹 존에 올린 프로그램은 잘 사용하고 계시겠지요? 소리바다에서 제공하는 “파도”라는 플레이어를 비롯한 PLA 포맷을 지원하는 대부분의 오디오 플레이어에서 유용하게 쓰실 수 있을겁니다. ^^


오늘은 대부분의 데이터 베이스 기반 웹 사이트들이 겪는 보안 상의 취약점인 SQL-Injection을 해결하는 범용적인 솔루션을 연구해 보도록 하지요.


SQL-Injection이란, 매개 변수를 강력하게 검사하지 않고 문법의 일부로 더하는 프로그램에서 흔하게 벌어지는 공격 기법입니다. 유별난 공격법이 아니지만 막대한 양의 정보가 한꺼번에 유출되거나, Microsoft SQL Server와 같이 관리자에게 너무나도 풍족한 리소스를 주는 데이터 베이스 서버에서는 다른 파티션을 포맷하는것까지도 가능하게 합니다. (SQL Server에서 기본으로 제공하는 스토어드 프로시저 중에는 셸 명령을 실행할 수 있도록 하는 프로시저도 제공됩니다. 얼마든지 응용하기 나름인 셈이지요.) 무시무시한 이야기이지요.


SQL-Injection이 어떻게 벌어지는지 그 과정을 살펴보도록 하지요.


string commandText = “SELECT * FROM USERS WHERE USER_ID=’” + value + ““;


위와 같은 코드를 IDbCommand.CommandText에 지정하고 ExecuteReader() 등으로 실행하면 원하는 결과가 나오리라 흔히 생각합니다. 하지만 큰 착각입니다. value에 무엇이 들어가느냐에 따라서 다음과 같이 크게 변조되니까요.


value = “admin“; // 이것이 흔히 기대하는 형태입니다.


// 완성된 질의문: “SELECT * FROM USERS WHERE USER_ID=’admin


value = “admin’ AND USER_NAME=’관리자“; // 이와 같이 변형될 수 있습니다.


// 완성된 질의문: “SELECT * FROM USERS WHERE USER_ID=’admin’ AND USER_NAME=’관리자


이런 엄청난 사태가 발생하지 않도록 하려면 몇 가지 해결책이 있습니다.


1. 동일한 기능을 수행하는 스토어드 프로시저 또는 함수를 데이터 베이스 서버에 직접 구축하고, 웹 어플리케이션은 단지 이것을 호출하는 것으로 구조를 변경합니다. 위와 같이 문자열이 전달되었을 경우 “admin’ AND USER_NAME=’관리자” 라는 문자 자체가 하나의 값으로 처리되고, 질의문, 스토어드 프로시저, 함수의 기능에는 영향을 주지 않으므로 제일 안전하고 빠른 방법입니다.


2. 강력한 형식 검사를 수행합니다. 이것이 오늘 살펴볼 방법이며, 위와 같이 스토어드 프로시저나 함수를 지원하지 않는 데이터 베이스에서도 유용하게 쓰일 수 있는 방법입니다. 프로그래밍 방식으로서, 비즈니스 계층 단위로서 문제를 해결할 수 있는 것이 특징입니다.


코드 살펴보기


아래의 함수는 문제가 될 수 있는 문자열을 제거하는 기능을 수행합니다. pattern이라는 매개 변수에는 제거하고 싶은 문자를 지정하며, 이스케이프 시퀀스가 필요한 문자인 백슬래시, 작은 따옴표, 큰 따옴표와 공백 문자 등을 지정합니다.



    public static string EnsureString(string pattern, string target)
    {
       bool flag = false;
       StringBuilder sb = new StringBuilder(target.Length);

       for(int i=0; i<target.Length; i++)
       {
           for(int j=0; j<pattern.Length; j++)
           {
               // 조건에 해당되는 문자임을 통지하고 검사 과정을 파기합니다.
               if(target[i].Equals(pattern[j]))
               {
                   flag = true;
                   break;
               }
           }


           // 조건에 해당하는 문자임을 확인하고 검사 문자를 생략합니다.
           if(flag)
           {
               flag = false;
               continue;
           }


           // 검사 조건에 해당하지 않는 문자이므로 추가합니다.
           sb.Append(target[i]);
       }

       return sb.ToString();
    }


위의 함수를 사용하여 SQL-Injection을 막아보도록 하겠습니다.


string commandText = “SELECT * FROM USERS WHERE USER_ID=’” + EnsureString(“‘””, value) + ““;


// 공격 예시: “admin’ AND USER_NAME=’관리자“;


// 방어 결과: “admin AND USER_NAME=관리자“;


// 질의문 결과: “SELECT * FROM USERS WHERE USER_ID=admin AND USER_NAME=관리자


스토어드 프로시저나 함수를 이용했을 때와 같은 결과를 얻게 되었습니다. 이 함수를 사용함으로서 얻을 수 있는 또 하나의 장점은 이것이 SQL 질의문이 아니라 연결 문자열 등에도 활용될 수 있다는 점이며, 파일이나 디렉터리 경로를 통한 공격도 비슷한 형태로 막아낼 수 있다는 것이 장점입니다. 그리고 패턴은 얼마든지 추가가 가능하므로 공격 정보만 수집되면 몇 글자 추가하는 것으로 이와 유사한 형태의 공격을 방어할 수 있을 것입니다.


설날이 어느덧 돌아왔군요. 모두들 맛있는 떡국들 많이 드시고 올 해도 건강하십시오. ^^