Saturday Azure Live 1701 행사 후기

안녕하세요. Azure 한국 사용자 그룹 운영진 남정현입니다.

Saturday Azure Live 1701 행사에 함께해주신 청중 및 스피커 여러분들께 진심으로 감사드립니다. 추운 날씨에도 불구하고 참석해주셔서 성황리에 행사가 마무리될 수 있어서 기쁩니다. 행사 장소를 제공해주신 마이크로소프트 멜팅팟 프로그램 관계자 여러분들께도 깊은 감사의 인사를 드립니다.

행사 사진

이날 행사는 총 3개의 세션으로 구성되었습니다.

  • Microsoft Conversation as a Platform 소개 – 한국 마이크로소프트 오일석 에반젤리스트님
  • Azure WebApp 개념원리 – Microsoft Azure MVP, Azure 한국 사용자 그룹 운영진, (주)바풀 CTO 김영재님
  • DevOps와 Hybrid Cloud – Azure 한국 사용자 그룹 운영진, SDDC 한국 사용자 그룹 운영진 김세준님

아울러 이번 행사에서는 설문지를 배포하여 행사에 대한 청중 평가와 피드백을 처음으로 수집하였습니다. 아래는 평가와 의견을 정리한 내용입니다.

  • “Saturday Azure Live 1701” 행사 만족도 (중복 가능)
    • 만족스럽지 않다: 1명
    • 대체적으로 괜찮았다: 8명
    • 다음에 다시 오겠다: 7명
    • 의견
      • 처음이라 낯설어서 아직은 없습니다. 참, Azure 관련 자료 감사합니다.
      • 인공지능 (Machine Learning, Deep Learning 등)에 대한 세미나도 가능하시면 부탁드립니다.
      • Azure에서 서비스하고 있는 내용이 광범위 하긴 하지만, 전체 세션간에 주제에 대한 연관성이 있었으면 좋겠습니다. 개발자를 위한, 운영 엔지니어를 위한 주제를 통일하고 Deep Dive 세션 진행을 통해 레벨업할 수 잇었으면 좋겠습니다.
  • 세션 1 “Microsoft Conversation as a Platform 소개” 평가
    • 좀 어려웠다: 4명
    • 만족한다: 10명
    • 의견
      • LUIS에 한국어 추가되면 Azure 사용자 그룹에 알려주세요.
      • 이해하기 쉽게 설명해주셔서 감사합니다.
      • 짧은 시간에 많은 내용을 하기 힘들겠지만 Practice 비중이 조금 더 늘었으면 좋겠습니다.
      • Azure의 기본적인 개념에 대해 더 자세히 알려주셨으면 좋겟어요.
      • 좋았습니다.
  • 세션 2 “Azure WebApp 개념원리” 평가
    • 좀 어려웠다: 4명
    • 만족한다: 10명
    • 의견
      • 실무에서 적용된 Service들이라던지 그런 개념이 많이 담겨있어서 어느정도만 이해할 수 있었지만, 준비에 감사드립니다. 🙂
      • 정기 세미나로 계획 중이시면 기본적인 Overview 보다는 구체적인 기능들을 Review 할 수 있는 심화 세션으로 진행되었으면 좋겠습니다.
      • 설명보단 시연이 좀 더 많은 시간이 있었다면 좋을 것 같아요.
      • 더 많은 (Azure WebApp 활용 및 적용) 사례도 궁금합니다.
  • 세션 3 “DevOps와 Hybrid Cloud” 평가
    • 좀 어려웠다: 1명
    • 만족한다: 12명
    • 의견
      • SE (System Engineer)에 대한 이해가 되었습니다.
      • Hybrid Cloud를 검토중인상황에 많은 부분을 생각해볼 수 있는 유용한 시간이었습니다.
      • 초반에 설명이 장황해 잘 이해가…

의견 주신 내용을 수렴하여 차후 세미나에서 더 많은 분들께 만족을 드릴 수 있도록 하겠습니다.

고맙습니다.

Windows Azure를 통한 클라우드 서비스 확장성 포스터

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


Windows Azure를 사용하면서 여러가지 서비스들을 많이 활용할 수 있지만, 역시 Windows Azure Platform을 제일 잘 설명할 수 있는 것은 확장성에 충분히 대응할 수 있는 유연한 아키텍처가 아닐까 싶습니다. 하지만 이러한 아키텍처를 어떻게 디자인하고 설계하고 수정해야 할지 개념을 잡기가 쉽지 않을 수 있는데요, 이러한 개념을 알기 쉽게 설명해주는 유용한 포스터를 하나 공유합니다.



아래 링크를 클릭하시면 포스터 PDF 파일을 내려받으실 수 있습니다. 포스터를 내려받아서 필요한 부분만을 읽어보시거나, 포스터 인쇄를 주문하셔서 잘 보이는 곳에 붙여놓고 활용하시면 좋을 것 같습니다. 🙂


cfile26.uf.1822613F5157B41E045499.pdf


감사합니다.

Azure 테이블 저장소 레시피 – StartsWith 구현하기

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


Windows Azure Storage는 전통적인 데이터베이스 시스템과는 다르게 대용량 데이터를 처리하기 위한 방향으로 아키텍처가 구성되어있습니다. 이런 이유로, 일상적으로 사용하는 RDBMS의 컨텐츠를 Windows Azure Storage로 로드하거나 덤프를 만드는 것은 가능하지만, Windows Azure Storage 위에 올라온 레코드에 대해서 복잡한 쿼리를 수행하는 것은 어렵습니다. 이런 제약 사항 때문에 LIKE 검색 같은 기능은 사용할 수 없고, 오로지 데이터 정렬 순서에 의존하는 검색 방법만을 사용할 수 있습니다.


http://blogs.microsoft.co.il/blogs/oshvartz/archive/2012/09/19/azure-table-storage-limitations-and-solutions-workarounds-part-2.aspx


위의 글에서 소개하는 Workaround를 프로그래밍 방식으로 만들어 볼 수 있을까 고민하다가 오늘 레시피를 올리게 되었습니다. 이 코드를 사용하면 어떤 문자열이 있으면 해당 문자열을 순차적으로 검색하여 일치하는 모든 문자열을 반환하는 쿼리 식을 완성해줍니다.


코드 살펴보기


public static string CreateStartsWithQuery(string attributeName, string needle) {
 attributeName = String.Concat(attributeName);
 needle = String.Concat(needle).Replace(“‘”, “””);
 if (attributeName.Length < 1 || needle.Length < 1)
  return String.Empty;
 return String.Format(
  “({0} ge ‘{1}’ and {0} lt ‘{2}’)”,
  attributeName, needle,
  String.Concat(needle.Substring(0, needle.Length – 1), (char)(needle[needle.Length – 1] + 1))
 );
}


위와 같은 유틸리티 메서드를 만들었습니다. Windows Azure Storage SDK 최신 버전의 경우 문자열로 직접 Query를 질의하도록 되어있으며 여기에 바로 쓸 수 있는 문자열을 반환합니다.


코드의 내용을 한 줄씩 살펴보면 이렇습니다.



  • 매개 변수로는 attributeName과 needle을 받습니다. attributeName이 검색하려는 테이블 저장소 상의 엔티티 속성 이름입니다. 그리고 needle은 매칭시키려는 앞 부분의 문자열입니다.

  • needle의 경우 작은 따옴표는 두 번 쓰도록 하여 이스케이프 처리하였습니다. 이렇게 만들면 작은 따옴표를 쿼리식 안에서 정확히 지정할 수 있습니다.

  • 안전한 쿼리 수행을 위하여 빈 문자열이 들어오는 경우는 빈 문자열을 반환합니다. String.Concat 정적 메서드의 기본 동작에 의하여 String에 Null 참조가 지정되는 경우 빈 문자열로 변환됩니다.

  • 실제 비교 식의 원리는 이렇습니다. ABC로 시작하는 문자열을 찾기 위하여 문자열을 오름차순으로 정렬했을 때 ABC 그 자체, 혹은 그 이후로 나오는 모든 데이터에 대해, 해당 문자열 바로 다음에 오는 문자열까지로 검색 범위를 한정합니다.

위의 코드에 검색어로 “아무개”를 지정하면 다음과 같은 쿼리 식이 생성됩니다.


(Category ge ‘아무개’ and Category lt ‘아무객’)


즉, 아무개와 아무개로 시작하는 모든 문자열들 중 아무객보다 빨리오는 문자열만을 찾는다는 의미로 쿼리가 완성되는 것입니다. 만약 여러 조건으로 매칭하기를 원한다면 아래와 같이 쿼리식을 쓸 수 있습니다.


(Category ge ‘아무개’ and Category lt ‘아무객’) and (Category ge ‘철수’ and Category lt ‘철숙’) and (Category ge ‘영희’ and Category lt ‘영흭’)


위와 같이 작성함으로서 아무개로 시작하는 Category, 철수로 시작하는 Category, 영희로 시작하는 Category를 가지는 레코드들을 한꺼번에 얻어올 수 있습니다.


Visual Studio 데이터베이스 탐색기에서 테스트하기


위의 코드를 이용하여 만든 쿼리식이 잘 작동하는지 살펴볼까요? 쌀/과일/농수축산물 » 쌀/찹쌀/현미라는 문자열로 시작하는 모든 레코드를 검색하기 위하여 위의 코드로 아래와 같이 쿼리식을 만들었습니다.



(Category ge ‘쌀/과일/농수축산물 » 쌀/찹쌀/현미’ and Category lt ‘쌀/과일/농수축산물 » 쌀/찹쌀/현믹’)

Visual Studio 데이터베이스 탐색기에서 Table 저장소를 직접 쿼리할 수 있습니다. 한 번 살펴볼까요?



잘 작동합니다. 🙂


PartitionKey나 RowKey로 등록한 엔티티가 아니어도 StartsWith에 해당되는 검색 조건을 빠르게 검색하여 가져올 수 있다는 것은 쓰임새가 많을겁니다. 특히 지금과 같이 카테고리 탐색을 하려는 경우에는 유용하게 사용할 수 있습니다.

Azure BLOB 저장소 레시피 – 모바일 홈페이지 만들기

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


Windows Azure를 가지고 무엇을 할 수 있을까? 이 점에 대해서 궁금해하시는 많은 분들을 위하여 레시피 강좌 시리즈를 지속적으로 업로드하려고 합니다.


이번에 소개해드리려고 하는 내용은 요즈음 유행하는 HTML5 기반의 앱과 관련된 내용입니다. 서버의 렌더링을 필요로하지 않고 스스로 동작할 수 있는, 마치 앱과 같은 특성을 지닌 지능적인 HTML 페이지를 Windows Azure BLOB Storage위에서 호스팅하는 방법입니다.


사실 지금 소개해드리려는 내용은 굉장히 간단한 내용이지만, 활용하기에 따라서는 굉장히 유용한 레시피가 될 수 있습니다. 이벤트나 행사 웹 사이트와 같이 단순하지만 기간 내에 액세스가 폭증하는 페이지들을 호스팅해야 하는 요구 사항이 종종 있는데 이럴 때 활용하시면 일을 매우 단순하게 만들 수 있습니다.


정적 웹 사이트에 담을 내용 준비하기


정적 웹 사이트란 문자 그대로 웹 디자이너가 작업을 끝마친 시안 형태의 웹 페이지에서부터 ASP, PHP, ASP.NET, CGI, Python, Perl 등 생각할 수 있는 서버측 구성 요소를 하나도 들여오지 않고 jQuery나 Dojo 같은 자바스크립트 프레임워크들, 그리고 외부의 Open API만을 활용해서 온전하게 작동하는 웹 앱에 이르기까지 운영해야 할 서버 측의 비용을 고려하지 않고 만들 수 있는 모든 종류의 웹 사이트 및 웹 앱을 뜻합니다. 자바스크립트 세계의 발전에 따라 정적 웹 사이트의 의미도 크게 확장되었다고 볼 수 있습니다.


여기서는 jQuery Mobile을 이용하여 만든 간단한 웹 사이트를 Windows Azure Storage를 이용해서 호스팅하도록 해보겠습니다. 소개하는 내용이 아니더라도 여러분이 손수 만든 개인 모바일 홈페이지도 괜찮고 무엇이든 시험해볼 수 있는 것이면 됩니다.



  • 준비물 1: CloudBerry Client for Windows Azure BLOB Storage (Pro 버전 대신 Freeware를 설명합니다.)

  • 준비물 2: jQuery Mobile 패키지 파일

  • 준비물 3: 여러분이 올릴 간단한 웹 페이지 파일 및 이미지 파일

CloudBerry Client for Windows Azure BLOB Storage 설치하기


CloudBerry Client는 여러 종류의 Windows Azure BLOB Storage 클라이언트 중 다루기 쉽고 간편한 인터페이스를 제공하는 무료 클라이언트입니다. CloudBerry Client는 Windows Azure 이외에도 KT UCLOUD Biz Storage 클라이언트와 같은 OpenStack Client도 지원합니다.



http://www.cloudberrylab.com/ 웹 사이트에 방문하시면 메인 페이지에 CloudBerry Explorer Freeware라는 이름의 다운로드 링크 컬렉션이 보일 것입니다. 여기서 for Windows Azure를 선택하여 이번 레시피에서 설명하는데 필요한 도구를 다운로드하고 설치합니다.


프리웨어이지만 사용자 등록을 권하는 부분이 있는데, 지속적으로 이 도구를 사용하게 될 것을 감안하여 재량껏 등록하여 사용하기 바랍니다. 등록하지 않고 진행해도 사용에는 큰 지장은 없을 것입니다.


설치 후 아래와 같이 프로그램이 나타나는지 확인합니다.



계정 정보 등록하기


새로운 계정 정보를 등록하려면 아래 그림과 같이 File 메뉴의 Azure Blob Storage Accounts 메뉴를 선택합니다.



아래와 같이 대화 상자가 나타날 것입니다. Add 버튼을 클릭합니다.



아래와 같이 계정 정보 입력 대화상자가 나타나는지 확인합니다.




  • Display name: 이 프로그램 상에서 나타낼 항목 이름으로 자유롭게, 알아보기 쉬운 이름으로 입력합니다.

  • Account: Windows Azure 저장소의 ID를 입력합니다. URL을 보면 <계정 이름>.blob.core.windows.net와 같은 형태로 구성되어있는데 여기서 <계정 이름>에 해당하는 ID를 입력합니다.

  • Shared Key: Windows Azure 관리 포털에서 나타나는 이 저장소에 대한 Shared Key를 입력합니다. Primary Key나 Secondary Key 중 하나를 입력하면 됩니다. 보안 향상을 위하여, 서비스 구성을 위해 활용하는 Key와는 다른 여분의 Key를 이곳에 설정하는 것이 좋습니다. 이렇게 하여 불시에 이 Key를 갱신하여 유출 사고 등에 유연하게 대처할 수 있게 됩니다.

  • Use SSL: SSL 통신을 사용할 지의 여부를 결정합니다.

  • Development Storage: 실제 서비스가 아니라 Windows Azure Storage Emulator로 연결할 경우 이 항목을 체크합니다.

계정 정보를 확인하려면 http://manage.windowsazure.com/ 으로 이동하여 저장소 계정 화면에 대한 대시 보드를 아래와 같이 확인합니다. 그 다음 하단의 도구 모음에서 Manage Keys 버튼을 클릭합니다.



아래와 같이 모달 대화 상자가 나타나면 Storage Account Name을 복사하시고, Primary Access Key 또는 Secondary Access Key 중 하나를 복사하여 위의 대화 상자에 입력하도록 합니다.



모든 설정이 완료되면 Test Connection 버튼을 클릭하여 연결이 잘 되는지 확인합니다. 연결에 성공하면 아래와 같이 대화 상자가 나타날 것입니다.



jQuery Mobile 패키지 준비하기


기본적으로 jQuery Mobile 패키지 파일을 CDN에서 받아서 이용하는 방법이 편리합니다. 이렇게 하면 jQuery Mobile 다운로드에 관한 트래픽을 우리쪽 서버가 아닌 다른 위치의 CDN으로 분산시킬 수 있으므로 트래픽 관련 비용 절감에 도움이 되기도 합니다. 여기서는 jQuery Mobile 패키지를 우리쪽 서버에 업로드하는 것을 기준으로 예제를 만들어 보도록 하겠습니다.


http://jquerymobile.com/download/ 웹 페이지에 접속하여 아래와 같이 Latest Stable Release를 찾아 JavaScript와 CSS 파일 패키지를 Minified Version으로 다운로드하기 바랍니다. 링크를 클릭하면 저장이 아니라 파일이 열리는 동작으로 다운로드가 발생할 수 있으므로 링크를 오른쪽 버튼으로 클릭하고 다른 이름으로 저장 기능을 사용하여 저장하기 바랍니다.



그리고 jQuery Mobile이 필요로하는 jQuery 라이브러리 파일도 가져와야 합니다. http://jquery.com/download/ 웹 페이지에 접속하여 아래와 같이 Minified Version을 다운로드합니다.



NOTE: 최근에 릴리즈한 1.9.x 버전의 경우 jQuery Mobile과 호환성 문제가 있을 수 있으므로 1.8.x 릴리즈를 다운로드해야 할 수 있습니다. 1.9.x 버전이 작동하지 않을 경우 1.8.x 버전을 사용하여 진행할 수 있습니다.


컨테이너를 만들고 권한 설정하기


이제 컨테이너를 만들고 여기에 파일을 업로드할 차례입니다. 다시 CloudBerry Storage Explorer로 되돌아가서 오른쪽 패널의 Source 드롭 다운 상자에서 방금 추가한 계정을 선택하여 접속을 시도합니다. 



Windows Azure Storage는 전통적인 웹 호스팅 환경과는 다르며, 기본적으로 1계층의 컨테이너만을 지원합니다. 그리고 컨테이너보다 더 깊이있는 레벨의 폴더 계층을 형성하려면 올리는 파일의 이름에 경로 구분을 위한 문자 (‘/’)를 포함시켜 폴더처럼 보이게 하는 방법을 사용하게 됩니다.


API에서 폴더를 탐색한다는 것은 이러한 특성에 따라 실제 폴더로 스택 자료 구조를 이용해서 탐색하는 방식이 아니라, Where Clause를 이용할 때 사용할 수 있는 Prefix Matching 기법을 사용하게 됩니다. 즉, 같은 Prefix를 보유하는 컨테이너 내의 파일들은 논리적으로 같은 폴더에 있는 것으로 취급이 가능합니다.


컨테이너를 만들기 위해서는 아래 그림과 같이 오른쪽 편의 도구 모음을 클릭합니다.



아래와 같이 대화 상자가 나타나면 컨테이너의 이름을 입력하고 권한을 설정합니다.



위의 권한들에 대해 각각 내용을 살펴보면 다음과 같습니다.



  • Full public read access: 이 컨테이너의 URL로 접속하면 컨테이너 안에 무슨 파일이 들어있는지 목록을 조회할 수 있는 기능과 더불어 모든 파일에 대해 다운로드 기능을 제공함을 의미합니다.

  • Public read access for blobs only: 이 컨테이너의 URL로 접속하면 권한이 없다는 오류 메시지가 나타나고, 대신 이 컨테이너 안의 정확한 파일의 URL을 알고 있는 경우 해당 파일은 다운로드가 가능함을 의미합니다.

  • No public read access: 컨테이너이든 그 안에 들어있는 파일이든 인증을 거치지 않고는 읽을 수 없도록 보호함을 의미합니다.

위의 세 가지 옵션 중에서 지금 우리가 선택하려는 것은 두 번째 옵션으로, 정적 웹 호스팅에서 어떤 파일이 들어있는지 사용자가 확인할 필요 없이 개별 URL에 대해서만 안다면 자동으로 모든 서비스가 제공되므로 파일에 대해서만 공개하도록 만들 것입니다.


파일 업로드하기


여기서는 정적 웹 호스팅을 간단하게 테스트해볼 목적으로 1계층 컨테이너 안에 같은 파일들을 넣어보려고 합니다. 여러분의 컴퓨터에서 아래와 같이 파일을 준비하시면 됩니다.



그리고 위의 index.html 파일의 소스 코드는 아래와 같습니다.


[#M_더보기|접기|<!DOCTYPE html>
<html>
    <head>
        <meta charset=”utf-8″ />
        <meta name=”viewport” content=”width=device-width, initial-scale=1″ />
        <meta name=”apple-mobile-web-app-capable” content=”yes” />
        <meta name=”apple-mobile-web-app-status-bar-style” content=”black” />
        <title>
        </title>
        <link rel=”stylesheet” href=”jquery.mobile-1.2.0.min.css” />
        http://jquery-1.8.3.min.js
        http://jquery.mobile-1.2.0.min.js
       
            try {

    $(function() {


    });


  } catch (error) {
    console.error(“Your javascript has an error: ” + error);
  }
       
    </head>
    <body>
       

<

div id=”page1″>
           

               

                    Seoul
               

           

           

               

                    Welcome!
               

                https://maps.googleapis.com/maps/api/staticmap?center=서울&zoom=14&size=288×200&sensor=false” width=”288″ height=”200″ />
           

           

<

div>
               

                   

                           

  •                            
                                    Seoul
                               

                           
  •                        

  •                             http://www.google.co.kr/” data-transition=”fade” data-theme=”” data-icon=””>
                                    Google
                               
                           
  •                        

  •                             http://m.naver.com/” data-transition=”fade” data-theme=”” data-icon=””>
                                    NAVER
                               
                           
  •                    

               

            </div>
        </div>
    </body>
</html>

_M#]

이제 위의 소스 코드를 Azure Blob Storage로 업로드합니다. 아래와 같이 파일이 업로드된 것을 확인합니다.



결과 확인하고 QR코드로 만들어 배포하기


이제 마지막으로 올라간 파일이 잘 작동하는지 확인할 차례입니다. 위의 파일들 중 index.html 파일을 오른쪽 버튼으로 클릭하여 URL을 확인합니다.



아래와 같이 대화 상자가 나타나면 Copy to clipboard 버튼을 클릭하여 주소를 복사하고 웹 브라우저에서 열어보도록 합니다. (혹은 Open link 버튼을 눌러도 됩니다.)



웹 브라우저에서 아래와 같이 잘 나타나는지 확인합니다.



이제 이 URL을 QR코드로 만들기 위하여 http://qr.naver.com/ 으로 접속하여 QR코드를 만들면 모바일 웹 사이트 구축이 완료됩니다.


더 나아가기


만약 폴더 구조를 유지하면서 파일 업로드를 하기 원한다면, Storage Explorer에서는 폴더를 직접 생성하는 기능이 없지만, 미리 로컬에서 만든 폴더째로 한꺼번에 업로드하면 자동으로 폴더를 생성하게 됩니다.


그리고 Windows Azure CDN 노드를 추가하면 이 상태 그대로 CDN 서비스를 받을 수 있습니다. CDN 엣지 노드 형성은 2013년 2월 현재 신규 포털이 아닌 구 버전의 포털 http://windows.azure.com/ 에서 관리할 수 있습니다.

Windows Azure Virtual Machine에 Apache 2 + PHP 5 + Cubrid + XE 설치하기

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


Windows Azure Virtual Machine에서 리눅스를 지원하는 것은 다들 잘 알고 계실 것입니다. Ubuntu, CentOS, RHEL, Suse Linux 등을 이미 지원하고 있고 앞으로 개발 진척 상황에 따라서 더 많은 배포판을 지원해 나가게 될듯 합니다. 이번 강좌에서 소개하려고 하는 내용은 Windows Azure Virtual Machine에서 리눅스를 사용하면서 Apache 2 + PHP 5 + Cubrid + XE의 조합으로 XpressEngine 기반의 웹 사이트를 만드는 방법에 대한 것입니다. 익히 알고 계시는대로 Cubrid는 국산 오픈소스 데이터베이스로 다양한 적용 레퍼런스를 가지고 있는 믿음직한 솔루션입니다. 충분한 테스트와 검증이 필요하겠으나, 첫 설치 과정과 기본적인 동작에서 Cubrid는 Windows Azure Virtual Machine 환경에서 안정적으로 잘 작동하고 있습니다.


ps. 2012년 초반에 문제가 되었던 Windows Azure Virtual Machine의 디스크 I/O 관련 이슈, 부팅 후 일정 시간이 지난 다음에 갑작스럽게 Kernel Panic이 찾아오는 현상은 이 글을 쓰는 현 시점에서 해결된 상태입니다.


업데이트: SkyDrive에 아래 60장의 스크린 샷을 모아서 XPS 문서와 ZIP 파일로 업로드하였습니다. 요약해서 보고 싶으신 분들께 도움이 될까하여 공유합니다.


링크 바로가기: http://sdrv.ms/TGXhWs


60장의 그림과 함께하는 설치 과정 따라하기


1. Windows Azure Virtual Machine 베타 프로그램의 신청 여부를 확인하고, http://manage.windowsazure.com/ 에서 하단의 NEW 버튼 클릭 -> Compute 클릭 -> Virtual Machine 클릭 -> Quick Create 순으로 클릭합니다.


 DNS 이름을 지정합니다.
Ubuntu 12.04 LTS (혹은 다른 Ubuntu 이미지도 무관합니다.)를 선택합니다.
* 적정한 Instance Size를 선택합니다.
* 사용자 ID가 azureuser 임을 기억하시고 비밀 번호를 새로 지정합니다.
* 데이터센터 위치는 대한민국 접속자 기준으로 East Asia를 선택하는 것이 유리합니다.


모든 정보를 입력하면 Create Virtual Machine 버튼을 클릭하고 잠시 기다립니다.



2. 새 Windows Azure Virtual Machine과 Storage가 생성된 것을 확인하면 만들어진 Virtual Machine을 선택하여 상세 관리 페이지로 이동합니다. 



3. Dashboard 화면의 오른쪽 Quick Glance 섹션에서 SSH Details 항목의 접속 주소와 포트 번호를 확인합니다. 이 접속 정보를 사용하여 여러분이 선호하는 Secure Shell 지원 Telnet 프로그램으로 접속을 시도합니다. Windows 환경에서 널리 사용되는 프로그램은 Putty이며, http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 에서 내려받아 설치할 수 있습니다. 



4. Putty를 실행하고, Host Name 입력 상자와 Port 입력 상자에 접속 정보를 입력한 후 Connection type은 SSH로 선택하고 Open 버튼을 클릭합니다. 필요한 경우 Saved Sessions 입력 상자 아래에 새로운 엔트리 이름을 입력하고 Save 버튼을 클릭하면 다음번에 리스트 상자에서 저장된 항목을 더블 클릭하여 바로 연결을 시작할 수도 있습니다. 



5. 처음 원격 서버에 접속하면 임의로 생성한 RSA2 지문 키 값의 유효성 여부를 놓고 경고하는 대화 상자가 나타나게 됩니다. 예 (Yes) 버튼을 클릭하여 항상 이 값을 수락하도록 설정을 저장합니다. 



6. 사용자 ID는 azureuser로, 암호는 Quick Create 당시 지정한 암호를 입력하여 로그인합니다. 



7. 지금부터 수행하려는 작업들은 줄곧 권한 상승을 필요로 하기 때문에 작업의 효율성을 위하여 셸 자체를 권한 상승시키려고 합니다. sudo /bin/bash 명령을 실행하여 BASH 셸을 권한 상승 시킨 상태에서 실행합니다. 사용자 비밀 번호를 물어보는 경우 다시 입력합니다. 



8. vi /etc/hostname 명령어를 입력하여 /etc/hostname 파일을 아래와 같이 FQDN (Fully Qualified Domain Name) 이름으로 수정합니다. 초기값은 단순 호스트 이름으로만 되어있었을 것인데 이 이름을 앞에서 접속하기 위하여 사용한 전체 주소로 바꾸어주면 됩니다.


* VI에서 텍스트 편집 모드로 들어가려면 처음 상태에서 i 키를 누릅니다.
* 텍스트를 편집하고난 다음에는 Esc 키를 눌러 명령 모드로 전환합니다.
*  :wq! 를 입력하여 파일을 저장하고 VI를 닫습니다.



9. vi /etc/hosts 명령어를 입력하여 /etc/hosts 파일에 위에서 /etc/hostname에서 추가한 FQDN 이름에 대한 localhost 엔트리를 새로 추가합니다. VI에서의 파일 편집 방법은 8번 단계의 부연 설명을 참고하십시오. vi 사용이 익숙하지 않다면 nano 혹은 emacs 등의 유틸리티도 대안이 될 수 있습니다.



10. 새로 변경한 설정을 반영하기 위하여 service hostname start 명령을 입력합니다. 



11. SSL 인증서 갱신을 위한 유틸리티의 설치가 필요합니다. apt-get install ssl-cert 명령을 입력합니다.



12. 인증서 갱신을 위하여 make-ssl-cert generate-default-snakeoil –force-overwrite 명령어를 입력합니다. 



13. 이제 Apache HTTP Server를 설치할 차례입니다. apt-get install apache2 명령어를 입력합니다. 



14. PHP5를 설치합니다. apt-get install php5 명령어를 입력합니다. 



15. XpressEngine은 PHP GD 라이브러리의 기능을 활용합니다. GD 라이브러리는 .NET Framework의 GDI+가 ASP.NET이나 일반 응용프로그램을 위하여 해 줄 수 있는 백그라운드 이미지 렌더링에 대한 기능과 거의 일치하는 것으로 동적 이미지 생성 작업에 꼭 필요합니다. apt-get install php5-gd 명령어를 입력합니다.



16. Cubrid 측 Ubuntu Repository를 가져오기 위하여 Repository Entry를 수정해야 하는데 이를 위한 유틸리티를 설치하기 위하여 apt-get install python-software-properties 명령어를 입력합니다. 



17. add-apt-repository ppa:cubrid/cubrid 명령어를 입력하여 Cubrid Database 및 관련 구성 요소를 apt-get 명령어로 설치할 수 있도록 리포지터리 정보를 시스템으로 가져옵니다. 



18. 리포지터리 정보를 새로 내려받아 병합하기 위하여 apt-get update 명령을 수행합니다. 



19. 큐브리드 데이터베이스의 설치를 위하여 apt-get install cubrid 명령어를 실행합니다. 



20. PHP5에 큐브리드 데이터베이스 드라이버 설치를 위항 apt-get install php5-cubrid 명령어를 실행합니다. 



21. 큐브리드 데이터베이스의 환경 변수 반영 등 여러가지 부수적인 작업을 위하여 Windows Azure Virtual Machine의 리눅스 인스턴스를 shutdown -r now 명령어로 재시작합니다. 시스템 재 시작에는 얼마 시간이 걸리지 않습니다. 



22. 약 3~5분 정도 뒤에 아래 그림과 같이 PuTTY 창의 제목 표시줄을 오른쪽 버튼으로 클릭하여 Duplicate Session 혹은 Restart Session 메뉴를 클릭하면 같은 접속 정보를 사용하여 다시 접속을 시도합니다.



23. 다시 로그인합니다. 



24. 큐브리드 데이터베이스의 환경 설정을 위하여 전용 셸로 세션을 바꿉니다. sudo su -s $SHELL cubrid 명령어를 입력하고 azureuser 사용자의 비밀 번호를 다시 입력합니다.


* 주의: 이 명령어는 CUBRID 데이터베이스의 환경 변수 설정이 시스템 전체에 반영되지 않은 경우 작동하지 않습니다. 그런 경우 21단계의 명령어 shutdown -r now 명령어를 사용하여 시스템을 다시 시작해야 합니다. 권한이 없다고 나오는 경우 sudo shutdown -r now 명령어를 이용하여 권한 상승을 요청합니다.



25. cubrid service start 명령어를 입력하여 큐브리드 핵심 서비스를 시작합니다. 그리고 cubrid createdb xe 명령어를 입력하여 새 데이터베이스 ‘xe’를 생성합니다. 데이터베이스의 초기 크기는 512MB로 만들어지며 이 과정에서 시간이 다소 걸릴 수 있습니다.



26. cubrid server start xe 명령어를 입력하여 25단계에서 만들어진 데이터베이스 xe를 활성화시킵니다.



27. 새로 만들어진 xe 데이터베이스의 dba 계정 비밀 번호 변경을 위하여 csql -u[사용자 ID] [데이터베이스 이름] 형식으로 명령어를 입력합니다. 이번 강좌의 내용을 기준으로 하면 csql -udba xe 명령어를 입력하면 됩니다. 



28. CUBRID SQL Interpreter 배너가 출력되는 것을 확인할 수 있습니다. 이제 C-SQL 명령어를 입력해야 하는데 alter user dba password ‘[사용할 비밀 번호]’; 명령어를 입력합니다. 



29. 정상적으로 명령이 수행되었음을 확인한 다음 ;ex 명령어를 입력하여 CSQL 세션을 닫습니다. 



30. 이제 Apache HTTP Server의 디렉터리 컨텐츠를 구성해야 합니다. 정확한 디렉터리 위치를 알아보기 위해서 /etc/apache2 디렉터리로 이동한 다음 ‘DocumentRoot’ 지시자를 포함하는 파일들의 내용을 grep -nr ‘DocumentRoot’ * 명령어로 검색해봅니다. 결과가 /var/www로 나타나므로 실제로 해당 위치로 이동해야겠군요.



31. 위치로 이동하기에 앞서 CUBRID 셸을 exit 명령으로 빠져 나옵니다. 그 다음 다시 원래의 셸에서 sudo /bin/bash 명령으로 권한 상승을 시도합니다.



32. 이제 cd /var/www 명령어를 입력하여 Apache HTTP Server의 기본 Contents 디렉터리로 이동합니다. 그리고 이곳에서 PHP의 정상 설치 여부를 확인하기 위하여 cat > test.php 명령어를 입력하여 표준 입력 장치로부터 들어오는 내용을 파일로 기록하도록 만듭니다. 여기서의 표준 입력 장치는 우리가 PuTTY를 통해서 밀어넣는 키보드 입력이 될 것이므로 간단한 스크립트 작성이 가능해집니다. 스크립트 파일의 내용은 다음과 같습니다.


<?php
phpinfo();
?>
[Ctrl+Z 키 입력] 



33. 기본적인 구성이 완료되었으므로 이제 Windows Azure Management Portal (http://manage.windowsazure.com/)으로 이동하여 방화벽 설정을 조금 변경해야 합니다. 현재 방화벽은 Secure Shell을 위해서 TCP 22번 포트만 개방된 상태이며 Apache HTTP Server가 열어놓은 TCP 80 포트가 밖에서도 연결될 수 있도록 설정을 변경해야 합니다. 아래 그림에서처럼 Endpoints 메뉴를 클릭하고 하단의 Add Endpoint 버튼을 클릭하여 새 설정을 추가합니다.


note. Linux VM 자체의 방화벽 설정이 있더라도 Windows Azure Firewall에서 열지 않으면 외부에서는 특정 포트 번호로 연결을 맺을 수 없습니다. 그러나 여러 VM이 단일 Cloud Service 안에 Join하는 경우 이 영역 안의 각각의 VM들은 상호 간의 자체 방화벽 구성이 Windows Azure 방화벽 구성보다 우선시됩니다.



34. Add Endpoint 라디오 버튼을 체크한 상태에서 다음 버튼을 클릭합니다.



35. NAME에는 알아보기 쉬운 설정 명칭 (여기서는 HTTP로 정했습니다.)을, PROTOCOL은 TCP를, PUBLIC PORT, 즉 밖에서 받아들일 포트 번호는 80, PUBLIC PORT로 받은 연결을 실제로 이어줄 VM 측의 PORT인 PRIVATE PORT도 80으로 지정하여 웹 연결을 개통시킵니다. 설정을 마쳤으면 완료 버튼을 클릭합니다.



36. 설정이 완료될 때 까지 잠시 기다립니다.



37. 정상적으로 반영되면 아래 그림과 같이 녹색 체크 마크가 설정 앞에 나타납니다. 이제 테스트 URL로 접속을 시도합니다. 지금 여러분의 브라우저에서 http://[호스트 이름].cloudapp.net/test.php 와 같이 주소를 입력해봅니다.



38. PHP 5.3 인터프리터가 잘 작동하고 있음을 확인할 수 있습니다. PHP 보완 솔루션도 같이 설치되었다고 나오는데 특이하게도 해외 프로젝트이지만 이름이 SUHOSIN (수호신)이라고 하는군요. 😀



39. Ctrl+F 키를 눌러서 페이지 내 검색 창을 엽니다. 검색 키워드로 CUBRID를 입력하여 아래 그림과 같이 Cubrid Driver가 활성화되어있는지 확인합니다.



40. 이어서 gd를 검색 키워드로 넣었을 때 아래 그림과 같이 항목이 검색되고 GD Support가 enabled로 되어있는지 확인합니다.



41. 이제 드디어 XpressEngine을 설치할 차례입니다. 브라우저 창에서 http://www.xpressengine.com/ 으로 주소를 넣어 이동한 다음, 최신 버전의 XE Core 패키지 다운로드 메뉴를 찾아 클릭합니다.



42. 다운로드 버튼을 오른쪽 버튼으로 클릭하여 바로 가기 복사 메뉴 (혹은 다른 브라우저의 경우 이에 준하는 기능을 활용하세요.)를 클릭하여 다운로드 링크를 가져옵니다. 이 주소를 이용하여 바로 xe.zip 파일을 리눅스 VM에서 내려받으려고 합니다. 이 방법을 사용하지 않고 PuTTY 유틸리티의 자매 도구인 PSFTP 툴을 사용하여 직접 업로드해도 무방하지만 추가 프로그램 없이 손쉽게 접근할 수 있어 이 방법으로 시도하려고 합니다.



43. 리눅스 VM에서 웹의 파일을 콘솔 상에서 다운로드받기 위해 wget 유틸리티를 설치하려고 합니다. 보통은 설치가 이미 되어있지만 업데이트 확인 차 apt-get install wget 명령을 입력하여 다시 설치를 확인합니다.



44. 파일을 다운로드받기 위해서 wget -O xe.zip [42단계에서 복사한 URL] 명령어를 입력합니다. -O 스위치는 HTTP 서버로부터 파일 다운로드가 발생할 때 저장할 파일의 이름을 미리 스위치로 지정한 것입니다. 그리고 42단계에서 복사한 URL은 wget -O xe.zip 명령어 다음에 공백을 한 칸 넣고 콘솔 윈도우에서 마우스 오른쪽 버튼을 클릭하면 아래와 같이 자동으로 붙여넣기가 됩니다. 이제 45단계의 내용을 꼭 참고하세요.



45. 리눅스 Bash 셸의 특성 상 URL에 붙어있는 기호들 중 & (Ampersand) 기호는 꼭 이스케이프 처리를 해주어야 합니다. 키보드의 좌우 방향키를 이용하여 명령어를 수정할 수 있으므로 & 기호를 & 기호로 아래 그림과 같이 수정해줍니다. 이로서 전체 명령어는 다음과 같습니다.


wget -O xe.zip http://www.xpressengine.com/?module=file&act=procFileDownload&file_srl=21367347&sid=2e7e5518f7168e68513400404840b5f1



46. 정상적으로 아래 그림과 같이 다운로드가 완료되었는지 확인합니다.



47. ZIP 파일의 압축을 풀기 위해서 unzip 유틸리티를 설치해야 합니다. apt-get install unzip 명령을 실행하여 unzip 유틸리티를 설치합니다.



48. unzip xe.zip 명령어를 실행하여 /var/www/xe 디렉터리에 XpressEngine 패키지를 압축 해제하여 설치합니다.



49. 이제 불필요한 파일을 정리하고 퍼미션 설정을 할 차례입니다. /var/www 디렉터리의 xe.zip, test.php 파일을 삭제하고 xe 디렉터리 내에 files 디렉터리를 새로 생성한 다음 chmod 명령어로 디렉터리 퍼미션을 조정합니다.


cd /var/www
rm xe.zip
rm test.php
cd xe
mkdir files
chmod 707 files



50. 이제 브라우저 창에서 http://[호스트 이름].cloudapp.net/xe/ 주소를 넣어 아래 그림과 같이 설치 마법사가 나타나는지 확인합니다.




51. 페이지 언어가 한국어로 변경되었으면 다음 버튼을 클릭합니다.



52. 아래 그림과 같이 모든 사항이 가능으로 표시되면 설치할 준비가 된 것입니다. “설치를 진행합니다.” 버튼을 클릭합니다.



53. 이번 강좌에서 데이터베이스로 CUBRID를 사용할 것이므로 데이터베이스 종류는 cubrid를 선택하고 다음 버튼을 클릭하여 진행합니다.



54. 데이터베이스 접속 정보를 설정합니다.


* Apache HTTP Server와 DB 서버가 같은 위치에서 실행 중이므로 loopback 주소인 127.0.0.1을 입력합니다.
* DB 서버에 대해 별도로 포트 번호를 변경하지 않았으므로 포트 번호는 기본값을 사용합니다.
* DB 아이디는 빠른 진행을 위해서 dba로 사용하고, DB 비밀 번호는 28단계에서 지정한 비밀 번호를 입력합니다.
* DB 이름은 25단계에서 지정한 인스턴스 이름인 xe를 입력합니다.
* 테이블 머리말은 기존에 xe를 설치한 적이 없는 DB 위에 설치하는 경우 기본 값을 그대로 사용해도 됩니다.


여기서 참고할 사항은 데이터베이스의 경우 Windows Azure Firewall에서 해당 포트 번호인 33000을 임의로 개방하지 않을 경우 밖에서는 Cubrid 데이터베이스로 접속할 방법이 없습니다. 필요한 경우 Cubrid 서버의 기본 포트 번호를 변경하여 한층 더 강력한 보안을 유지할 수도 있습니다.



55. 데이터베이스 접속이 완료되면 아래와 같이 짧은 주소 사용 여부와 시간대 설정 페이지가 나타납니다. 짧은 주소 모듈이 Apache2 패키지와 함께 설치되므로 체크를 하고, 시간대는 적절하게 선택합니다. 대한민국 사용자들을 대상으로 하는 경우 GMT +09:00 Korea Standard Time, Japan Standard Time 항목을 선택하고 다음 버튼을 클릭합니다.



56. 관리자에 대한 기본적인 정보를 입력합니다. 메일 주소, XE 계정 접속 시 사용할 비밀 번호, 내부 아이디, 닉네임을 빠짐없이 적절하게 모두 입력한 다음 완료 버튼을 클릭합니다.



57. 아래와 같이 Welcome 페이지가 나타나면 설치가 끝난 것입니다. 왼쪽 메뉴들 중 관리 메뉴를 클릭하여 관리자 페이지로 이동합니다. 이 과정에서 다소 시간이 걸릴 수 있습니다.



58. 관리자 페이지가 나타납니다. 설치 환경 수집 동의 팝업에 적절한 응답을 선택합니다.



59. 이제 사이트를 구성할 준비가 완료되었습니다.



60. Azure Virtual Machine 관리자 페이지로 되돌아와서 보면 가상 컴퓨터의 움직임이 그래프로 기록된 것을 볼 수 있습니다. 이제 이 그래프가 점점 활기차고 높게 그려질 것을 기대해도 되겠군요. 🙂



마무리하기


지난번에는 Windows Azure Web Site에서 XpressEngine을 설치하는 과정을 설명드렸습니다. 여기서는 MySQL의 클라우드 버전인 ClearDB의 서비스를 사용하는 것을 예로 들어드렸습니다. 이 방법을 사용하시면 동시 접속자 수가 많은 웹 사이트에서 최고의 확장성을 목표로 운영할 수 있습니다. 오늘 소개해드린 방법은 일반적인 서버 호스팅 환경에 익숙하신 분들께 더 친숙하고 유익한 방법이 될 수 있습니다. 늘 그렇지만, 비용과 목적에 알맞는 적절한 서비스 구성이 최적의 클라우드 서비스 선택이 될 것입니다.


감사합니다.

Management Portal에서 미디어 서비스 관리하기

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


오늘 소개해드리려고 하는 내용은 이전에 소개해드렸던 Windows Azure Media Service SDK와 연결되는 웹 서비스를 관리자 포털 (manage.windowsazure.com)에서 쉽게 사용할 수 있도록 만든 기능에 대한 내용입니다. 웹 상에서 최대 200MB까지의 단일 미디어 파일을 업로드할 수 있고, 업로드한 미디어 파일의 공개 URL 및 클라우드 기반 인코딩 작업 생성과 관리에 대한 내용을 소개해드리려고 합니다.


NOTE: 2012년 11월 현재 프리뷰 버전으로 제공되는 기능으로 향후 기능이 바뀌거나 변동되는 내용이 있을 수 있습니다.


Windows Azure Media Service는 기본적으로 프리뷰 서비스이며 별도의 Sign-up Process를 거쳐야 사용이 가능한 서비스이므로 account.windowsazure.com에 방문해서 개별적으로 Windows Azure 계정을 신청해야 합니다.


동영상 파일 업로드하기


Windows Azure Management Portal에 접속한 다음, Media Service에 대한 서비스를 신청한 상태에서 아래 그림과 같이 하단의 UPLOAD 버튼을 클릭합니다.



UPLOAD 버튼을 클릭하면 아래 그림과 같이 로컬에서 업로드할 동영상 파일을 찾고 업로드 후 사용할 BLOB의 이름을 지정하는 입력 상자가 나타납니다. 파일을 선택하면 보통 이름이 자동으로 완성되고 이 이름을 URL에 사용할 수 있으므로 기본 값으로 설정해도 대개는 무방합니다.



테스트 할 동영상으로 에반게리온 신극장판 Q의 예고편 클립을 선택해보았습니다. 🙂



동영상 업로드까지 시간이 많이 소요됩니다. 일단 업로드하고 난 다음에는 위의 그림과 같이 동영상 파일의 크기가 조회 내역에 나타납니다. 만약 업로드에 문제가 있어 완료되지 않은 경우 SIZE 컬럼의 값이 0 Byte로 나타나므로 문제 판단을 쉽게 할 수 있습니다. 이 경우 기존 항목을 삭제하고 다시 업로드하여 문제를 해결할 수 있습니다.


업로드가 끝난 동영상에 대해서는 아래 그림과 같이 커맨드 바에 Encode, Play, Publish 버튼이 나타납니다. Encode 버튼을 클릭하면 현재 선택한 미디어를 기준으로 다른 형식으로 변환할 수 있는 Job을 호출하는 것이고, Play 버튼은 현재 선택한 동영상을 브라우저에서 재생하도록 페이지를 여는 기능, 그리고 Publish 버튼은 다른 사람에게 미디어를 표시할 수 있도록 공개 URL을 Windows Azure Storage에서 할당받는 작업입니다. Publish 버튼을 눌러 공개한 상태에서만 Play 버튼이 작동합니다.



Encode 버튼을 누르면 위의 그림과 같이 팝업이 나타납니다. Preset에서 원하는 미디어 인코딩 형식을 선택하고 인코딩 된 새 파일의 이름을 지정하여 확인 버튼을 클릭하면 작업이 시작됩니다. 이 작업은 비동기적으로 이루어지므로 브라우저를 작업 호출 이후에 그냥 닫아도 무방합니다. 단, 작업이 완료되기 전까지 작업 중인 파일의 크기가 0 Byte로 표시되더라도 덮어쓰거나 삭제할 수 없는 상태로 보호됩니다.



Publish 버튼을 누른 다음에는 위의 그림과 같이 공개 URL이 나타나며, 이 URL을 더블 클릭하여 텍스트를 선택하고 복사할 수 있습니다.


Windows Media Player에서 URL 열기 (Ctrl+U) 기능으로 MP4 미디어 파일을 열어 재생하였을 때 위와 같이 동영상이 원활하게 Progressive Download로 재생이 되고 있습니다.


기능의 제한 사항


현재 포털을 통해서 공개된 부분은 Windows Azure Media Service의 일부 기능에 대한 것으로 PlayReady나 다른 여러 부가 기능들에 대해서는 아직 계속 개발 단계에 있습니다. 지속적으로 업데이트되는 내용을 참고하시어 실제 서비스 도입에 활용하면 유용한 부분이 많을 것으로 예상됩니다.

같은 데이터센터 내의 서로 다른 Storage 계정을 빠르게 동기화하는 방법

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

저의 경우, Windows Azure를 이용하여 서비스를 구축한지 상당한 시일이 지났고, 필요에 따라 데이터센터의 위치는 같지만 서로 다른 Subscription 간에 스토리지 파일들을 주거나 받아야 할 필요성이 생겼습니다. 그 동안은 이 작업을 위해서 클라우드 외부에서 CloudBerry Windows Azure Client를 활용했었는데, 사실 클라우드 외부를 경유하는 과정을 거치면 오버헤드가 있을 수 있고 데이터센터 밖으로 나가는 데이터 트래픽에 관한 비용이 있었습니다.

서로 다른 Azure 저장소 계정 사이의 파일 동기화를 빠른 시간 안에 마무리할 수 있는 좋은 방법이 있어 소개해드리려고 합니다. 일단 이 방법을 위해서도 CloudBerry Windows Azure Client를 사용하는 것이 직접 프로그램을 작성하는 것보다는 여전히 유용합니다만 조금 다른 방법으로 접근하려고 합니다. 알려드리려고 하는 정보에서의 핵심은 작업을 수행하는 지리적 위치에 있습니다. 순서는 다음과 같습니다.

  • Windows Azure Virtual Machine Preview를 신청합니다. (http://manage.windowsazure.com/ 에서 관리할 수 있는 서비스를 의미합니다.)
  • Windows Server 2008 R2 혹은 다른 Windows Server 이미지를 사용하여 가상 컴퓨터의 Small Instance 레벨로 컴퓨터 1대를 생성하고 부팅시킵니다.
  • 프로비져닝이 끝나고 나면, 원격으로 들어가서 CloudBerry Windows Azure Client 프로그램을 다운로드받습니다. http://www.cloudberrylab.com/free-microsoft-azure-explorer.aspx 페이지에서 다운로드하여 설치할 수 있으며, Windows Server OS의 기본 보안 정책 상 IE ESC 설정을 완화해야할 수 있으므로 다운로드가 불편할 경우 IE ESC 설정을 먼저 풀어도 무방합니다.
  • 설치가 끝나고 나면 옮기려고 하는 스토리지 계정과 옮겨놓을 스토리지 계정의 접속 정보를 CloudBerry Windows Azure Client에 등록하고, 왼쪽편을 구 계정, 오른쪽편을 신 계정으로 접속하도록 열어놓습니다. 이때, 빠른 속도를 위해서 계정 정보에서 SSL 연결을 사용하지 않는 것으로 합니다.
  • 선택적으로 옮겨오고 싶은 파일을 Ctrl 키를 눌러 드래그 앤 드롭하면 빠르게 파일이 복사됩니다. 모든 작업이 큐에 저장되므로 먼저 실행 중인 작업이 있어도 계속해서 작업을 추가할 수 있습니다.
  • 작업이 끝난 다음에는 VM, VM 이미지, VM과 연결된 클라우드 서비스, 자동 생성된 스토리지 계정, 구 계정을 차례대로 삭제하시면 됩니다.

자세한 내용을 스크린 샷을 통해서 보여드리면 다음과 같습니다.

IE ESC 설정을 Windows Server 2008에서 해제하려면 서버 관리자 콘솔 프로그램을 실행하고 Configure IE ESC 링크를 찾아 클릭합니다.

대화 상자가 나타나게 되는데, 여기서 Administrators (관리자)에 대한 부분만 Off 라디오 버튼을 체크하고 OK 버튼을 눌러 저장합니다. 만약 이 VM을 계속 사용할 계획이라면 CloudBerry 클라이언트 프로그램을 다운로드하고 설치한 다음에는 반드시 이 설정을 On으로 다시 복구하는 것이 좋습니다.

CloudBerry Windows Azure 클라이언트를 설치하고, 두 곳의 계정 정보를 아래와 같이 등록합니다. 단, 빠른 속도를 위해서 양쪽 모두 SSL 사용을 체크하지 않고 http 통신으로만 연결하도록 설정하는 것이 유리합니다.

앞에서 말씀드린 대로 왼쪽을 소스, 오른쪽을 대상으로 연결 화면을 열어둡니다. Sync Folders 기능이나 복사 관련 기능들은 이와 같은 구도로 UI를 만들었을 때 가장 손쉽게 작업할 수 있도록 동선이 맞추어집니다. 이제 아래와 같은 화면이 되었을 때, 복사할 항목을 Ctrl 키를 누른 채로 오른쪽으로 드래그 & 드롭해서 가져다놓기만 하면 하위 폴더의 모든 항목들을 자동으로 조사하여 복사하기 시작합니다.

대기열의 길이에 상관없이 위와 같이 걸어놓고 프로그램을 최소화하면 트레이 아이콘에서 프로그램이 계속 실행되므로 이렇게 예약해놓고 잠시 쉬다오시면 되겠습니다. 🙂

Windows Azure Consumption Rate 자동 계산 Excel 워크시트

한국 Microsoft의 박중석 Evangelist님의 아이디어 (http://blogs.msdn.com/b/jspark/archive/2011/01/31/110131-windows-azure.aspx) 를 기초로 Windows Azure Consumption Rate를 계산하고, 환율을 입력하면 자동 계산이 가능하도록 만든 Excel Worksheet를 공유합니다. 필요한 부분만 편집할 수 있도록 워크시트를 잠가두었습니다. 비용 계산이 필요하신 분들께 도움이 되고자 자료를 만들어 공유하며, 잘못된 부분이나 수정이 필요한 부분은 이야기해주시면 곧바로 업데이트하겠습니다. 😀

http://cid-318484c5aad6b73d.office.live.com/browse.aspx/rkttu.com%20Documents/Windows%20Azure%20Consumption%20Calculator

Windows Azure Compute의 업그레이드 메커니즘에 대한 이해

Windows Azure Platform에서 Compute 서비스가 차지하는 비중은 매우 큽니다. 그런 만큼, Compute 서비스가 어떤 방식으로 실행되고 동작하는지를 파악하는 것이 필요한데, 이에 대한 이야기를 블로그 글로 써보고자 합니다. 그 중에서도 이번 글은 웹 역할과 작업자 역할에 대한 업그레이드 메커니즘에 대한 이야기를 하고자 합니다.

1. 업그레이드 방법 #1 – VIP 교환 (VIP Swap)

가장 안전하다고 알려진 방법으로, Compute 서비스는 기본적으로 Production와 Staging이 한 벌이 됩니다. 여러분이 신청한 서비스의 실제 도메인 주소와 연결되는 것이 Production 환경이며, Staging 환경은 임의로 생성된 고유 ID 값을 식별자로 사용하는 FQDN 주소를 사용합니다. 만약 기존에 운영 중인 Production 서비스가 이미 있는 상황에서 프로젝트 파일의 구성에 큰 변화가 있을 때, 가령 SDK 버전의 변경, 최소 인스턴스 수 변경, 프로젝트 추가/제거로 인한 구성 변경 등에 해당되는 경우 VIP 교환 방식을 이용하는 것이 필요합니다.

VIP 교환 방식을 사용하면 Windows Azure는 네트워크 위치를 즉시 Production과 Staging을 서로 바꿉니다. 즉, Production에 있는 서비스 전체는 Staging으로 이동하고, Staging에 있는 서비스 전체는 Production으로 이동합니다. 스포츠 경기에서 자주 보는 선수 교체 같은 개념입니다. 🙂

VIP 교체 전/후로는 서비스 자체에 결함이 없는 한, 사용자가 변경되는 시점을 알아차리지는 못합니다. 하지만 완벽하게 Seamless한 서비스 업그레이드를 구현하기 위해서는 세션 상태를 별도의 저장소에 보관하여 이전에 구동중인 서비스에서 가지고 있던 세션을 새로운 서비스에서 이어받아 서비스할 수 있도록 설계하는 것이 필요합니다.

2. 업그레이드 방법 #2 – 패키지 업그레이드

CSPKG 파일과 CSCFG 파일을 Windows Azure SDK나 Visual Studio Tools for Windows Azure를 사용하여 완성하면 이를 Azure Storage나 Management API를 경유하여 직접 업로드하는 방법입니다. 이 방법은 프로젝트에 큰 변화가 없고 소스 코드나 웹 페이지의 일부와 같이 클라우드 응용프로그램의 일부만을 변경할 때에 사용할 수 있는 방법입니다. 효율적인 서비스 관리를 위하여, Windows Azure Storage를 같이 신청하여 비공개 컨테이너를 생성하고 이곳에 여러분의 서비스 패키지를 여러벌을 올려놓고 Management API를 사용하여 필요 시 교체할 수 있습니다.

패키지 업그레이드는 VM을 새로 생성하거나, 실행 중인 VM의 OS를 다시 시작시키지 않으며, Windows Azure Fabric Controller의 지시에 따라 내부적으로 기존에 사용중이던 가상 하드 디스크를 언마운트하고, 새로운 가상 하드 디스크를 생성하여 마운트를 합니다. 이전에 올렸던 Windows Azure의 파일 시스템에 대한 글 [Windows Azure Platform/Compute] – Windows Azure VM의 파일 시스템 구조 를 잠시 인용하면, C에는 Local Storage를 위한 공간으로 할당이 되고, D에는 Windows OS가 설치된 공간이며, E부터 Z까지는 동적으로 마운트하는 가상 하드 디스크들을 위한 공간으로 활용이 된다고 하였습니다. 여기서 보통은 E로 시작하여 업그레이드 때 마다 F나 E 드라이브로 다시 마운트 되며, Windows Azure Drive는 그 이후, 보통은 G 드라이브부터 가상 하드 디스크를 마운트하는 셈입니다.

보통은 패키지 내에서 실행되던 응용프로그램은 업그레이드와 함께 종료되고 다시 시작되지만, 패키지의 권한 밖에서, 관리 목적으로 열어놓은 문서 형식의 파일에 대해 명시적으로 Lock을 걸고 있는 경우 업그레이드가 실패할 가능성도 일부 있어보입니다. 지금 언급하는 방법으로 업그레이드에 실패하는 경우 원격 데스크톱으로 열어놓은 항목을 검토할 필요가 있을 것입니다.

3. 업그레이드 방법 #3 – 완전 삭제 후 다시 배포

이것은 업그레이드 메커니즘이라기보다 재설정이라고 하는 것이 정확합니다. 보통은 이 방법까지 오지 않고 VIP 교환으로 해결할 수 있고 또한 그럴 필요가 있습니다. 안타깝게도, Visual Studio Tools for Windows Azure에서 패키지를 배포하는 방법은 이 방법에 속합니다. 따라서, Visual Studio를 이용하여 배포할 때에는 도구 자체의 기능을 사용하여 Production Deploy를 수행하는 것은 위험하며, VIP 스왑을 위한 전초 단계로만 제한적으로 활용하는 것이 안전합니다.

[Web Cast] Security Best Practices for Design and Deployment on Windows Azure

Windows Azure에서의 설계와 배포를 위한 권장 사항 (원본 주소: http://technet.microsoft.com/en-us/security/ff646958.aspx)


시간: 46분
날짜: 2010년 4월 29일

KT_iOvQ1xHc$


Windows Azure 아키텍처가 어떤 방법으로 클라우드에 특화된 보안 상 위협을 대비하는지 확인할 수 있습니다. 이 웹 캐스트를 통하여 Windows Azure에 내장된 보안 기능이 여러분의 응용프로그램을 어떻게 보호할 수 있는지 살펴봅니다. 그리고 서비스를 설계할 때 어떻게 하면 보안 상 취약한 노출 영역을 최소화할 수 있는지를 배워봅니다.