이번 PDC 2010에서 공개된 Windows Azure의 개선 사항 및 향후 업데이트 내용들을 한번에 정리하여 블로그 포스트로 올립니다.

엔터프라이즈 클라우드를 위한 개선 사항

  • 가상 컴퓨터 역할 (VM Role - http://www.microsoft.com/windowsazure/compute/#vmrole)이 추가되어, 기존의 Windows 응용프로그램은 물론 새 Windows 기반 응용프로그램도 Windows Azure에서 직접 실행할 수 있는 환경이 마련됩니다.
  • 웹 역할은 IIS 7.5 전체 사양 지원을 통하여, 좀 더 완성된 웹 응용프로그램과 미들웨어를 Windows Azure에서 호스팅할 수 있게 되었습니다.
  • 웹 역할과 작업자 역할의 경우, 관리자 권한 개념이 추가되어 소프트웨어 구동에 필요한 COM 서버, ActiveX 컨트롤, COM+ 서버 등을 64비트 내의 32비트 호환 모드 - 또는 - 64비트 모드에서 미리 설치하여 구성할 수 있게 되어 더욱 다양한 서버 환경을 호스팅할 수 있게 되었습니다.
  • 원격 데스크톱 기능을 각각의 인스턴스에 허용하여, 실행 중인 인스턴스에서 발생하는 다양한 문제점을 Windows Azure Team의 기술 지원이 완료되기까지 기다리지 않고 직접 관리자 재량으로 수행할 수 있는 방안이 제공됩니다. 이는 웹 역할, 작업자 역할에도 동일하게 적용됩니다.
  • 새로운 클라우드 기반의 네트워킹 기능이 Windows Azure 가상 네트워크 아래에서 제공되며, 첫 단계로 Windows Azure Connect가 (http://www.microsoft.com/windowsazure/virtualnetwork/default.aspx) 현재 CTP 발표 준비 중에 있습니다. Windows Azure Connect는 이전에 Codename: Sydney로 발표된 적이 있었으며, IP 기반의 네트워크를 기존의 온 프레미스 환경과 Windows Azure의 클라우드 환경 사이에 형성할 수 있도록 하여 Windows Azure의 다양한 리소스를 인터넷이 아닌 로컬 네트워크 수준에서 손쉽게 관리하고 공유할 수 있는 메카니즘을 제공하게 됩니다.

더욱 합리적인 플랫폼 접근

클라우드 컴퓨팅을 운영하면서 가장 이슈가 되는 부분은 비용에 관한 부분이며, 이에 대한 답으로 이번 PDC 2010에서는 최대한 저렴하게 개발하고 테스트할 수 있는 방안으로 기존의 소형 인스턴스 요금보다 최대 50% 이상 저렴한 Extra Small 인스턴스를 제공합니다. 그리고 Microsoft 파트너 회원사를 위하여 Cloud Essential Pack 요금제의 출시를 앞두고 있다는 소식도 있습니다. (http://www.microsoft.com/windowsazure/faq/#partners)

향상되는 서비스

  • 실버라이트 기반의 새 Windows Azure 포털 서비스는 이전과는 완전히 다릅니다. 더 사용하기 쉽고, 더 직관적이며, 더욱 강력한 기능들을 제공할 것입니다.
  • 현재 제공되는 진단 정보 (Diagnostic Information)에 새로운 항목이 더 추가됩니다. 역할의 종류를 확인하고, 배포된 시간과, 최근 해당 인스턴스나 역할이 다시 기동된 시점을 알아볼 수 있습니다.
  • 새로운 가입 절차를 기획 중에 있으며, 이를 통하여 지금보다 더 빠르고 간편하게 Windows Azure 서비스에 가입할 수 있게 될 것이라고 합니다.
  • 시나리오 기반의 Windows Azure Platform 포럼을 통하여 다양한 상황에 따라 손쉽게 대처하고 도움을 구할 수 있는 커뮤니티 및 피드백 시스템을 형성해 나갈 것이라고 합니다. (http://social.msdn.microsoft.com/Forums/en-US/category/windowsazureplatform)
  • Windows Azure Marketplace가 새로 발표되었습니다. Windows Azure Marketplace에는 향후 여러 종류의 마켓이 추가될 것이며 여기에는 데이터 뿐만 아니라 소프트웨어, 서비스, 빌딩 블럭 등 클라우드 환경 구축에 필요한 다양한 제품의 판매를 목적으로 합니다. 첫 번째 마켓으로, Codename: Dallas가 정식으로 DataMarket(https://datamarket.azure.com/)으로 데뷔합니다.

2011년 중에 발표될 예정인 업데이트들

  • 동적 컨텐츠 캐시: 지금은 BLOB 저장소에서 공개 권한으로 열려있는 파일에 대한 CDN 서비스만이 가능하지만, 직접 운영하는 Windows Azure 응용프로그램에서 API를 사용하여 CDN 서비스로 게시할 컨텐츠를 직접 설정할 수 있게 됩니다.
  • CDN SSL 지원: 현재는 일반적인 유형의 CDN 서비스가 제공되지만, SSL/TLS 기반의 암호화된 내용을 바탕으로 데이터를 전달하는 CDN 서비스가 추가될 예정입니다.
  • CDN 노드 추가 개설: 중동 국가들을 경유하는 노드가 추가될 예정에 있으며, 현행 미국과 브라질 간 연결 속도를 더 개선할 예정입니다.
  • 주문형 VM 역할 제작 서비스: VM 역할이 발표된 직후에는 온 프레미스 환경의 Windows Server 2008 R2 기반의 컴퓨터만을 Physical to Virtual (P2V) 도구를 이용하여 VM 역할로 변환이 가능하지만, 새로운 인스턴스의 생성을 관리 도구 수준에서 가능하게 할 예정입니다. 이는 기존의 가상화 기반 클라우드 서비스들이 제공하는 것과 동일한 컨셉입니다.
  • 2011년 중에 VM 역할로 사용할 수 있는 서버 운영 체제로 Windows Server 2003과 Windows Server 2008 SP2가 추가될 것입니다. 발표 직후에는 Windows Server 2008 R2에만 한정됩니다.
  • Java 개발자를 위한 지원 향상: 현재와 같이 Visual Studio - 또는 - Visual Web Developer에 JRE나 JDK를 같이 배포하는 방식이 아닌, Java를 직접 Windows Azure 개발 환경에 사용할 수 있도록 Eclipse용 개발 도구와 라이브러리가 향상될 것이며, 2011년 중에 이에 대한 새로운 내용이 발표될 것입니다. 이로서 Windows Azure를 이용하는 사업자는 .NET 이외에도 Java를 프로그래밍 언어로 직접 선택할 수 있습니다. Microsoft는 이러한 전략에 대하여, Java를 Windows Azure의 First Citizen으로 향상시키는 것으로 표현하고 있습니다.

출처: http://blogs.msdn.com/b/windowsazure/archive/2010/10/28/you-spoke-we-listened-and-responded.aspx

저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

Windows Azure에서 Java 기반의 응용프로그램을 만들고 호스트할 수 있다는 이야기는 지속적으로 제시되어왔었습니다. 하지만, JSP 서블릿 페이지도 Windows Azure에서 호스트할 수 있을까요? Microsoft Architect로 활동 중인 David Chou가 작성한 블로그 포스트에 답이 있습니다. 오늘 제가 올리는 블로그 포스트는 다음 포스트에 대한 설명을 기초로 중요한 부분을 추출한 것임을 밝힙니다. (http://blogs.msdn.com/b/dachou/archive/2010/03/21/run-java-with-jetty-in-windows-azure.aspx)

Jetty (http://jetty.codehaus.org/) 프로젝트는 자바 기반의 오픈 소스 웹 서버로, HTTP 서버로서의 역할과 서블릿 컨테이너의 기능을 제공합니다. 정적, 동적 컨텐츠를 모두 지원하고, 독립적으로 실행할 수도 있고, 다른 프로세스에 부착되어 실행되는 기능 또한 제공됩니다. 이러한 특성을 바탕으로, Apache Project의 ActiveMQ, Cocoon, Hadoop, Maven Project, BEA Web Logic Event Server, Eucalyptus, FioranoMQ Java Messaging Server, Google AppEngine 및 안드로이드, Eclipse용 웹 툴킷 플러그인, 레드햇 J보스, Sonic MQ, 스프링 프레임워크, 사이베이스 EA서버, 짐브라 데스크톱 등 광범위하게 Jetty가 채택되고 있습니다.

Jetty 프로젝트는 아래와 같은 기능들을 제공합니다.

  • 비동기 HTTP 서버
  • 표준 지향의 서블릿 컨테이너
  • 웹 소켓 서버
  • 비동기 HTTP 클라이언트
  • OSGi, JNDI, JMX, JASPI, AJP 지원

응용프로그램 컨테이너의 관점에서 보면, Jetty는 전통적인 Java 기반의 Web Application Server들 (Tomcat과 같은)을 대치하는 배포 방법으로 사용될 수 있으며, 스프링 프레임워크 및 관련된 모든 파생 프로젝트들, EJB 컨테이너 등 대부분의 일반적인 웹 기반 자바 어플리케이션을 손쉽게 제공할 수 있는 것이 특징입니다.

Windows Azure에서의 Java 기술 지원

PDC'09 이후로 http://code.msdn.microsoft.com/winazuretomcat 웹 사이트를 통하여 Windows Azure 환경 위에서 Tomcat을 이용하여 JSP 기반 웹 응용프로그램의 구동 가능 여부와 샘플 코드를 지속적으로 홍보해왔었습니다. 그리고 이러한 사실을 바탕으로 http://blogs.msdn.com/jonbox/archive/2009/11/17/domino-s-demonstrates-tomcat-site-on-windows-azure.aspx 에서는 도미노 피자의 기존 피자 온라인 주문 웹 서비스를 Windows Azure 환경에서 구동하는 사례도 선보였습니다. 아래는 그동안 언급되거나 발표되어왔던 Windows Azure 환경에서의 Java 구동 방법에 관한 간략한 리스트입니다.

  • http://code.msdn.microsoft.com/winazuretomcat
  • http://www.interoperabilitybridges.com/projects/windows-azure-sdk-for-java.aspx
  • http://microsoftpdc.com/Sessions/SVC50
  • http://blogs.msdn.com/jonbox/archive/2009/11/17/domino-s-demonstrates-tomcat-site-on-windows-azure.aspx
  • 그러나 위에서 언급하는 Tomcat만이 Windows Azure 환경에서 사용할 수 있는 유일한 Web Application Server의 종류는 아닙니다. 사실, 위의 접근 방법들은 모두 Windows Azure Role에 함께 첨부되어 배포되는 Java 실행 환경 (JRE)를 기초로 하는 것이고, 그러므로 어떤 종류의 Java 패키지이든 관계없이 명령줄을 통하여 Classpath를 명시하는 방식으로 실행될 수 있습니다. 대개의 경우, 작업자 역할 (Worker Role) 패키지 위에서 실행되도록 디자인되고, Windows Azure 환경으로 배포될 수 있습니다. 그리고, 당연한 이야기이지만 Java와 Fast CGI를 결합하고, IIS 7.x를 기반으로 Fast CGI를 지원하는 Web Role을 이용할 수도 있습니다. 이 부분은 나중에 좀 더 자세히 소개하도록 하겠습니다.

    Windows Azure 환경에서 Jetty 실행

    아래는 실제 Windows Azure 환경에서 Jetty를 기반으로 실행하는 Windows Azure Worker Role의 구동 예시입니다.

    위와 같이 구현하기 위한 방법을 지금부터 차례대로 따라해보기로 하겠습니다.

    1. Windows Azure Worker Role 프로젝트를 만들고, Worker Role 진입점 메서드인 Run 메서드의 중심부에 다음과 같이 프로그래밍합니다.

    string response = "";
    try
    {
        System.IO.StreamReader sr;
        string port = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["HttpIn"].IPEndpoint.Port.ToString();
        string roleRoot = Environment.GetEnvironmentVariable("RoleRoot");
        string jettyHome = roleRoot + @"\approot\app\jetty7";
        string jreHome = roleRoot + @"\approot\app\jre6";
        Process proc = new Process();
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.StartInfo.FileName = String.Format("\"{0}\\bin\\java.exe\"", jreHome);
        proc.StartInfo.Arguments = String.Format("-Djetty.port={0} -Djetty.home=\"{1}\" -jar \"{1}\\start.jar\"", port, jettyHome);
        proc.EnableRaisingEvents = false;
        proc.Start();
        sr = proc.StandardOutput;
        response = sr.ReadToEnd();
    }
    catch (Exception ex)
    {
        response = ex.Message;
        Trace.TraceError(response);
    }

    제가 이전에 게시한 글 "[Software Development/Windows Azure] - Windows Azure 들여다보기"에서 언급한 내용들을 참조하여 위의 코드를 보시면 이해하기 쉽습니다. 몇 가지 Windows Azure 환경에서 기본으로 제공되는 환경 변수, 디렉터리 설정 등을 바탕으로 Jetty 프로세스를 Java VM (java.exe)를 통하여 실행하도록 명령어를 구성하고 실행한 다음, 표준 출력의 내용을 Windows Azure Worker Role Process로 가져오도록 만드는 것을 볼 수 있습니다.

    2. Jetty 프로젝트와 Java VM의 최신 버전을 Windows Azure Worker Role 프로젝트에 추가합니다.

    다음 그림과 같이 폴더를 구성하면 되겠습니다. jetty7 폴더와 jre6 폴더 아래에 직접 해당 프레임워크 및 시스템의 실제 디렉터리 구조가 오도록 맞추면 문제 없습니다. 참고로, 확실하게 동작할 수 있도록 만들기 위하여 Java VM의 경우는 특별히 Windows Platform을 기반으로하는 x64 아키텍처 버전을 다운로드하여 아래 그림과 같이 넣어두어야 합니다. (중요)

    3. ServiceDefinition.csdef 파일 수정하기

    1단계에서 사용한 HttpIn이라는 설정을 Worker Role에 추가해야 하므로, ServiceDefinition.csdef 파일을 찾아 "WorkerRole" 요소 아래에 다음과 같이 내용을 추가하고 저장합니다. 참고로 이 설정은 Windows Azure Worker Role이 80번 TCP 포트 통신이 필요함을 Windows Azure 환경 내의 방화벽에게 통지하기 위한 목적으로 사용됩니다.

    <Endpoints>
      <InputEndpoint name="HttpIn" port="80" protocol="tcp" />
    </Endpoints>

    4. Windows Azure에서 사용할 수 있도록 Jetty 환경 설정

    Jetty가 사용되거나 환경 설정을 만드는 방법은 Windows Azure 환경에서 여러 가지가 있을 수 있지만, 특별히 이와 같이 Worker Role 위에서 Standalone Server로 동작하기 위하여 필요한 환경 설정이 있어서 이를 소개합니다. Windows Azure 환경에서는 Jetty가 기본으로 사용하는 NIO ChannelConnector 대신 BIO SocketConnector를 사용하도록 구성해야 합니다. NIO ChannelConnector에서는 내부적으로 루프백 연결을 기초로 하지만 Windows Azure 환경에서는 이것이 가로막혀있기 때문이라는 것이 David Chou의 설명입니다.

    이러한 설정을 수정하기 위해서는 Jetty 패키지 디렉터리 아래의 etc 디렉터리의 jetty.xml 파일을 수정해야 하며, <New> 태그의 class attribute를 org.eclipse.jetty.server.nio.SelectChannelConnector 대신 org.eclipse.jetty.server.bio.SocketConnector로 변경하고, NIO ChannelConnector에만 한정되는 몇 가지 옵션을 제거하는 방법으로 변경이 가능하며 정리하면 다음과 같습니다.

    <Call name="addConnector">
      <Arg>
        <New class="org.eclipse.jetty.server.bio.SocketConnector">
          <Set name="host"><SystemProperty name="jetty.host" /></Set>
          <Set name="port"><SystemProperty name="jetty.port" default="8080" /></Set>
          <Set name="maxIdleTime">300000</Set>
        </New>
      </Arg>
    </Call>

    그리고 좀 더 최적화된 설정을 위하여, Jetty가 자체 로그를 기록하지 않도록, etc 디렉터리의 jetty.xml 파일에서 RequestLog 핸들러 부분을 주석으로 처리하고, 확장자가 war인 패키지의 압축을 풀지 않도록 etc 디렉터리의 jetty.xml 파일에서 addBean "org.eclipse.jetty.deploy.WebAppDeployer"의 "extract" 프로퍼티의 값을 "false"로 지정하고, contexts 디렉터리의 test.xml 파일에서 <Set name="extractWAR"> 부분의 프로퍼티 값을 "false"로 지정하였다는 것이 저자의 설명입니다.

    이러한 설정들이 모두 적용된 실제 샘플은 http://cid-b43074894ffe6264.skydrive.live.com/self.aspx/.Public/Projects/JettyCloudService.zip 에서 다운로드받아보실 수 있습니다. :-)

    마무리

    Windows Azure Platform이 Microsoft의 기술이므로 철저히 .NET Framework 기반의 응용프로그램 개발만을 지원할 것이라는 편견은 종합적으로 "잘못된 것입니다." Windows Server 2008 R2의 기술을 기반으로 하고 있기 때문에, 여러분의 응용프로그램이 Windows Server 2008 R2, 그리고 64비트 환경에서 성공적으로 수행될 수 있는 조건을 갖추고 있다면 Windows Azure Platform은 성공적으로 여러분들의 클라우드 컴퓨팅으로의 계획을 이끌어 줄 수 있을 것입니다.

    만약 좀 더 심층적인 예제나, Tomcat 기반의 Windows Azure 구동 사례를 보기 원하신다면, http://code.msdn.microsoft.com/winazuretomcat 를 방문하셔서 샘플 코드와 문서를 다운로드하시기를 권합니다.

    감사합니다. :-)

    저작자 표시 비영리 동일 조건 변경 허락
    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by Windows Azure MVP 남정현 (rkttu.com)

    The Code Project Open License (CPOL)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Common Development and Distribution License (CDDL)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 예**
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Microsoft Public License (Ms-PL)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Mozilla Public License 1.1 (MPL 1.1)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 예**
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Common Public License Version 1.0 (CPL)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 예**
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Eclipse Public License 1.0

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 예**
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The MIT License

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 아니오**
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The BSD License

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 아니오**
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Apache License, Version 2.0

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 예
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The Creative Commons Attribution-ShareAlike 2.5 License

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 아니오**
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 아니오**
    * 라이센스 전파 여부: 예**

    The zlib/libpng License

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 아니오**
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    공개 커뮤니티에 대한 공헌 (라이센스 아님)

    * 저작권 보호: 아니오**
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 아니오
    * 명시적 특허권 행사 가능 여부: 아니오**
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 아니오

    The GNU Lesser General Public License (LGPL)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 예**
    * 명시적 특허권 행사 가능 여부: 아니오**

    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 예
    * 라이센스 전파 여부: 예**

    The GNU General Public License (GPL)

    * 저작권 보호: 예
    * 상용 소프트웨어에서 사용 가능: 예
    * 버그 패치 및 기능 확장 제공의 의무: 예**
    * 명시적 특허권 행사 가능 여부: 아니오**
    * 사유 프로그램 (소스 비공개 프로그램)에서 사용 가능 여부: 아니오**

    * 라이센스 전파 여부: 예**

    노트: ** 기호가 붙은 항목은 라이센스 선택 시 고려해야 할 주의 사항입니다.
    출처: http://www.codeproject.com/info/Licenses.aspx

    크리에이티브 커먼즈 라이선스
    Creative Commons License
    Posted by Windows Azure MVP 남정현 (rkttu.com)