[STL] 12. <algorithm>에 추가된 새로운 함수들 iota

C++0x 2011. 5. 19. 09:00 Posted by 알 수 없는 사용자

데이터셋을 시퀸스(연속적인)한 값으로 채우고 싶을 때는 iota 알고리즘을 사용합니다.

앞서 소개한 알고리즘들은 <algorithm> 헤더 파일에 정의 되어 있는 것에 반해 iota 알고리즘은 <numeric> 헤더 파일에 정의 되어 있습니다.

 

itoa

template<class ForwardIterator, class T>

  void iota(ForwardIterator first, ForwardIterator last, T value);

 

 

아래는 예제 코드와 결과 입니다.

#include <iostream>

#include <vector>

#include <numeric>

using namespace std;

 

int main()

{

           vector<int> Numberlist;

           Numberlist.push_back( 2 );

           Numberlist.push_back( 5 );

           Numberlist.push_back( 7 );

           iota( Numberlist.begin(), Numberlist.end(), 2 );

 

           for( auto IterPos = Numberlist.begin(); IterPos != Numberlist.end(); ++IterPos )

           {

                     cout << *IterPos << endl;

           }

 

           return 0;

}

 

< 결과 >

 

위 예제를 보면 아시겠지만 iota의 세 번째 인자의 값이 시작 값이고, 이후에 값이 하나씩 증가합니다.

 

SQL Azure 데이터 이용(1)

Cloud 2011. 5. 17. 08:30 Posted by 알 수 없는 사용자

SQL Azure 데이터 이용(1)

SQL Azure 에 데이터를 이전했고 로컬 응용프로그램에서 데이터를 이용하는 내용을 알아보도록 하겠습니다.

VS 2010을 이용해서 Windows Forms 응용 프로그램을 생성합니다. 이를 통해 클라우드에 있는 SQL Azure 데이터를 로컬 응용 프로그램에서 나타내보도록 하겠습니다.

시작하기 전에 결론은 C#을 이용해 ADO.NET으로 똑같이 액세스할 수 있다는 것입니다. 연결 문자열만 달라지며 Azure 방화벽 외에는 동일하다는 것입니다.

Windows Forms 응용 프로그램을 생성합니다.


간단한 Form 디자인을 아래와 같이 합니다. ComboBox DataGridView 를 통해 데이터를 나타내보도록 하겠습니다.

데이터베이스 액세스를 위해 Enterprise Library 5.0을 이용할 것이며 참조 추가를 통해 관련 어셈블리를 추가합니다.
(Microsoft.Practices.EnterpriseLibrary.Common, Microsoft.Practices.EnterpriseLibrary.Data)

데이터 액세스를 위한 연결 문자열은 App.config에 아래와 같이 구성합니다.

<connectionStrings>

<add name="sqlazure1" connectionString="Data Source=SQLAzure서버이름;User ID=사용자계정;Password=비밀번호;Initial Catalog=AdventureWorksLTAZ2008R2" providerName="System.Data.SqlClient"/>

</connectionStrings>

데이터액세스를 위한 클래스를 추가합니다. 클래스 이름은 clsProduct으로 지정합니다.

ProductSubCategory 리스트와 SubCategory Product 리스트를 반환하는 메서드를 아래와 같이 정의합니다.

public DataSet GetProducts(string ProductCategoryID)

{

DataSet ds = new DataSet();

Database db = DatabaseFactory.CreateDatabase("sqlazure1");

string spName = "[SalesLT].[usp_GetProductByCategoryID]";

DbCommand cmd = db.GetStoredProcCommand(spName);

db.AddInParameter(cmd, "ProductCategoryID", DbType.Int32, ProductCategoryID);

ds = db.ExecuteDataSet(cmd);

return ds;

}

Form1.cs로 이동하여 아래와 같이 필드를 선언하고 InitializeComponent 아래에 코드를 작성합니다. ComboBox SQL Azure의 데이터를 나타내는 내용입니다.

public partial class Form1 : Form

{

clsProduct product = new clsProduct();

public Form1()

{

InitializeComponent();

cbSubCategory.DataSource = product.GetProductSubCategory().Tables[0];

cbSubCategory.DisplayMember = "Name";

cbSubCategory.ValueMember = "ProductCategoryID";

GetProducts();

}

또한 ComboBox SelectedIndexChanged 이벤트를 발생시켜 아래와 같이 코드를 작성합니다.

private void cbSubCategory_SelectedIndexChanged(object sender, EventArgs e)

{

GetProducts();

}

GetProducts 메서드는 Products 리스트를 얻어 오는 내용이며 아래와 같이 코드를 작성합니다.

private void GetProducts()

{

dataGridView1.DataSource = product.GetProducts(cbSubCategory.SelectedValue.ToString()).Tables[0];

}

프로젝트를 실행해서 결과를 확인합니다.

이상에서 보았듯이 로컬의 응용프로그램에서 SQL Azure를 액세스하는 것은 별다른 내용 없이 로컬에 있는 SQL 데이터를 액세스하는 것과 동일합니다.

유효성 검사 – 열, 목록

SharePoint 2010 2011. 5. 13. 08:30 Posted by 알 수 없는 사용자

유효성 검사, 목록


SharePoint 2010
의 목록에서 유효성 검사에 대한 다양한 내용이 있는데 앞에서는 코드를 통한 내용을 살펴보았습니다. 하지만 SharePoint 2010에서는 새롭게 열, 목록에 대한 유효성 검사를 제공하고 있습니다. 웹 페이지를 통해 손쉽게 설정할 수 있습니다.

먼저 열의 유효성 검사에 대한 내용을 알아보겠습니다. 해당 목록의 설정 페이지에서 검사할 열을 클릭하면 아래 부분에 열 유효성 검사라는 링크를 볼 수 있습니다.



확장하면 아래와 같이 보입니다. 간단하게 제목에 “test” 라는 말이 들어오면 메시지를 나타내보도록 하겠습니다. 수식은 유효한 식을 나열하는데 SQL 구문과 유사하게 작업할 수 있으며 수식이 거짓인 경우 사용자 메시지가 나타나게 됩니다.



실행해서 결과를 테스트합니다.


필수 열인데 값을 입력하지 않거나 정수 형식인데 문자를 입력하면 기본적으로 열 유효성 검사가 수행됩니다. 간단하게 열 유효성 검사를 확인할 수 있습니다.

이제 목록의 유효성 검사를 알아봅니다. 열 유효성 검사에서는 다른 열을 참조할 수 없습니다. 목록에서는 다른 열과 비교하여 검사할 수 있습니다. 목록의 유효성 검사는 해당 목록의 설정 페이지에 보면 일반 설정에 유효성 감사 설정이라는 메뉴를 살펴볼 수 있습니다. 클릭하면 아래와 같은 화면을 볼 수 있습니다.

공지사항의 만료 일자와 만든 날짜를 비교해서 만든 날짜보다 작을 경우 메시지를 나타내게 유효성 검사를 설정 할 수 있습니다.


과거 일자를 만료 날짜로 설정하면 아래와 같은 결과를 볼 수 있습니다.

코딩 없이 열, 목록 유효성 검사를 손쉽게 처리한 내용을 살펴보았습니다.


[STL] 11. <algorithm>에 추가된 새로운 함수들 is_heap, is_heap_until

C++0x 2011. 5. 11. 09:00 Posted by 알 수 없는 사용자

is_heap is_heap_until는 앞서 소개했던 is_sorted, is_sorted_until과 비슷한 알고리즘입니다. 차이가 있다면 is_heap is_heap_until는 정렬이 아닌 Heap을 다룬다는 것만 다릅니다.

 

is_heap은 데이터셋이 Heap으로 되어 있는지 아닌지, is_heap_until는 데이터셋에서 Heap이 아닌 요소의 첫 번째 위치를 반환합니다.

 

is_heap

template<class RandomAccessIterator>

    bool is_heap(

        RandomAccessIterator _First,

        RandomAccessIterator _Last

    );

template<class RandomAccessIterator, class BinaryPredicate>

    bool is_heap(

        RandomAccessIterator _First,

        RandomAccessIterator _Last,

        BinaryPredicate _Comp

    ); 

 

 

is_heap_until

template<class RandomAccessIterator>

    bool is_heap_until(

        RandomAccessIterator _First,

        RandomAccessIterator _Last

);

template<class RandomAccessIterator, class BinaryPredicate>

    bool is_heap_until(

        RandomAccessIterator _First,

        RandomAccessIterator _Last,

        BinaryPredicate _Comp

);

 

 

is_heap is_heap_until는 각각 조건자를 사용하는 버전과 사용하지 않는 버전 두 개가 있습니다. 조건자를 사용하지 않는 경우는 operator< 를 사용합니다.

 

 

그럼 is_heap is_heap_until을 사용한 아주 간단한 예제 코드를 봐 주세요^^

#include <iostream>

#include <algorithm>

using namespace std;

 

 

int main()

{

           int Numbers1[10] = { 50, 25, 20, 7, 15, 7, 10, 2, 1, 3 };

           int Numbers2[10] = { 50, 25, 20, 7, 15, 7, 10, 6, 11, 3 };

           int Numbers3[10] = { 50, 25, 20, 7, 15, 16, 12, 3, 6, 11 };

          

          

           bool IsResult = false;

           IsResult = is_heap( &Numbers1[0], &Numbers1[10], [](int x, int y) { return x < y; } );

           cout << "Numbers1 Heap인가 ? " << IsResult << endl;

 

           IsResult = is_heap( &Numbers2[0], &Numbers2[10], [](int x, int y) { return x < y; } );

           cout << "Numbers2 Heap인가 ? " << IsResult << endl;

 

           IsResult = is_heap( &Numbers3[0], &Numbers3[10] );

           cout << "Numbers3 Heap인가 ? " << IsResult << endl;

 

           cout << endl;

           int* NumIter = is_heap_until( &Numbers2[0], &Numbers2[10], [](int x, int y) { return x < y; } );

           cout << "Numbers2에서 Heap되지 않은 첫 번째 위치의 값 : " << *NumIter << endl;

 

           return 0;

}

 

< 결과 >

 

 

 

ps : 자료구조 Heap에 대해서 잘 모르시는 분들은 아래의 글을 참고해 주세요

http://blog.naver.com/ctpoyou/105423523


Windows Azure Application - Hello Azure (2)

Cloud 2011. 5. 10. 08:30 Posted by 알 수 없는 사용자

Windows Azure Application - Hello Azure (2)

이전 글에서 로컬에서 Windows Azure 응용 프로그램을 처리했으므로 여기서는 Cloud로 배포를 해보도록 하겠습니다. 업데이트된 Management Portal을 통해 진행합니다.

HelloAzure 프로젝트를 클릭해서 게시 메뉴를 사용해봅니다. 게시 메뉴를 클릭하면 어셈블리, 구성 파일을 포함하는 서비스 패키지 파일을 생성하게 됩니다.


Windows Azure 프로젝트 배포 창이 나타나며 서비스 패키지만 만들거나 Windows Azure로 자격증명을 이용해서 배포할 수 있습니다. 여기서는 서비스 패키지만 만들기를 클릭합니다.


탐색기가 나타나며 서비스 패키지를 확인 할 수 있습니다.



Windows Azure 사이트를 액세스합니다. http://windows.azure.com



Live ID로 로그인합니다. Windows Azure Management Portal에서 구독을 생성되어야 합니다. 활성화 되어 있다면 New Hosted Service 프로젝트를 클릭할 수 있습니다.


또한 기존에 생성된 서비스를 확인할 수 있습니다.

New Hosted Service 메뉴를 클릭합니다.



서비스 이름에는 “Hello Azure” 를 입력하고 URL에는 원하는 주소를 입력합니다.

Choose a region에서는 적절한 지역을 선택합니다.

Deployment Name에는 “HelloAzure” 로 입력합니다.

Package location, Configuration File은 패키지 만들기에서 탐색기에서의 파일을 선택합니다.

OK를 클릭합니다.

Hosting을 생성하고 Staging 환경으로 배포를 하게 됩니다.

Instance Status의 값이 Ready가 되면 Staging 생성이 완료된 것이며 Deployment 타입의HelloAzure 를 선택하고 오른쪽 속성 창의 DNS Name을 클릭하면 staging에서의 결과를 알 수 있습니다.

Production 환경으로의 배포는 SWAP VIP 아이콘을 클릭하면 됩니다. Staging에서 Production으로 변경된 것을 확인 가능합니다.



그러면 위에서 입력한 URL 내용으로 결과를 확인 가능합니다.

VS 2010을 통해 Windows Azure 프로젝트로 Hello Azure를 생성해서 업데이트된 Management Portal 에 배포하여 실제 Production으로 게시해서 결과를 확인해보았습니다. 여러 가지를 응용이 가능하며 VS 2010 개발 경험에 C#으로 손쉽게 클라우드 응용 프로그램을 생성할 수 있다는 것을 알 수 있습니다.


Windows Azure를 이용하여 프로그래밍을 하는 작업은 개발자나 관리자 모두에게 큰 변화를 요구합니다. 그 중에서도 가장 큰 변화는, 관리하고 점검해야 할 리소스의 폭 자체에 큰 변동이 온다는 것입니다. 대개의 경우, 인프라를 서비스로 제공받을 것인지, 플랫폼까지를 서비스로 제공받을 것인지, 심지어는 소프트웨어 자체를 서비스로 제공받기를 원할지 중에서 하나를 골라야 합니다. 하지만 개발자들의 관심사는 무엇을 서비스로 제공하는 것 말고도, “어떻게활용할 수 있는가에 대한 것 역시 이슈가 됩니다.

Windows Azure와 같은 플랫폼 기반 클라우드에 대해서 일반적으로 많이 오해하는 부분 중 하나는, 지금 내가 운영 중인 웹 사이트나 서비스 전체를 클라우드로 옮겨야만 하는 것에 대한 부분입니다. 이렇게 하지 않으면 클라우드를 쓰는 것이라고 말할 수 없는 것일까요? 결론부터 이야기하면 전혀아닙니다. 클라우드를 이용하는 방법은 전적으로 여러분의 아이디어에 달려있는 것이다.

신뢰할 수 있고 유연한 저장소를 응용프로그램에 통합하기

Windows Azure에는 서비스나 웹 사이트를 호스팅하기 위한 Compute가 있고, Compute의 성능에 대응할 수 있는 초고속 대용량 저장소인 Storage 서비스가 같이 그룹을 지어 다닙니다. 물론 둘 사이는 Affinity Group으로 묶어서 재해가 발생했을 경우 가용성을 보장할 수 있도록 밴드를 형성하는 것이 기본입니다. 하지만, 기존에 개발 중인 소프트웨어 그 자체에 신뢰할 수 있고 유연한 저장소를 만들고자 한다면 독립적으로 Storage 서비스만을 이용할 수도 있습니다.

익히 알려진 대로, Storage 서비스에는 세부적으로 세 가지 유형의 저장소가 있습니다. 대표적으로 파일을 저장하거나 BLOB 이미지를 관리할 수 있는 BLOB Storage, 대용량 비 관계형 데이터베이스인 Table Storage, 그리고 고속으로 메시지를 큐에 저장하고 불러올 수 있는 Queue Storage가 있습니다. 이들 서비스 모두 HTTP HTTPS 프로토콜을 지원하는데다가, RESTFUL 기반 서비스이기 때문에 인터넷과 호환되는 응용프로그램을 개발할 것이라고 한다면, 여러분이 어떤 개발 도구를 사용하든, 어떤 운영 체제를 목표로 응용프로그램을 개발하든 관계없이 마음껏 활용할 수 있습니다. C# Visual Basic .NET 의 경우 Windows Azure SDK 안의 공식 어셈블리를 사용하면 LINQ to Azure Table Storage까지 사용할 수 있으며, 그 외 많은 오픈 소스 라이브러리들을 Microsoft Interoperability Bridge 공식 웹 사이트를 통하여 찾아볼 수 있습니다.

여러분의 웹 사이트를 좀 더 인터넷 친화적으로 만들기

요즈음 웹 사이트들은 매우 개방적입니다. 단순히 RSS ATOM Feed로 데이터를 노출한다거나, RESTFUL 기반 URL 다시 쓰기를 지원한다고 해서 그런 것이 아니라, 인증에 대한 개념 자체를 완전히 다르게 해석하고 접근하는 사이트들이 많기 때문입니다. Open ID, Live ID 등 다양한 방법으로 불리고 있지만 한 가지 일관성을 보이는데 바로 이들 개별 웹 사이트들은 여러분의 ID와 암호가 무엇인지에 대해서는 전혀 관심이 없고, 그저 여러분이 누구인지에 대해서만 관심이 있을 뿐이라는 점입니다. 이러한 인증 행태를 놓고 클레임 기반 인증이라고 말합니다.

클레임 기반의 인증을 사용하는 웹 사이트들의 대표적인 예로, Twitter 관련 플러그인 사이트들이 있으며, 페이스 북에 올라가는 수많은 Social App들 역시 그러합니다. 그리고 국내에서는 그간 유명했던 스프링노트가 Open ID를 잘 지원하고 있고, 과거의 이야기가 되었지만 ME2DAY 역시 Open ID를 지원했던 때가 있습니다. 클레임 기반의 인증을 통하게 되면 어떤 이점이 있기에 이렇게 많은 웹 사이트들이 채택을 하고 있는 것일까요? 조금 전에 이야기한 것처럼, 여러분의 웹 사이트가 책임지고 관리해야 할 위험 부담 중 가장 큰 것을 완전히 덜어버리고 비용도 절감할 수 있기 때문입니다.

클레임 기반의 인증을 여러분의 웹 사이트에 적용한다는 것은, 해당 웹 사이트를 방문하는 사용자들이 이미 타 기관에서 인증을 거친 후에 다시 여러분의 웹 페이지로 이동한 것을 의미하고 여기에 대한 모든 정보를 해당 인증 기관으로부터 선택적으로 넘겨 받게 되는 것입니다. 다시 이야기하지만 상대방의 ID와 암호를 알 필요 없이 피아식별이 된 상태를 유지할 수 있다는 것입니다.

Windows Azure의 경우, 여기에 한 가지 더 편리한 서비스를 제공하는데, 이번에 새로 업그레이드된 Windows Azure AppFabric Access Control v2.0이 그 주인공입니다. 이하 Access Control은 처음 발표 당시에는 여러분이 소유하고 있었던 Active Directory를 인증의 주체로 세울 수 있는 Active Directory Federation Services (AD FS)와 이에 연관된 서비스만을 지원했지만, 이번 업그레이드에서는 그 뿐만 아니라 Windows Live ID, Google, Yahoo, Facebook 등의 유명한 인터넷 서비스 공급자들의 ID로 신원 인증 수단으로 추가 지원하게 되었습니다. 인증 관련 서비스에 장애가 발생할 걱정 없이, 그리고 여러분의 개별 웹 사이트에 대한 해킹 위험은 최소화시키면서 서비스 그 자체에만 집중할 수 있게 되는 것입니다.

확장 가능한 Cache/Session 서비스 사용하기

Windows Azure에 근래 들어서 추가된 또 다른 매력적인 서비스는 바로 AppFabric Cache 서비스입니다. AppFabric Cache Server AppFabric Cache와 기술을 공유하지만, 내부적으로는 Windows Azure Cloud Computing 기술을 바탕으로 매우 높은 성능의 Cache 서비스를 제공하는 것으로, ASP .NET 뿐만 아니라 다른 여러 플랫폼과도 혼용해서 사용할 수 있는 것이 장점입니다.

단순히 Cache 서비스뿐만 아니라, Session State까지 AppFabric Cache에서 통합 관리할 수 있기 때문에, 사이트 간 Session 공유나 Single Sign On 등의 기능을 어렵지 않게 구현할 수도 있습니다.

그 외에도 수 많은 가능성들

이 글에서 모두 열거하기 힘들 정도로 Windows Azure의 서비스들은 날이 갈수록 풍성해지고 성숙도를 더해가고 있습니다. Real-World Windows Azure Development Guide 시리즈는 Windows Azure Platform의 여러 기술들을 지속적으로 알리고 개발자들에게 좀 더 친숙한 Cloud 개발을 할 수 있는 방안을 모색하기 위하여 시리즈로 연재 될 예정입니다. 많은 관심과 피드백을 독자 여러분들께 부탁 드리고자 합니다.

'Cloud' 카테고리의 다른 글

SQL Azure 데이터 이용(1)  (0) 2011.05.17
Windows Azure Application - Hello Azure (2)  (0) 2011.05.10
Windows Azure VM Role 미리보기 #6  (0) 2011.05.09
Windows Azure VM Role 미리보기 #5  (0) 2011.05.09
Windows Azure VM Role 미리보기 #4  (0) 2011.05.09

이번 시간에는 지난 시간들까지 언급한 내용을 기반으로 해서,
간단한 테셀레이션 작업을 구현해 보려 합니다.

당연한 얘기이겠지만,
하드웨어 기반의 테셀레이션은 하드웨어의 지원이 없으면 매우 느립니다.
즉 DirectX11 이상을 지원하는 그래픽 카드가 아니면,
효과를 눈으로 확인하는 것조차 무척 고통스럽습니다.

그래서 이번 시간에 만들 테셀레이션은 간단히 삼각형 하나를 이용합니다.
우리는 이 삼각형 하나를 가지고 테셀레이션 작업을 수행할 것이며,
DirectX11 을 지원하지 않는 그래픽카드라면
강제적으로 REF 모드로 테셀레이션 작업을 수행하도록 합니다.

먼저 결과 샘플을 보면 아래와 같습니다.



이제 우리가 만들려는 그림이 그려졌으니, 직접 코딩 작업을 시작하겠습니다.
이 글에서는 DirectX11 의 기본 셋팅과 관련한 사항은 생략합니다..^^
자세한 API 적인 설명은 생략을 하니 DirectX 2010 6월 버전의 SDK 의 튜토리얼을 참고하시거나,
'알코코더의 DirectX11' 을 참고하시기 바랍니다.^^

우리가 이번 샘플에서 사용할 버텍스 데이터의 형식은 위치 정보만 있으면 됩니다.
이번 샘플에서는 최대한 간단하게 작성하는 것을 목적으로 했기 때문에,
많은 정보를 필요로 하지는 않습니다..^^
그래서 아래와 같이 간단한 버텍스 형식을 정의했습니다..^^



생소한 데이터 타입이 보입니다. 바로 XMFLOAT3 입니다.
DirectX11 부터는 D3DX 계열의 수학 데이터 타입들은 더 이상 업데이트 되지 않습니다.
지금부터는 XNA Math 라는 수학 라이브러리를 사용합니다.
그렇다고 더 이상 D3DX 계열의 수학 데이터 타입들을 사용할 수 없는 것은 아니니, 안심하시기 바랍니다.
이들에 대해서는 향후 언급할 기회가 있으니,
지금은 D3DX 계열의 수학 클래스 대신에 XNA Math 라는
새로운 수학 클래스를 사용한다는 정도로만 인식하고 넘어가겠습니다.^^


아래는 우리가 애플리케이션 전역으로 사용할 변수들의 선언입니다.



그 동안의 DirectX11을 언급하면서 꾸준히 언급되던 내용이기에 자세한 설명은 생략하겠습니다.

특이할 만한 것이라면, 래스터라이져 스테이트 오브젝트를 2개 만드는 것입니다.
이는 우리의 샘플이 솔리드( Solid ) 한 렌더링과 와이어프레임( Wire-Frame ) 기반의 렌더링으로
전환이 가능하기 때문입니다.

다음은 상수버퍼( ConstantBuffer ) 에 관한 전역 선언들 입니다.



우리는 월드 좌표계의 정점을 버퍼에 입력할 것입니다.
그래서 View-Projection 행렬만 변환을 위해서 필요합니다.
그리고 얼마나 테셀레이션 작업을 세밀하게 할지를 결정하는 상수를 하나 추가합니다.



쉐이더를 컴파일 해주는 보조 함수를 다음과 같이 하나 만듭니다.


이제 본격적으로 시작을 합니다.
InitD3D() 에 각종 초기화 작업을 수행합니다.
앞서 잠깐 언급드렸듯이,
DirectX11을 지원하는 하드웨어가 아니면, 강제로 REF 모드로 동작하도록 합니다.
또한 이 함수에서는 각 쉐이더 스테이지에 대응되는 HLSL 코드를 컴파일 해줍니다.
그리고 이들에 대한 각 오브젝트를 만듭니다.
초기화 작업은 주로 반복적인 작업이 많기 때문에, 설명은 생략합니다.

InitD3D() 에 버텍스버퍼의 데이터를 설정해 줘야 합니다.
이번 샘플에서는 월드 좌표로 정의된 삼각형을 사용할 것입니다.
또한 카메라 공간에 대한 설정도 같이 해 줍니다.
이들에 대한 코드는 아래와 같습니다.


이 정도로 초기화와 관련된 작업을 마무리 합니다.
이제는 프레임 관련한 처리를 작성합니다.( Render() )

이 Render() 부분에서는 상수버퍼에 설정할 데이터들을 다음과 같이 업데이트 합니다.

 


우리는 와이어프레임 모드와 솔리드 모드의 렌더링 방식 둘 다를 표현할 것이기에,
이들에 대한 설정도 아래와 같이 고려해 주어야 합니다.



그리고 마지막으로 입력되는 버텍스 형식을 알려주고 버텍스 버퍼를 연결한 후에,
그리기 작업을 수행합니다.^^



이제 키보드 이벤트에 따라 약간의 변화를 주는 작업을 합니다.
현재는 'w' 키로 렌더링 모드를 Wire 와 Solid 간의 토글이 되도록 설정합니다.
그리고 위/아래 방향키로 테셀레이션의 분할 정도를 증감합니다.

이번 작업은 여기까지 입니다.
지금까지 DX11을 살펴보면서, 언급된 내용들이 대부분이라 전체적으로 설명드리지는 않습니다.
( HLSL 코드도 최대한 간결하게 작성했습니다..^^ )
샘플을 같이 첨부드리니, 직접 작성하시면서 익혀보시기 바랍니다.^^

Windows Azure VM Role 미리보기 #6

Cloud 2011. 5. 9. 02:13 Posted by 알 수 없는 사용자

VM Role 관리하기 - 차이점 보관 디스크 만들기

VM Role을 성공적으로 클라우드에 출판했지만 이제 마지막으로 걱정거리가 하나 남습니다. 새로운 기능을 추가할 때나 소프트웨어를 추가하는 일은 너무나 당연한 일입니다. 그런데 VM이 자동으로 증식할 때 마다 원격으로 들어가서 매번 새롭게 VM을 고쳐야 하는 것일까요? 아니면 매번 덩치 큰 이미지를 올리기 위해서 퇴근도 못하고 기다려야 하는 것일까요? 그렇지 않습니다.

차이점 보관 디스크라고 번역되었고, 영문 버전에서는 Differencing Disk로 불리는 기능을 사용하면 문제를 간단하게 해결하고 시간도 절약할 수 있습니다. 덤으로, 버전 관리의 혜택까지 얻을 수 있으므로 훨씬 실리적이지요. 차이점 보관 디스크를 부모 디스크로부터 만들고, CSUPLOAD 도구를 이용하여 차이점 보관 디스크 이미지 파일을 올릴 때 원격지에 게시된 부모 디스크 이름을 정확히 지정하여 관계를 설정하고, Visual Studio 없이 관리 콘솔 상에서 환경 설정 파일만 편집하면 쉽게 업데이트할 수 있습니다. 만약 여러 벌의 차이점 보관 디스크를 미리 올려 놓았다면 당연히 선택적으로 여러분이 원하는 상태의 이미지를 기준으로 상태를 전환할 수 있으므로 언제나 안정적인 시스템 상태를 유지할 수도 있습니다.

이제부터 작업 과정을 한 단계씩 살펴보기로 하겠습니다.

1. 시작 메뉴의 관리 도구 메뉴를 통하여 Hyper-V 관리자를 실행합니다.

2. 좌측의 서버 이름 트리 항목을 오른쪽 버튼으로 클릭하고, 새로 만들기 – 하드 디스크를 클릭하여 마법사를 시작합니다.

3. 새 가상 하드 디스크 마법사가 나타나면 다음 버튼을 클릭하여 소개 페이지를 넘깁니다.

4. 아래와 같이 화면이 나타나면 차이점 보관 디스크 항목을 클릭한 후 다음 버튼을 클릭합니다.

5. 차이점 보관 디스크를 저장할 디렉터리 경로와 파일 이름을 아래 화면과 같이 설정하고 다음 버튼을 클릭합니다. 나중에 CSUPLOAD 도구를 이용하여 파일을 올릴 것을 감안하여 찾아보기 쉬운 경로에 파일을 만들어 둡니다.

6. 디스크 설정 단계에서 부모 가상 하드 디스크를 선택합니다. Step 1에서 만들었던 가상 하드 디스크 파일의 경로를 확인하여 그 경로를 찾아보기 버튼을 클릭하여 지정합니다.

7. 설정한 내용이 정확히 지정되었는지 다시 확인한 후 마침 버튼을 클릭합니다.

8. 기존의 부모 하드 디스크와 연결된 가상 PC의 항목을 트리 뷰에서 선택합니다. 작업을 계속하기 위해서는 해당 가상 PC가 종료되어야 합니다. 실행 중인 경우 가상 PC 내의 운영 체제에서 시스템 종료 기능을 사용하여 안전하게 종료합니다. 종료한 후 가상 PC 속성을 엽니다.

9. 아래와 같이 IDE Controller 0 항목에 연결된 하드 디스크를 기존의 부모 디스크 대신 7단계에서 확정한 차이점 보관 디스크 파일의 경로를 대신 지정하고 확인 버튼을 클릭합니다. 차이점 보관 디스크 내의 설정에 따라 부모 디스크의 내용을 기반으로 나머지 모든 내용은 차이점 디스크에 기록됩니다.

10. 다시 가상 PC를 시작합니다. 해당 가상 PC 항목을 더블 클릭하여 제어 창을 열거나 트리 뷰에서 가상 PC 항목을 오른쪽 버튼으로 클릭하고 연결 버튼을 눌러서 창을 연 다음 도구 모음의 시작 버튼을 클릭합니다.

11. 아래와 같이 로그인 화면이 나타나면 관리자로 로그인합니다.

12. 지금부터는 실제로 밖에서 알아보기 쉬운 차이점을 만들기 위한 작업이므로 여러분의 취향대로 작업을 진행해도 무방합니다. 여기서는 IIS 웹 사이트 기본 페이지에 등장하는 이미지를 수정하여 원격에서 쉽게 업데이트 여부를 파악할 수 있도록 해볼 것입니다. 이를 위하여 가상 운영 체제 내에서 시작 – 모든 프로그램 – 보조프로그램의 그림판을 클릭합니다.

13. 그림판에서 파일 열기 기능을 이용하여 C:\INETPUB\WWWROOT\WELCOME.PNG 파일을 엽니다.

14. 그림판의 도구 리본 메뉴에서 텍스트 항목을 선택하고, 잘 보이는 곳에 텍스트를 새로 써넣습니다.

15. 제목 표시줄의 제일 좌측에 있는 디스켓 아이콘을 클릭하여 저장합니다.

16. 이제 차이점 보관 디스크를 출판하기 위해서 시스템을 다시 봉인해야 합니다. 시작 메뉴의 프로그램 및 파일 검색 입력란에서 아래의 명령어를 입력한 후 Enter 키를 누릅니다.

%WINDIR%\SYSTEM32\SYSPREP\SYSPREP.EXE

그리고 시스템 준비 도구 대화 상자에서 아래 그림처럼 설정합니다.

17. 시스템이 종료되면 이제 차이점 보관 디스크가 완성됩니다. 이제 이 파일을 CSUPLOAD 도구를 이용하여 올릴 차례입니다.

18. 시작 – 모든 프로그램 – Windows Azure SDK v1.3 – Windows Azure SDK Command Prompt를 선택하여 명령줄 창을 시작합니다.

19. 아래와 같이 명령어를 입력합니다.

csupload Add-VMImage -Connection "SubscriptionId=<YOUR-SUBSCRIPTION-ID>; CertificateThumbprint=<YOUR-CERTIFICATE-THUMBPRINT>; ServiceManagementEndpoint=https://management.core.windows.net/" -Description "<YOUR-VHD-DESCRIPTION>" -LiteralPath "<PATH-TO-VHD-FILE>" -Name <FILE-NAME-OF-VHD>

  • <YOUR-SUBSCRIPTION-ID>: 이전에 획득한 Subscription ID 값을 이곳에 붙여넣습니다.
  • <YOUR-CERTIFICATE-THUMBPRINT>: 이전에 획득한 손도장 값을 이곳에 붙여넣습니다. 단, 이 때 형식은 연속된 형태의 띄어쓰기없는 16진수 값이어야 합니다.
  • <YOUR-VHD-DESCRIPTION>: 업로드한 VHD 파일을 나중에 Portal Site에서 찾아볼 때 식별할 수 있는 설명 문자열을 이곳에 지정합니다.
  • <PATH-TO-VHD-FILE>: 업로드할 차이점 보관 디스크 파일의 경로를 지정합니다.
  • <FILE-NAME-OF-VHD>: 업로드하고 난 이후 Portal Site에서 사용할 VHD 파일의 이름을 지정합니다. 영어로 짧게 지정하는 것이 필요하고 확장자 VHD를 정확히 붙여주는 것이 필요합니다.

이렇게 완성된 명령어를 클립보드에 복사하여 명령 프롬프트 창에서 오른쪽 버튼을 클릭한 후 붙여넣기 항목을 클릭하면 간편하게 명령어를 콘솔에 입력할 수 있습니다. 아래는 명령어의 사용 예시입니다.

csupload Add-VMImage -Connection "SubscriptionId=417bb132-f6f0-e9a8-8e2d-a07bcd2ae122; CertificateThumbprint=93b1a5bf0764c0f4bc68b393b3811a7903d5bbd5; ServiceManagementEndpoint=https://management.core.windows.net/" -Description "Differencing image Windows Server 2008 R2" -LiteralPath "C:\VHD\diffimage.vhd" -Name diffimage.vhd

명령어를 실행하면 아래와 같이 작업이 진행될 것입니다.

20. VHD 유효성 검사 도구 안내 창이 중간에 나타날 수 있으며 이 때 계속 진행하도록 허용하고, 자동 실행 대화 상자가 이어서 나타나면 역시 닫습니다. 모든 과정이 완료될 때 까지 기다립니다.

21. 이제 차이점 보관 디스크의 종속성을 설정하여 부모 디스크와의 관계를 명시해야 합니다. CSUPLOAD 도구를 한 번 더 실행하는데 이번에는 다음과 같이 명령어를 입력합니다.

csupload Set-Parent -Connection "SubscriptionId=<YOUR-SUBSCRIPTION-ID>; CertificateThumbprint=<YOUR-CERTIFICATE-THUMBPRINT>; ServiceManagementEndpoint=https://management.core.windows.net/" -Child <YOUR-DIFF-VHD-NAME> -Parent <YOUR-PARENT-VHD-NAME>

  • <YOUR-SUBSCRIPTION-ID>: 이전에 획득한 Subscription ID 값을 이곳에 붙여넣습니다.
  • <YOUR-CERTIFICATE-THUMBPRINT>: 이전에 획득한 손도장 값을 이곳에 붙여넣습니다. 단, 이 때 형식은 연속된 형태의 띄어쓰기없는 16진수 값이어야 합니다.
  • <YOUR-VHD-DIFF-VHD-NAME>: 업로드한 차이점 보관 디스크의 서버 상의 이름을 지정합니다.
  • <YOUR-PARENT-VHD-NAME>: 업로드한 원본 디스크의 서버 상의 이름을 지정합니다.

이렇게 완성된 명령어를 클립보드에 복사하여 명령 프롬프트 창에서 오른쪽 버튼을 클릭한 후 붙여넣기 항목을 클릭하면 간편하게 명령어를 콘솔에 입력할 수 있습니다. 아래는 명령어의 사용 예시입니다.

csupload Set-Parent -Connection " SubscriptionId=417bb132-f6f0-e9a8-8e2d-a07bcd2ae122; CertificateThumbprint=93b1a5bf0764c0f4bc68b393b3811a7903d5bbd5; ServiceManagementEndpoint=https://management.core.windows.net/" -Child diffimage.vhd -Parent baseimage.vhd

22. 이제 관리 포탈 사이트로 되돌아가서 관계 설정이 아래 그림과 같이 정확히 이루어졌는지 확인합니다. 정상적으로 완료되었다면 BASEIMAGE.VHD 파일 항목 아래에 우리가 이번 시간에 업로드한 DIFFIMAGE.VHD 파일이 속해 있는 형태로 표시될 것입니다.

23. 이제 환경 설정 파일을 업데이트하여 새 가상 하드 디스크로 실행 중인 인스턴스들이 고쳐질 수 있도록 해야 합니다. 이전 단계와는 달리 이 작업을 위하여 Visual Studio는 별도로 필요하지 않습니다. 업데이트하려는 VM Role을 아래 그림과 같이 선택하고 Configure 버튼을 클릭합니다.

24. Configure Deployment 창이 나타나면, Edit Current Configuration 라디오 버튼을 클릭하고, OSIMAGE XML 요소의 HREF 값을 이전 단계에서 올린 차이점 보관 디스크 파일의 이름으로 바꿉니다. 그리고 OK 버튼을 클릭하여 설정을 저장합니다.

25. 이제 아래와 같이 업데이트 진행 상황이 표시될 것입니다. Ready로 표시될 때 까지 기다립니다.

26. 이제 웹 서버에 새로운 이미지의 내용이 보이는지 확인하기 위하여 해당 웹 사이트 주소로 브라우저를 열어봅니다. 아래와 같이 이미지에 수정한 내용이 잘 보인다면 성공적으로 차이점 보관 디스크가 작동하고 있는 것입니다.

마무리하며

총 6번의 연재를 통하여 Platform Training Kit의 Virtual Machine Role에 관한 내용을 모두 살펴보았습니다. 이번 내용은 Windows Azure Cafe에도 같이 게시될 예정이며 단일 문서로 통합된 파일도 제공할 예정이므로 많은 관심 바랍니다. 향후 Virtual Machine Role에서 사용할 수 있는 OS는 Windows Server 2008과 2008 R2 64비트 버전 외에도 32비트 버전의 Windows Server 2008과 Windows Server 2003에서도 지원될 예정이라고하니 기대하셔도 좋을 것 같습니다. 이들 OS에 대한 Additional Software는 2011년중에 개발되어 배포될 예정임이 알려져 있습니다.

감사합니다. :-)

Windows Azure VM Role 미리보기 #5

Cloud 2011. 5. 9. 02:12 Posted by 알 수 없는 사용자

Web Role과 Worker Role, 그리고 지금 설명하는 VM Role 모두 이번 Windows Azure Update에서 원격 데스크톱 연결을 사용할 수 있도록 업데이트되었습니다. 원격 데스크톱을 사용할 수 있게 된 일 자체는 고무적이지만 한 가지 정확히 알고 넘어가야 할 것이 있는데, 우리가 흔히 알고 사용하는 개인용 PC에 대한 원격 제어, 관리 목적을 초월해서 사용하는 항상 사용 가능한 서버나 워크스테이션에서의 원격 제어 및 응용프로그램 호스팅과는 목적과 기능에 있어서 근본적으로 차이가 있다는 점입니다.

이전 Step에서 보았던 것처럼 원격 제어를 위한 계정은 하나만 생성할 수 있고 그 계정 역시 다른 추가 업데이트없이 계속 서비스를 구동한다면 가능한한 유효 기간을 짧게 설정하여 불필요한 노출 영역이 발생하지 않도록 하는 것이 좋다고 하였습니다. 즉, Fabric Agent를 통하여 Virtual Machine을 구동하면서 얘기치않게 발생한 문제를 수정하고 서비스를 정상화할 수 있도록 하거나, 갑자기 들이닥친 문제를 해결하기 위한 정도로만 사용할 수 있는 것이지 항상 사용할 수 있도록 열려있는 서비스는 아니라는 점입니다. 물론 더 이상적인 시나리오는, 이러한 원격 제어 서비스를 일절 사용하지 않더라도 여러분이 게시한 응용프로그램 전체가 완벽하게 작동하는 상태를 유지하는 것이 되겠습니다.

VM Role에 연결하는 방법은 비교적 단순합니다.

1. 접속하려는 인스턴스의 상태가 Ready로 표시된 상태에서만 사용이 가능합니다. 아래와 같이 Ready로 표시된 Instance를 클릭하고 상단의 Remote Access 리본 섹션에서 Connect 버튼을 클릭합니다.

2. RDP 스크립트 파일이 관리 API에 의하여 자동으로 작성되어 다운로드할 수 있도록 준비됩니다. 열기 버튼을 클릭합니다. (Internet Explorer 9의 경우 브라우저 창 하단의 메시지 패널에 있는 버튼을 조작하면 됩니다.)

3. 파일을 열려고 시도하면 아래와 같이 보안 경고 대화 상자가 나타날 수 있습니다. 허용하도록 선택합니다.

4. 의도하지 않은 동작을 포함하여 보안 상의 위험을 초래할 수도 있다는 경고 메시지 박스가 원격 데스크톱 연결 프로그램에 의하여 표시됩니다. 원격 컴퓨터의 도메인 주소가 정확히 cloudapp.net을 가리키는지 확인하고, 연결 버튼을 클릭합니다. (유익한 정보 - cloudapp.net은 Windows Azure에서 실행되는 모든 Role들의 도메인 주소입니다.)

5. 원격 데스크톱에 연결하기 위하여 필요한 사용자 ID와 비밀 번호를 제공해야 하는데, 여기에서 지정하는 정보는 이전에 프로젝트를 게시할 때 원격 데스크톱 설정 대화 상자에서 지정했던 ID와 비밀 번호입니다. 정확히 입력하고 확인 버튼을 클릭합니다.

6. 연결 중임을 표시하는 진행률 표시기가 나타납니다. 잠시 기다립니다.

7. 인증서가 온전하게 서명된 것이 아니라는 것을 알리는 대화 상자가 나타납니다. 예 버튼을 클릭하여 계속 연결을 진행합니다.

8. 연결이 완료되면 아래 그림과 같이 VM Role의 Instance를 제어할 수 있도록 준비됩니다.

여러분의 응용프로그램 상태와는 관계없이 특정 VM에서는 처음 설치된 상태에서 나타나는 서버 환경 설정 마법사가 보일 수도 있고, 또 어떤 경우에는 평가판 라이선스임을 알리는 문구가 바탕화면에 등장할 수도 있지만 서비스에는 일말의 영향을 끼치지 않습니다. 시스템에 문제가 발생할 소지가 있는 경우 Fabric Controller는 여러분의 VM을 다시 재생 처리하여 시스템을 유지할 것입니다.

9. 만약, 연결을 하기 위하여 필요한 ID와 비밀 번호가 기억나지 않거나, 유효 기간이 다되었지만 다시 사용하기 위하여 계정 유효 기간을 연장해야 할 필요가 있다면 1단계 화면으로 돌아가서 해당 Instance를 클릭한 후 Enabled 체크 상자 아래의 User Access 버튼을 클릭합니다.

10. 아래와 같이 대화 상자가 나타나면 사용자 ID와 비밀 번호, 유효 기간을 다시 지정합니다.

다음 시간에는

다음 시간에는 VM Role 제작에 사용된 하드 디스크 이미지 파일을 업데이트하는 방법을 단계별로 실습해보는 내용을 게시하도록 하겠습니다. 같이 읽어보셨으면 하는 글로, 제 블로그의 [Software Development/Windows Azure] - Windows Azure VM의 파일 시스템 구조 글을 추천합니다. 감사합니다.

Windows Azure VM Role 미리보기 #4

Cloud 2011. 5. 9. 02:11 Posted by 알 수 없는 사용자

이제 긴 과정이 끝났고, 여러분이 작성한 Virtual Machine Role이 Windows Azure에서 잘 실행되는지 확인할 수 있도록 Visual Studio를 이용하여 서비스 모델을 만들 차례입니다. Amazone Elastic Cloud Computing 서비스와 가장 큰 차이는 바로 이 부분입니다.

Amazone Elastic Cloud Computing은 Amazon Machine Image (AMI)를 관리 도구 상에서 생성하도록 가이드를 하지만, Windows Azure Platform에서는 Visual Studio를 이용하는 것이 Standard입니다. 단지 VM Role만을 게시하기 위하여 사용할 수도 있지만 좀 더 정확히 표현하면 개발자들이 개발한 Cloud Application과 상호작용하도록 VM Role을 만드는 것이 Virtual Machine Role 본연의 역할이라고 할 수 있겠습니다.

Step 3에서 설명했던 Visual Studio 프로젝트 생성 과정에서 만든 클라우드 프로젝트를 열어놓고 진행하겠습니다.

1. 아래 그림과 같이 솔루션 탐색기에서 지구본 모양의 아이콘이 그려진 프로젝트 항목 아래의 역할 폴더 (Roles 폴더)를 오른쪽 버튼으로 클릭하면 팝업 메뉴에 New Virtual Machine Role 메뉴가 나타납니다. 이 항목을 클릭합니다.

(주의 사항) VM Role은 이 글을 작성하는 현 시점에서 베타 프로그램입니다. Visual Studio Tools for Windows Azure에서 위 기능을 활성화시키는 것에 관련한 지침이 베타 프로그램에 참여하는 경우 별도로 안내되므로 반드시 VM Role 베타 프로그램을 Windows Azure Portal (http://windows.azure.com)에서 신청해 주십시오.

2. 새 VM Role 생성을 위한 창이 아래 그림과 같이 나타납니다. Virtual Hard Disk 탭이 선택된 상태에서 지난번 Step 3에서 만든 사용자 계정 정보를 사용하여 게시한 하드 디스크 이미지 정보를 확인합니다. 정상적으로 작업을 수행했다면 아래와 같이 하드 디스크 이미지 파일의 목록이 나타날 것입니다.

3. 지난번 Step 2에서 진행했던 것 처럼, 우리는 가상 하드 디스크 이미지 내에 설치된 Windows 운영 체제에서 IIS를 사용하여 간단한 웹 사이트를 호스팅하기로 하였으므로, 80번 TCP 포트를 열도록 끝점을 구성해야 합니다. Endpoints 탭을 클릭하고, Add Endpoint 버튼을 클릭한 후, 아래 그림과 같이 항목을 입력하여 설정을 추가합니다.

4. 이제 VM Role을 출판할 차례입니다. 솔루션 탐색기로 다시 이동하여 이번에는 클라우드 프로젝트 항목을 오른쪽 버튼으로 클릭하여 게시 메뉴를 클릭합니다. 그러면 아래와 같이 클라우드 프로젝트 게시 대화 상자가 나타나게 됩니다. 여기서 Configure Remote Desktop connections 링크를 클릭합니다.

5. 아래 그림에서 Enable connections for all roles 항목을 클릭합니다. 그리고 첫 번째 콤보 박스를 클릭하여 나타나는 목록들 중에서 새 인증서 생성을 위한 항목을 클릭하여 원격 데스크톱 인증에서 사용할 새로운 인증서를 만듭니다.

6. 아래와 같이 인증서를 구분할 수 있는 별칭을 입력합니다.

7. 이제 원격 제어를 위하여 생성할 관리자 계정의 ID와 비밀 번호, 그리고 유효 기간을 지정할 차례입니다. 표준 Windows System에서 제안하는 관리자 계정 이름인 Administrator와 같이 잘 알려진 이름보다는 고유의 이름을 사용하는 것이 좋습니다. 그리고 비밀 번호 역시 일정 수준 이상의 난이도를 만족해야 합니다. 기간은 가능하면 짧게 설정하여 노출 영역이 최대한 덜 발생하도록 만드는 것이 좋습니다.

8. (매우 중요) 창을 닫기 전에, 해당 인증서 선택란 옆의 View 버튼을 클릭한 후, 인증서 대화 상자에서 자세히 탭을 클릭하고 파일로 복사 버튼을 클릭합니다. 인증서 내보내기 마법사가 나타나면, 개인 키를 포함하여 내보내도록 정확히 옵션을 선택하고 찾기 쉬운 위치에 개인 키를 포함하여 인증서 사본을 저장합니다. 이 때 내보내는 인증서를 나중에 Windows Azure Portal의 Remote Desktop 섹션에 등록해야 하므로 잘 보관합니다.

9. 인증서를 처음 등록하는 것이므로 자동 등록대신 패키지 파일만 만들어 수동으로 등록하는 것으로 가정하겠습니다. 아래 그림과 같이 Create Service Package Only 라디오 버튼을 클릭하고 확인 버튼을 클릭합니다.

10. (매우 중요) 잠시 기다리면 폴더 창 하나가 나타나는데, 전체 경로를 잘 보관해 놓습니다.

11. 이제 Windows Azure Portal (http://windows.azure.com)으로 이동하여 로그인한 후 아래 그림과 같이 New Hosted Service 리본 버튼 항목을 클릭합니다.

12. Create a new Hosted Service 대화 상자가 나타나면 아래 그림과 같이 필요한 항목들을 입력합니다. Affinity Group이나 Region에 관한 설정은 기본 설정을 사용하여도 무방하며, Do not deploy 라디오 버튼을 우선 체크합니다. 원격 데스크톱을 위한 인증서 등록이 우선 이루어져야 하기 때문입니다.

13. 아래 그림과 같이, Hosted Services 항목을 선택하여 나타나는 리스트 뷰에서 서비스 항목 아래의 Certificates 폴더를 클릭하면 리본 메뉴가 아래 그림처럼 바뀝니다. 여기서 Add Certificate 버튼을 클릭합니다.

14. 개인 키를 포함한 인증서를 이제 업로드할 차례입니다. 인증서 내보내기 마법사를 통하여 만든 개인 인증서 파일의 경로를 지정하고, 인증서 비밀 번호를 입력한 후 Create 버튼을 클릭합니다.

15. 이제 패키지 파일을 배포할 수 있게 모든 준비가 끝이 났습니다. Certificates 항목 위의 Hosted Service 항목을 아래 그림처럼 선택한 후, 상단 리본 메뉴에서 New Production Deployment 버튼을 클릭합니다.

16. 나중에 배포 단위를 확인할 수 있도록 알아보기 쉬운 Deployment Name을 지정하고, CSPKG 파일과 CSCFG 파일의 경로를 지정합니다. 이 2개의 파일은 10단계에서 나타난 폴더 창의 전체 경로로 이동하면 찾을 수 있습니다. Deployment Name에 한국어를 사용해도 됩니다.

17. 작업이 시작되면 아래와 같이 진행 상태가 표시됩니다.

18. 부팅까지 모두 완료된다면 아래 그림과 같이 상태가 나타납니다.

19. 만들어진 Virtual Machine Role이 정확히 동작하는지 확인하기 위하여 Deployment 항목을 클릭하면 나타나는 우측의 Properties 패널 상의 DNS name을 확인하고 해당 주소를 브라우저에 넣어봅니다.

20. 아래와 같이 IIS 7 환영 웹 페이지가 나타나면 여러분은 Windows Azure 환경에 성공적으로 여러분만의 가상 서버를 발행한 것입니다. 이제 사용량 추세에 따라서 여러분이 만든 가상 하드 디스크를 기반으로 인스턴스가 늘어나거나 줄어들게 될 것입니다.

다음 시간에는

다음 시간에는 VM Role을 원격에서 제어하고 관리하는 방법을 소개하겠습니다. VM Role은 보편적으로 Windows Server를 관리하기 위하여 널리 사용하는 Remote Desktop을 지원하고, 부수적으로는 PowerShell CMDLET을 이용하여 관리할 수도 있습니다.

Windows Azure VM Role 미리보기 #3

Cloud 2011. 5. 9. 02:10 Posted by 알 수 없는 사용자

이제 VHD 파일을 Windows Azure 환경에 등록하는 작업을 수행할 차례입니다. Amazon Web Service와 Windows Azure에서 가장 차이가 나는 부분은 바로 이 부분입니다. Amazon Web Service에서는 관리 도구 수준에서 직접 서버 인스턴스를 생성하고 관리하는 것을 기준으로 하였지만, Windows Azure 환경에서는 PaaS의 특성을 잃어버리지 않기 위하여 모든 것을 Application에 Tie-up하여 관리하는 것을 기준으로 합니다.

아직까지 VM Role을 생성하기 위해서는 Visual Studio Tools for Windows Azure와 함께 Visual Studio 2010을 이용하는 것이 필수적입니다. 그러나 조만간, 이러한 VM Role만을 전문적으로 생성하고 관리할 수 있는, Visual Studio 외의 별도 도구가 만들어질 것도 기대해 볼 수 있을 것입니다. 사실 Visual Studio는 기본적인 인터페이스를 제공하기 위한 수단으로 실질적으로 VM Role의 생성에 관여하는 모든 사항들은 Windows Azure SDK 안에 이미 포함되어있습니다.

Windows Azure에 VHD 파일을 등록하기 위해서는 Management API에 접근할 수 있어야 하는데, 이 때 Public Key를 포함하는 인증서가 해당 Subscription 계정 내에 미리 등록되어있어야 합니다.

처음 인증서를 등록한다고 가정하고, Step 4에서 사용할 Visual Studio 프로젝트를 미리 생성하는 작업을 수행하는 것으로 설명을 시작하겠습니다.

1. 시작 - 모든 프로그램 - Microsoft Visual Studio 2010 그룹에서 Microsoft Visual Studio 2010을 선택합니다.

2. 잠시 기다리면 Visual Studio 2010 초기 화면이 나타납니다. 여기서 새 프로젝트 링크를 클릭하거나, 파일 - 새 프로젝트를 선택합니다. 새 프로젝트 대화 상자가 나타나면 좌측의 항목들 중에서 Visual Basic - 또는 - Visual C# 항목 아래의 클라우드 항목을 클릭합니다.

이 때 다음 화면과 같이 나타나는지 확인합니다. Windows Azure Project를 선택하고, Name에 여러분이 원하는 프로젝트 이름을 띄어쓰기 없이, Camel Case 표기법을 준수하여 이름을 정합니다. 예를 들어, 작명하려는 이름이 "My Windows Azure VM Role"이라고 한다면 "MyWindowsAzureVMRole"과 같이 정의할 수 있습니다. 이름을 정하고 확인 버튼을 클릭합니다.

3. 아래 나타나는 것과 같이 포함할 하위 프로젝트를 정하는 대화 상자가 나타나면 따로 프로젝트를 추가하지 말고 확인 버튼을 클릭합니다.

(중요) 만약 위와 같은 대화 상자 대신 아래 나타나는 것 처럼 안내 웹 페이지가 나타난다면 Windows Azure Tools for Visual Studio가 정확히 설치된 것이 아니므로 Visual Studio를 종료하고 다시 Windows Azure Tools의 설치를 시작해야 합니다.

4. 솔루션 탐색기에서 파란색 지구본 모양의 아이콘이 그려진 항목을 오른쪽 버튼으로 클릭하고 "게시" 메뉴를 클릭하면 아래와 같이 대화 상자가 나타납니다. 여기서 Deploy your Windows Azure Project to Windows Azure 라디오 버튼을 클릭하고, Credentials 콤보 상자를 클릭한 후, 나타나는 목록에서 <Add...> 항목을 클릭합니다.

5. 그 다음 인증서 관리 대화 상자가 아래와 같이 나타납니다. Create or select an existing certificate for authentication 콤보 상자를 클릭하면 현재 시스템에 현재 로그인 한 사용자 계정 명의로 등록된 개인용 인증서들이 열거됩니다. 등록된 개인용 인증서가 없는 경우, <Create...> 항목을 클릭합니다.

6. 인증서를 새로 만들어야 하는 경우 인증서의 이름을 아래 대화 상자에서처럼 새로 지정합니다.

7. 등록하려는 인증서 - 또는 - 새로 만든 인증서를 선택하고, View 버튼을 클릭합니다. 그러면 아래와 같이 대화 상자가 새로 나타납니다. 여기서 자세히 탭을 클릭합니다. 그리고 손도장 항목의 값을 아래에서 복사합니다.

(중요) 이 단계에서 복사한 손도장 값은 CSUPLOAD 도구에서 꼭 필요한 값이므로 별도로 메모해 놓습니다. 나중에 CSUPLOAD 도구에 손도장 값을 지정할 때에는 두 자리씩 끊어져있는 표기가 아닌 연속된 표기로 제공해야 합니다. 값을 확인하였으면 확인 버튼을 눌러 대화 상자를 닫습니다.

원본: 93 b1 a5 bf 07 64 c0 f4 bc 68 b3 93 b3 81 1a 79 03 d5 bb d5
실제: 93b1a5bf0764c0f4bc68b393b3811a7903d5bbd5

8. Copy the full path 링크를 아래 그림에서 클릭합니다.

9. 아래 그림과 같이 대화 상자가 나타나는지 확인합니다.

10. 이제 Windows Azure Portal에 가서 직접 공개 키 기반의 인증서를 등록할 수 있도록 클립 보드에 임시 인증서의 전체 경로가 복사되었습니다. 대화 상자에서 Windows Azure Portal 링크를 클릭하거나 http://windows.azure.com/ 으로 이동하여 서비스 포털에 로그인합니다.

(중요) 이 작업이 수행되는 동안 디스크 정리 - 또는 - 시스템 최적화 유틸리티가 구동되지 않도록 유의합니다. 임시 경로에 업로드할 파일이 만들어졌기 때문에 이러한 유틸리티들이 해당 파일을 사용자의 동의 없이 임의로 삭제하는 일이 있을 수 있습니다.

11. Windows Azure 관리 콘솔 웹 사이트에 접속하여, 좌측 하단의 항목들 중 "Hosted Services, Storage Accounts & CDN"을 클릭하고, 메뉴 모음 바로 위의 트리 뷰 (화면 좌측)에서 Management Certificates 폴더를 클릭한 후, 상단 리본 메뉴에서 Add Certificate 버튼을 클릭합니다.

12. Choose a Subscription에 VM Role을 개설하려는 정확한 Subscription이 선택되었는지 확인하고, Browse 버튼을 클릭하여 방금 9단계에서 복사한 파일의 경로를 붙여넣습니다. 작업이 끝나면 Done 버튼을 클릭하여 공개키를 포함한 인증서를 업로드합니다.

13. 새로 업로드한 인증서 항목을 클릭하면 우측의 Properties 패널에 열거되는 항목들 중에서 Subscription ID 속성을 찾을 수 있습니다. 이 값 전체를 복사합니다.

(중요) 이 값은 CSUPLOAD 도구에서도 사용되므로 별도로 잘 메모해두는 것이 필요합니다.

14. 다시 Windows Azure Project Management Authentication 대화 상자로 이동하여 Copy the subscription ID for your account from the Windows Azure Portal 항목 아래의 텍스트 상자에 Subscription ID 값을 붙여넣습니다.

15. 알아보기 쉽도록 Name these credentials 항목 바로 아래에 별칭을 하나 지정하고 OK 버튼을 클릭하여 새 접속 정보를 등록합니다.

16. Close - Cancel 버튼 순으로 클릭하여 게시 과정을 취소합니다. 지금 등록한 인증서는 나중에 다시 사용할 수 있으므로 걱정하지 않아도 됩니다.

17. 호스트 컴퓨터에 Windows Azure SDK가 설치되어있는 것을 확인합니다. 그 다음 시작 - 모든 프로그램 - Windows Azure SDK v1.3 그룹의 Windows Azure SDK Command Prompt 항목을 클릭하여 명령 프롬프트를 엽니다.

18. 아래와 같은 형태로 명령어를 입력합니다. 굵게 표시하고 밑줄로 강조한 항목들은 각각 치환되어야 하는 값으로 설명을 참조합니다. 편하게 명령어를 입력할 수 있도록 메모장에 아래의 명령어를 복사해놓고 해당되는 값으로 문자열을 치환하여 명령어를 완성합니다.

csupload Add-VMImage -Connection "SubscriptionId=<YOUR-SUBSCRIPTION-ID>; CertificateThumbprint=<YOUR-CERTIFICATE-THUMBPRINT>; ServiceManagementEndpoint=https://management.core.windows.net/" -Description "<YOUR-VHD-DESCRIPTION>" -LiteralPath "<PATH-TO-VHD-FILE>" -Name <FILE-NAME-OF-VHD>

  • <YOUR-SUBSCRIPTION-ID>: 12단계에서 획득한 Subscription ID 값을 이곳에 붙여넣습니다.
  • <YOUR-CERTIFICATE-THUMBPRINT>: 7단계에서 획득한 손도장 값을 이곳에 붙여넣습니다. 단, 이 때 형식은 연속된 형태의 띄어쓰기없는 16진수 값이어야 합니다.
  • <YOUR-VHD-DESCRIPTION>: 업로드한 VHD 파일을 나중에 Portal Site에서 찾아볼 때 식별할 수 있는 설명 문자열을 이곳에 지정합니다.
  • <PATH-TO-VHD-FILE>: 업로드할 VHD 파일의 경로를 지정합니다. 이 값은 첫 강좌의 6단계에서 마법사를 통하여 VHD 파일을 생성할 당시의 경로입니다.
  • <FILE-NAME-OF-VHD>: 업로드하고 난 이후 Portal Site에서 사용할 VHD 파일의 이름을 지정합니다. 영어로 짧게 지정하는 것이 필요하고 확장자 VHD를 정확히 붙여주는 것이 필요합니다.

이렇게 완성된 명령어를 클립보드에 복사하여 명령 프롬프트 창에서 오른쪽 버튼을 클릭한 후 붙여넣기 항목을 클릭하면 간편하게 명령어를 콘솔에 입력할 수 있습니다. 아래는 명령어의 사용 예시입니다.

csupload Add-VMImage -Connection "SubscriptionId=417bb132-f6f0-e9a8-8e2d-a07bcd2ae122; CertificateThumbprint=93b1a5bf0764c0f4bc68b393b3811a7903d5bbd5; ServiceManagementEndpoint=https://management.core.windows.net/" -Description "Base image Windows Server 2008 R2" -LiteralPath "C:\VHD\baseimage.vhd" -Name baseimage.vhd

19. 명령어를 실행하려고 하면 아래와 같이 나타납니다. VHD 파일을 직접 만들지 않고 외부에서 다운로드한 경우 악성 코드 등이 포함되어있을 가능성이 있으므로 주의를 바란다는 내용이므로 염두에 둡니다. VHD 파일이 시스템에 마운트될 경우 자동 실행 등에 의하여 악성 코드가 의도하지않게 실행될 가능성이 있기 때문입니다.

20. 검사 과정이 아래와 같이 진행되는 것을 확인합니다.

21. 업로드 중이면 아래와 같이 업로드 진행률이 표시됩니다.

22. 업로드 중인 항목이 있을 때 Portal 사이트 (http://windows.azure.com) 에 방문하면 아래 그림과 같이 Pending 이라는 상태가 나타납니다.

23. 모든 과정이 끝나면 다음과 같이 작업 결과가 콘솔에 나타납니다. exit 명령을 사용하거나 콘솔 창을 닫아도 무방합니다.

24. Windows Azure Portal (http://windows.azure.com)에서도 결과를 확인할 수 있습니다. 아래와 같이 Commited 라고 상태가 나타나면 정상적으로 처리된 것입니다.

다음 시간에는

다음 시간에는 오늘 업로드한 VHD 파일을 이용하여 실제로 Windows Azure에 VM Role을 게시할 수 있는지 그 과정을 살펴보도록 하겠습니다. 다음 시간의 내용을 실습하기 위하여 Visual Studio 2010이 필요합니다. Visual Studio 2010에 관한 제품 정보는 http://msdn.microsoft.com/vstudio 에서 확인 가능하며 트라이얼 버전을 다운로드받을 수 있습니다.

감사합니다.

Windows Azure VM Role 미리보기 #2

Cloud 2011. 5. 9. 02:09 Posted by 알 수 없는 사용자

지난 시간에 이어서 오늘은 Windows Azure에서 사용할 수 있는 VM Role을 구성하기 위하여 어떤 작업을 해야 하는지 실제 VM Role 구성 방법을 살펴보는 글을 올립니다.

Virtual Machine 안에 정상적으로 Windows Server 2008 R2를 설치했다면, 이제부터는 VM Role로 변환하기 위하여 필요한 여러가지 설정을 적용하고, 추가 구성 요소를 설치할 차례입니다. 그리고 당연한 이야기이지만 Windows Update - 또는 - Microsoft Update를 통하여 필요한 모든 업그레이드와 보안 패치, 핫 픽스 등을 실제 배포전까지 가능한한 모두 포함하는 것이 바람직합니다.

1. VM Role로 배포하기 위하여 만든 가상 서버 인스턴스에 관리자로 로그인하여 바탕화면이 나타날 때 까지 기다립니다.

2. 시작 - 모든 프로그램 - 관리 도구 - 서버 관리자 순으로 항목을 클릭하면 아래 그림과 같이 콘솔 화면이 나타날 것입니다. 콘솔 화면 좌측의 트리 뷰에서 역할 항목을 선택하면 역할 구성 내역 보고서가 전면에 나타납니다. 이 화면에서 역할 추가 링크를 클릭하여 마법사를 시작하고, 첫 소개 화면에서 다음 버튼을 클릭합니다.

3. 서버 역할 선택 단계에서 여러분이 원하는 기능을 구성할 수 있습니다. 여기서는 웹 서버 역할만을 사용하도록, 웹 서버 (IIS) 앞의 확인 상자에 체크하고 다음 버튼을 클릭하겠습니다.

4. 웹 서버 역할을 위하여 필요한 준비 사항과 관련 정보를 설명하는 페이지가 나타납니다. 다음 버튼을 클릭합니다.

5. 역할 서비스 선택 대화 상자에서 필요한 구성 요소들을 선택합니다. 기본 기능만을 테스트해볼 것이므로 다른 추가 설정 없이 다음 버튼을 클릭합니다.

6. 이제 이 가상 서버에 웹 서버 역할을 추가할 준비가 다되었음을 확인하는 페이지가 나타납니다. 웹 서버 역할이 포함되어있는지 다시 한 번 확인하고, 설치 버튼을 클릭합니다.

7. 설치가 마무리되면 아래와 같이 완료 보고서가 나타납니다. 마침을 눌러 마법사를 종료합니다.

8. 서버의 역할을 정의하였고, Windows Azure와 상호작용하거나 전형적인 .NET 기반 응용프로그램을 원활하게 호스팅할 수 있게하기 위하여 서버의 기능을 추가해야 합니다. 서버 관리 콘솔의 좌측 트리뷰에 있는 항목들 중 기능 항목을 선택하면 기능 구성 상태 보고서가 나타납니다. 여기서 기능 추가 링크를 클릭하고, 첫 소개 화면에서 다음 버튼을 클릭합니다.

9. (중요한 작업 1) 아래 기능 선택 대화 상자에서, .NET Framework 3.5.1 항목 앞의 체크 상자를 클릭합니다. .NET Framework는 잠시 뒤에 설치할 Windows Azure Integration Component를 위하여 필수적인 기능입니다.

10. 이제 설치할 구성 요소들을 확인하고 설치 버튼을 누릅니다.

11. 설치가 모두 마무리되면 설치 완료 보고서가 아래와 같이 나타납니다. 마침 버튼을 클릭하여 마법사를 완료합니다.

12. (중요한 작업 2) 독립적인 서버 운영 환경과는 달리 윈도 애저 환경에서 서버는 패브릭 관리자의 지시에 맞추어 동작해야 합니다. Windows Update와 Microsoft Update에서 제공하는 자동 업데이트 기능은 시스템의 안정성과 최상의 보안 상태 유지를 위하여 기본적으로 켜져있지만 이러한 규칙을 준수하기 위하여 해당 서비스를 자동으로 실행되지 않도록 수정해야 합니다.

Windows Update - 또는 - Microsoft Update가 자동으로 시스템을 업데이트하지 않도록 하기 위하여 제어판의 Windows Update 아이콘을 더블 클릭합니다. 그러면 아래와 같이 화면이 나타나게 됩니다. 좌측의 링크 모음들 중에서 설정 변경 항목을 클릭합니다.

13. 아래와 같이 화면이 나타나면, 자동으로 업데이트하지 않는 것으로 설정을 변경하고 확인 버튼을 클릭합니다.

14. 이제 시스템은 자동으로 업데이트를 찾거나 자동으로 업데이트를 설치하지 않습니다. 업데이트 확인 링크를 클릭하여 필요한 모든 업데이트의 설치를 계속 진행합니다. 업데이트를 설치하는 과정에서 시스템이 다시 시작될 수 있습니다.

(중요한 작업 3) 여기서 중요한 것은, 시스템을 다시 시작하거나 한 번의 업데이트가 끝난 후 작업을 마치지 마시고, 다시 Windows Update 프로그램에 들어와서, 더 이상 중요한 업데이트가 검색되지 않을 때 까지 설치를 끝내야 합니다.

15. 이제 Windows Azure Integration Component를 설치할 차례입니다. Integration Component는 다른 Virtual Machine Addition과 마찬가지로 ISO 파일로 제공됩니다. 해당 ISO 파일은 Windows Azure SDK 버전 1.3과 함께 배포되며, SDK를 설치한 컴퓨터의 %PROGRAMFILES%Windows Azure SDK\v1.3\iso 디렉터리 아래의 WAVMROLEIC.ISO 파일을 아래 그림에서 소개하는 기능을 이용하여 가상 드라이브에 마운트하여 설치를 진행할 수 있습니다.

16. 게스트 컴퓨터에서 자동 실행 대화 상자가 아래와 같이 나타납니다. 폴더 열기 링크를 선택하면 다음과 같이 파일 목록이 나타납니다. WaIntegrationComponents-x64.msi 파일을 더블 클릭하여 실행합니다.

17. 잠시 후 설치 마법사가 나타납니다. 다음 버튼을 클릭합니다.

18. Integration Component가 시스템을 정확히 제어할 수 있도록 하기 위하여 관리자 계정의 암호를 지정해야 합니다. 암호를 입력한 후 다음 버튼을 클릭합니다.

19. 이제 Integraton Component를 설치할 수 있습니다. 아래 화면에서 설치 버튼을 클릭하여 설치를 계속 진행합니다.

20. 설치 과정 중간에 다음과 같은 하드웨어 장치 설치의 허용 여부를 묻는 대화 상자가 나타날 수 있습니다. 허용하도록 합니다. 이 장치는 Windows Azure Drive의 기능을 위하여 꼭 필요한 구성 요소입니다.

21. 아래와 같이 설치가 진행될 것입니다. 설치는 시스템 수준과 상황에 따라 시간에 차이가 있을 수 있지만 보통 30초 이내에 설치가 완료됩니다.

22. 정상적으로 설치가 완료되면 아래와 같이 완료 안내 페이지가 나타납니다. 마침 버튼을 클릭하여 설치 마법사를 종료합니다.

23. 시스템을 다시 시작해야 함을 안내하는 대화 상자가 나타납니다. 예 버튼을 클릭하여 시스템을 다시 시작합니다.

24. 이제 여러분이 원하는 소프트웨어나 필요한 서비스를 추가적으로 더 설치하고 올바르게 작동하는지 점검합니다. 모든 커스터마이징이 끝나면, 25단계로 이동합니다.

25. (중요 작업 4) 시작 메뉴의 "프로그램 및 파일 검색" 입력 상자 - 또는 - Windows 키 + R키를 눌러 실행 프롬프트 창을 열어 다음과 같이 명령어를 입력합니다. 이 프로그램은 현재 실행 중인 Windows 운영 체제에서 시스템에 관련된 기본 정보들을 제거하고 다른 컴퓨터로 이식할 수 있도록 돕는 시스템 유틸리티입니다.

%WINDIR%\SYSTEM32\SYSPREP\SYSPREP.EXE

26. 아래와 같이 대화 상자가 나타나면 일반화 체크 상자를 클릭하여 선택하고, 시스템을 종료하도록 옵션을 설정합니다. 그 다음 확인 버튼을 클릭합니다.

27. 잠시 후 Virtual Machine이 완전히 Shutdown되고 이제 가상 하드 디스크를 Windows Azure Platform으로 가상 하드 디스크 파일을 업로드할 준비가 끝나게 됩니다.

다음 시간에는

오늘 주제에 이어서 다음 시간에는 VM Role을 실제로 게시하는 방법에 대하여 살펴보도록 하겠습니다. VM Role은 이후에도 살펴볼 예정이지만 하드 디스크 이미지를 제작하는 과정과 함께 실제 서비스 모델은 별도로 Publish해야 한다는 점을 기억해둘 필요가 있습니다.

감사합니다.

Windows Azure VM Role 미리보기 #1

Cloud 2011. 5. 9. 02:08 Posted by 알 수 없는 사용자

시작하기

Windows Azure Virtual Machine Role (이하 VM Role)은 그 동안 많은 개발자들과 IT Pro들에게 관심사였던 최신 기능으로, 2010년 12월부터 본격적인 Beta 서비스가 제공되기 시작하였습니다. VM Role은 Amazon Elastic Cloud Computing (EC2)에서 제공되어오던 Virtual Machine 기반 클라우드의 장점을 Platform as a Service 버전으로 재 해석하여 통합한 Windows Azure 만의 고유한 기능입니다.

이번 Article은 2010년 11월 버전의 Platform Training Kit에서 소개하는 VM Role Deploy 방법을 한글로 자세히 풀이하기 위한 목적으로 작성된 것으로, VM Role에 대하여 구체적으로 학습해볼 수 있는 계기를 마련해보기 위하여 올립니다. 스크린 샷과 자료의 기본 출처는 Platform Training Kit으로 부터 발췌해온 것임을 미리 밝혀둡니다.

라이선스 문제

여러가지 이슈가 있겠지만 무엇보다도 초미의 관심사는 바로 라이선스에 관한 부분일 것입니다. VM Role은 Windows Azure에 맞추어진 OS가 아닌 기존의 On-Premise의 OS를 호스팅하는 것이기 때문에 특히 민감할 수 밖에 없는데요, 의외로 라이선스 문제는 생각하는 것 만큼 복잡하고 어렵지 않습니다. Physical to Virtual (이하 P2V)를 수행하기 위하여 사용했던 원본 OS의 라이선스 종류에 관계없이, Windows Azure에서 VM Role을 위하여 호스팅되는 OS의 라이선스는 Windows Azure의 라이선스 정책, 즉 유틸리티 컴퓨팅 기반의 사용량 과금에 의해서만 비용이 결정되며 여기에는 일체의 라이선스 비용이 포함되지 않습니다. 순수하게 사용량만을 고려하면 되는 것입니다.

그러나 Windows Azure에서 사용하는 VM Role 라이선스를 역으로 On-Premise로는 가져오실 수 없으며, 또한 VM Role 안에 설치되는 각각의 소프트웨어들에 대한 라이선스는 신중히 결정해야 합니다. 해당 소프트웨어에 대한 라이선스는 종전의 서버 호스팅과는 차이가 많이 날 수 있습니다. 대표적으로, 탄력적인 시스템 운영을 위하여 한 번에 2대 이상의 가상 서버 인스턴스가 구동될 수 있고 사용량이 늘어나면 당연히 Fabric Controller는 VM Image를 복제하여 여러 대의 가상 서버 인스턴스를 생성하게 된다는 점은 원래 소프트웨어를 구입하여 설치했던 조건과는 큰 차이가 날 수 밖에 없는 부분으로, 라이선스를 위반하지 않기 위해서는 해당 소프트웨어 제공 업체가 이러한 클라우드 컴퓨팅 환경에 알맞는 유틸리티 기반의 과금 모델을 제공하는지 충분히 검토해야 합니다.

SQL Server의 경우 가장 이상적인 것은 SQL Server를 포함하는 VM Role을 게시하는것 보다 SQL Azure로 데이터를 이관하는 것입니다. 그러나 법적인 문제나 보안 상의 이유로 인하여 데이터를 이관할 수 없는 경우, Windows Azure Connect (구 Codename: Sydney)를 통해 On-Premise에서 구동 중인 서버들과 Windows Azure Platform에서 실행 중인 Instance들 사이의 네트워크를 같은 레이어에 통합하는 방법을 사용하여 손쉽게 문제를 해결할 수 있습니다. SQL Server 뿐만 아니라 기존에 사용하던 Back-Office Server, Active Directory Domain Controller 등도 무리해서 Windows Azure Platform으로 이주하지 않더라도 이러한 방법으로 문제를 해결할 수 있습니다.

VM Role을 만들기 위하여 필요한 준비 사항

VM Role을 만들기 위해서는 다음의 준비 사항이 필요합니다.

VM Role 만들기 Step 1 - 게스트 운영 체제 설치하기

VM Role을 만드는 절차를 요약하면, 앞서 언급한 구성 요소에서 짐작하시게 되는 것과 같이 Hyper-V를 이용하여 Guest VM으로 Windows Server 2008 R2를 설치하고, 여기에 여러분이 원하는 커스터마이징을 적용한 이후에 이것을 VM Role 형식에 맞게 포장하여 Windows Azure에 Base Image로 등록하는 것입니다.

현재 베타 버전으로 제공되는 VM Role은 Windows Server 2008 R2를 위한 구성 요소만을 제공합니다. 이에 따라, Windows 7의 Virtual PC로는 64비트 전용 OS인 Windows Server 2008 R2를 실행할 수 없기 때문에 특별히 Windows Server 2008 R2의 Hyper-V가 필요합니다.

1. Windows Server 2008 Hyper-V 호스트 컴퓨터에서 관리자 계정으로 로그인한 후 시작 - 관리 도구 - Hyper-V 관리자를 클릭하여 실행하면 아래와 같은 Management Console이 나타납니다.

2. Hyper-V 관리자의 좌측 트리 뷰에서 서버 노드를 마우스 오른쪽 버튼으로 클릭해서 나타나는 메뉴의 "새로 만들기" - "가상 컴퓨터" 항목을 클릭합니다. 그 후 나타나는 마법사 대화 상자에서 "다음" 버튼을 클릭합니다.

3. 아래 화면에서 Virtual Machine의 이름을 지정합니다. 여기서는 VM Role이라고 이름을 지정하도록 하고, 정해진 기본 위치를 필요한 경우 변경하거나 설정된 경로를 확인합니다. 다음 버튼을 눌러 다음 단계로 이동하겠습니다.

4. 메모리의 크기를 설정하는 단계에서는 자동으로 추천하는 2GB (2048MB) 메모리를 그대로 사용합니다. 다음 버튼을 클릭합니다.

5. 네트워크 어댑터를 설정하는 단계입니다. 로컬 영역 연결 - 가상 네트워크 항목이 선택된 상태에서 다음 버튼을 클릭합니다. 이 설정은 처음 VM Role을 시작한 이후 Windows Update (혹은 Microsoft Update)에서 업데이트를 내려받기 위하여 필요한 구성입니다.

6. 이제 가상 디스크 구성 단계입니다. 새로운 가상 하드 디스크를 만들기 위하여 첫 번째 라디오 버튼을 클릭하고, 가상 하드 디스크 파일의 이름을 임의로 정한 뒤, 하드 디스크를 만들 위치와 크기를 정합니다. 아래 예제에서는 baseimage.vhd 라는 이름을 사용하고 있고 30GB 하드 디스크를 생성하려고 하고 있습니다.

(중요) 이 단계에서 지정하는 값은 나중에 CSUPLOAD 도구에서 필요하므로 잘 메모해둡니다. - 또는 - 나중에 Virtual Machine 속성에서 찾아볼 수도 있습니다.

참고로 가상 하드 디스크의 크기는 인스턴스 레벨에 맞추어 설정해야 합니다. Extra Small 인스턴스에 맞추기 위해서는 가상 하드 디스크의 크기를 20GB 이하로 설정해야 합니다. 만약 이미 만들어진 가상 하드 디스크 파일을 사용하려면 두 번째 라디오 버튼을 선택하고 VHD 파일의 경로를 찾아 보기 버튼을 이용하여 아래 그림과 같이 지정할 수 있습니다.

7. 이제 설치 옵션을 선택하는 차례입니다. 나중에 따로 지정하여도 되고, 마법사를 이용하여 기본으로 ISO 이미지 파일 - 또는 - DVD 드라이브에 마운트 하도록 아래 그림과 같이 지정할 수 있습니다. 만약 시험 목적으로 사용하기 위하여 VM Role을 만들고자 한다면 http://www.microsoft.com/windowsserver2008/en/us/trial-software.aspx 에서 트라이얼 버전의 Windows Server 2008 R2 Enterprise Edition을 다운로드받으실 수 있습니다.

8. 모든 과정이 거의 마무리되어갑니다. 마침 버튼을 클릭하여 새로운 Virtual Machine을 생성합니다.

9. Hyper-V 관리자로 돌아와서 방금 생성한 Virtual Machine 항목을 찾아, 오른쪽 버튼으로 클릭하고 나타나는 팝업 메뉴에서 연결 메뉴를 클릭합니다. 항목이 바로 나타나지 않을 수도 있으므로 이 경우 좌측의 트리 뷰에 나타나있는 서버 항목을 오른쪽 버튼으로 클릭하여 새로 고침 메뉴를 클릭하여 목록을 갱신할 수 있습니다.

10. 아래 그림과 같이 원격 제어 창이 나타나면 시작 버튼을 클릭하여 Virtual Machine을 재생시킵니다.

11. 설치 단계에서 미디어를 정확히 지정했다면 Windows Server 2008 R2 설치 마법사가 가상 PC 안에서 아래 화면과 같이 시작될 것입니다.

12. 잠시 뒤에 표시 언어, 시간대, 통화 기호, 키보드 레이아웃 설정을 할 수 있는 화면이 나타납니다. 적절한 선택을 한 후 다음 버튼을 클릭합니다.

13. 지금 설치 버튼을 클릭합니다.

14. Windows Server 2008 R2 Enterprise (전체 설치) 항목을 선택하는 것에 유의합니다. 서버 코어 설치를 비롯하여 다른 제품의 경우 기능 상에 문제가 발생하거나 라이선스 관계 상 문제가 될 수 있습니다.

15. 라이선스 조항에 동의함을 선택하고 다음 버튼을 클릭합니다.

16. 사용자 정의 (고급) 설치 항목을 선택합니다. 이 과정을 선택하는 이유에 대해서는 다음 단계에서 자세히 설명하겠습니다.

17. 대부분의 경우 설치 관리자의 자동 설정을 이용하면 문제가 없습니다. 그러나 VM Role을 위하여 필요한 작업이 한 가지 있습니다. VM Role에 호환되는 가상 하드 디스크 레이아웃을 만드려면 반드시 하나의 단일 파티션으로 구성해야 하는데, 기본 설치를 이용하면 이 규칙을 준수하지 않게 됩니다. 이를 피하기 위하여 사용자 정의 설치를 선택하였고 아래와 같은 화면이 나타나게 됩니다.

17. 이제 Shift + F10 키를 눌러 아래와 같이 명령 프롬프트 창을 시작합니다.

18. 명령 프롬프트 창이 나타나면 다음의 순서대로 명령어를 입력합니다.

DISKPART

SELECT DISK 0

CREATE PARTITION PRIMARY

EXIT

19. 명령 프롬프트 창이 닫힌 상태에서 새로 만들어진 파티션을 선택하여 Windows 운영 체제 설치를 진행하면 됩니다. 파티션이 보이지 않을 때에는 새로 고침을 선택하십시오.

20. 설치가 진행됩니다. 1~2회 이상 시스템이 다시 시작될 수 있습니다. 설치가 완전히 종료될 때 까지 중간에 DVD나 설치 미디어를 제거하는 일이 없도록 유의합니다.

21. 완전히 설치가 끝났다면 아래와 같이 관리자 비밀 번호를 지정해야 함을 경고하는 문구가 나타날 것입니다. 아래 화면에서 확인 버튼을 클릭합니다.

22. 암호 정책에 만족하는 강력한 암호를 확인을 위하여 두 번 입력하고 Enter 키를 누릅니다. 잠시 기다리면 바탕 화면이 나타날 것입니다.

마치면서

다음 시간에는 VM Role로 배포하기 위하여 필요한 게스트 운영 체제에서 필요한 설정을 적용하는 방법과 Windows Azure 환경으로 이미지를 출판하는 방법을 설명하는 내용을 상세히 설명하도록 하겠습니다. 감사합니다.

유효성 검사 – 이벤트 수신기 Custom Alert

SharePoint 2010 2011. 5. 6. 08:30 Posted by 알 수 없는 사용자


유효성 검사이벤트 수신기 Custom Alert

SharePoint 2010의 목록에서 유효성 검사에 대한 다양한 내용이 있는데 앞에서는 Custom Error Page Redirect 시켰지만 여기에서는 Custom Alert을 나타내도록 해보겠습니다. 대화상자로 열기가 아닌 경우에는 Custom Alert이 더 효과적일 수 있습니다. 실무에서 비슷한 요구사항이 있어 정리를 해봅니다.



이벤트 수신기를 생성하는 등의 내용은 동일하니 설명은 생략하겠습니다.

관련 내용은 아래 링크를 참조하십시오.

http://redju.tistory.com/48

이벤트 수신기에서 유효성 검사에 맞지 않을 경우(잘못된 입력일 경우)의 코드를 아래와 같이 수정합니다.

l HttpContext를 이용하는 방법


l properties.RedirectUrl를 이용하는 방법


위의 방법 둘 다 요청된 주소를 Get 방식으로 Custom Error 페이지로 전달해주고 있습니다.

CustomError 페이지에서는 Get 방식을 검사하여 eventError 인 경우 Alert으로 메시지를 나타내고 요청된 주소를 다시 보여주게 됩니다.

자 잘못된 입력일 경우 Custom Alert를 살펴보시죠~

확인 버튼을 누르면 원래 요청된 페이지로 이동합니다.

간단하게 유효성 검사의 일환으로 Custom Alert을 살펴보았습니다.

Windows Azure Application - Hello Azure (1)

Cloud 2011. 5. 3. 08:30 Posted by 알 수 없는 사용자

Windows Azure Application - Hello Azure (1)

Hello Azure 응용 프로그램을 만들고 Cloud로 배포하는 내용을 다루어보도록 하겠습니다.

ManManagement Portal이 업데이트 된지 오래인데 아직 배포까지 다루지 못해 여기서 Hello Azure를 배포해보도록 하겠습니다.

Visual Studio 2010을 통해 Windows Azure 프로젝트를 생성하고 Cloud로 배포해서 Cloud에서 응용 프로그램을 서비스 할 수 있습니다. 물론 C#을 이용해서 처리합니다. 또한 PHP 도 사용이 가능합니다.

아래에서 Visual Studio 2010을 통해 Windows Azure 프로젝트를 로컬에서 생성하고 디버깅하는 내용에 대한 부분을 알아보도록 하겠습니다.

먼저 VS 2010에서 파일 > 새로 만들기 > 프로젝트에서 Visual C#에서 Cloud 템플릿을 선택합니다.



새 프로젝트 창에서 Cloud를 선택하고 프로젝트 이름은 “HelloAzure” 으로 입력합니다.

Windows Azure 프로젝트에서 역할 영역에서 Visual C# ASP.ENT 웹 역할을 선택하고 “>” 를 클릭합니다. 오른쪽 영역의 역할의 편집을 클릭해서 이름을 “HelloAzure_WebRole” 로 입력하고 OK 를 클릭합니다.

VS 2010의 솔루션 탐색기의 구조를 살펴봅니다.

ServiceDefinion.csdef : Role, trust level, endpoint 등 메타데이터

ServiceConfiguration.cscfg: Instance , 구성값

자 그러면 Default.aspx의 디자인을 클릭하여 도구 상자로부터 Label 컨트롤을 드래그하고

속성에서 Font Size를 “30, Bold를 “True” 지정합니다.

디자인 영역을 오른쪽 클릭하여 코드보기를 클릭하여 Default.aspx.cs 로 이동합니다.

Page_Load 이벤트에서 아래와 같은 코드를 작성합니다.

protected void Page_Load(object sender, EventArgs e)

{

this.Label1.Text = "Hello Azure";

}

ServiceConfiguration.csfg 를 열어서 Instance 값을 2로 변경합니다.

<Role name="HelloAzure_WebRole">

<Instances count="2" />

<ConfigurationSettings>

<Setting name="DiagnosticsConnectionString" value="UseDevelopmentStorage=true" />

</ConfigurationSettings>

응용 프로그램을 디버깅을 시작하기 위해 디버그 메뉴에서 디버깅 시작을 클릭합니다.

Windows Azure Compute Emulator가 시작할 때까지 시간이 걸립니다. Cloud Service 프로젝트가 시작프로젝트로 되어 있어 실행하면 작업 표시줄의 메뉴에서 Windows Azure Compute Emulator (로컬의 Windows Azure App의 테스트, 개발환경 에뮬레이팅) 의 아이콘을 볼 수 있으며 아이콘을 오른쪽 클릭하여 Compute Emulator열기를 클릭하면 UI와 웹 페이지를 볼 수 있습니다.



Azure 응용 프로그램이라고 해서 디버깅을 못하는 것은 아닙니다. Visual Studio CS 파일에 중단점을 적용하고 웹 페이지를 새로 고침하면 중단점으로 디버깅이 위치하는 것을 알 수 있습니다.

잘 동작이 되므로 로컬에서 작업은 끝났습니다.



자 그럼 다음에서 서비스 패키지를 만들어서 Management Portal을 이용해서 Cloud로 배포해보도록 하겠습니다.

'Cloud' 카테고리의 다른 글

Windows Azure VM Role 미리보기 #2  (0) 2011.05.09
Windows Azure VM Role 미리보기 #1  (0) 2011.05.09
SQL Azure Sample Database 설치  (0) 2011.04.29
DataMarket (2) - 데이터 구독 및 탐색  (0) 2011.03.07
DataMarket (1) - 소개  (0) 2011.02.28

REST 서비스 템플릿

WCF 2011. 5. 2. 09:00 Posted by 알 수 없는 사용자

이번 포스트에선 REST 서비스를 만들 수 있는 간단한 방법~ REST 서비스 템플릿에 대해 얘기를 해볼까 합니다.
이 주제로 세미나(Your Smarter Visual Studio 2010)를 한번 했었는데, 그 때 시간이 짧아 많은 얘기를 전달하지 못한 것 같아 그 때 차마 하지 못했던 얘기들을 이번 포스팅에서 한번 주절거려 보겠습니다. 
세미나를 한 지가 꽤 오래됐는데 이제서야 포스팅을 하네요~ ^^;;;


그럼 시작합니다~ ^^

REST 서비스에 대한 자세한 설명은 과감하게 생략하도록 하겠습니다. 최근엔 REST에 대한 정보가 많아서 글 솜씨가 부족한 제가 굳이 설명하지 않아도 REST에 대해 알기 쉽게 설명한 글들을 큰 힘 들이지 않아도 찾을 수 있으실 겁니다 ㅎ

그래서, 이번 포스팅의 시작은 REST 서비스 템플릿을 다운받는 것부터 시작하겠습니다.

Visual Studio 프로젝트 템플릿을 다운 받는 방법은 크게 두 가지가 있습니다. 첫째는 Visual Studio를 통해서 다운 받는 것이고, 둘째는 직접 템플릿 다운 사이트(Visual Studio 갤러리 사이트)를 방문하여 다운 받는 것입니다.
두 방법 모두 절대 어렵지 않습니다. 여기선 Visual Studio를 사용하는 방법에 대해 알아보겠습니다.

우선,Visual Studio를 열고, 새 프로젝트를 만들기 위한 창을 띄웁니다. 그리고 좌측 메뉴에서 "온라인 템플릿"을 선택합니다. 그러면 잠깐 동안의 검색 이미지가 나타났다가, 아래 그림과 같은 화면이 나타나는데, 우측 리스트에 보면 "WCF REST Service Template 40(CS)" 아이템이 보입니다. 

 
이 아이템을 선택하고 프로젝트를 생성할 이름과 위치를 지정한 후에 확인 버튼을 클릭하면, 해당하는 템플릿을 다운받고, 바로 새로운 프로젝트를 생성해줍니다. 너무 쉽습니다~ 그죠? ㅎ 

REST 서비스 프로젝트가 생성되면 기본 파일들이 함께 생성되는데, 이 파일 중에 Service1.cs 파일이 실제 REST 서비스를 구현하기 위한 파일입니다. 이 파일을 보면 Service1 이라는 이름의 클래스 밑에 다음과 같은 메서드들이 정의되어 있는 것을 보실 수 있으실 겁니다. 

[WebGet(UriTemplate = "")]
public List<SampleItem> GetCollection() { … }

[WebInvoke(UriTemplate = "", Method = "POST")]
public SampleItem Create(SampleItem instance) { … }

[WebGet(UriTemplate = "{id}")]
public SampleItem Get(string id) {… }

[WebInvoke(UriTemplate = "{id}", Method = "PUT")]
public SampleItem Update(string id, SampleItem instance) { … } 

[WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
 
public void Delete(string id) { … }

 
REST 서비스에서 각 작업과의 상호 작용은 고유한 URI와 HTTP 표준 동사(GET, POST, PUT, DELETE) 를 통해 이루어 집니다. 기본적으로 만들어지는 위와 같은 메서드는 각 HTTP 표준 동사에 대한 메서드 특성 설정에 대한 예시를 보여줍니다.

WebGetAttribute 와 WebInvokeAttribute

WCF REST 서비스는 위와 같이 정의 된 메서드에 접근하기 위해 URI와 HTTP 동사를 메서드에 매핑해 주는데 이때 필요한 것이 WebGetAttribute 와 WebInvokeAttribute 입니다.

WebGetAttribute는 메서드가 HTTP GET 요청에 대해 응답한다는 것을 알려줍니다. WebInvokeAttribute는 기본적으로POST 요청에 응답하지만, PUT 과 DELETE 요청에 대한 응답도 지원합니다. PUT 및 DELETE 요청에 대해 응답하는 메서드를 정의하기 위해서는 WebInvokeAttribute.Method 속성을 설정해주면 됩니다. 설명이 좀 어려워 보이지만 위 코드를 보면 쉽게 이해할 수 있으실 겁니다. ^^


REST 서비스 구현

기본적인 부분은 모두 언급이 된 것 같습니다. 이제는 이를 이용하여 간단한 REST 서비스를 만들어보겠습니다.
만들려는 서비스는 회원 관리에 대한 것으로 새로운 회원의 입력, 회원 정보 조회, 회원 정보 수정 및 삭제를 할 수 있는 서비스를 구현해보도록 하겠습니다.

우선, 서비스에서 사용할 Member 클래스를 다음과 같이 정의하였습니다.

[DataContract]
public class Member
{
    [
DataMember(Order=0)]
    
public string Id { getset; }
    [
DataMember(Order=1)]
    
public string Name { getset; }
    [
DataMember(Order=2)]
    
public string Job { getset; }
    [
DataMember(Name="PhoneNumber", Order=3)]
    
public string Phone { getset; }
    [
DataMember(Order=4)]
    
public string Address { getset; }
}

 
그리고, 실제 서비스의 구현은 다음과 같습니다.

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class MemberService
{
    [WebGet(UriTemplate = "GetAll")]
    public MemberList GetCollection()
    {
        BizMember bizMember = new BizMember();
        return bizMember.GetAll();
    }

 
    [WebInvoke(UriTemplate = "Add", Method = "POST")]
    public void Create(Member instance)
    {
        BizMember bizMember = new BizMember();
        bizMember.Add(instance);
    }

 

    [WebGet(UriTemplate = "{id}", ResponseFormat=WebMessageFormat.Json)]
 
   public Member Get(string id)
    {
        BizMember bizMember = new BizMember();
        return bizMember.Get(id);
    }

 

    [WebInvoke(UriTemplate = "{id}", Method = "PUT")]
 
   public void Update(string id, Member instance)
    {
        BizMember bizMember = new BizMember();
        bizMember.Update(id, instance);
    }
 

    [WebInvoke(UriTemplate = "{id}", Method = "DELETE")]
    public void Delete(string id)
    {
        BizMember bizMember = new BizMember();
        bizMember.Delete(id);
    }
}


코드는 보시면 아시겠지만 그리 어렵지 않습니다. BizMember 라는 클래스에서 여러가지 작업이 이루어지는데 이 클래스 역시 그렇게 어려운 내용이 없기에 자세한 설명은 생략하겠습니다. 대신에 소스를 첨부시켜 놓을 테니 잠깐만 살펴보시면 알 수 있으실 겁니다. ^^;; BizMember 클래스에 대한 설명까지 하려면 내용이 너무 길어질 것 같아 그러니 양해 부탁드립니다~ 흠흠;;; 

앞에서 설명을 하지 않았는데 위 코드를 보면 WebGetAttribute와 WebInvokeAttribute에 UriTemplate 이라는 속성이 보이실겁니다. 이 속성은 서비스로 들어온 요청의 URI와 매핑을 시키는 속성이라고 생각하시면 됩니다.
예를 들어, 위의 코드에서 Create 메서드의 경우 UriTemplate 속성의 값이 "Add" 로 되어 있는데, 만약 이 서비스의 기본 주소가 "http://localhost:2853/MemberService"이라고 할 때, 요청 들어온 URI가 "http://localhost:2853/MemberService/Add" 일 때 Create 메서드를 호출 한다는 것입니다. 물론, Create 메소드의 WebInvokeAttribute에 정의되어 있듯이 "POST" 방식의 요청이어야 하겠죠~?

또한, 위 코드의 Get 메서드처럼 UriTemplate 속성의 값이 "{id}"인 경우가 있는데, 이는 메서드의 파라미터인 id의 값이 URI에 들어가는 형태가 되는 것입니다. 예를 들면, HTTP "GET" 방식으로 "http://localhost:2853/MemberService/ruaa" 의 주소로 요청이 들어오면, 위 코드에서의 Get 메서드가 호출되면서 Get 메서드의 id 파라미터 값으로 ruaa가 입력되는 것입니다.
 
그럼, 서비스의 기본 주소는 어떻게 설정할 수 있을까요? 궁금하지 않으신가요? ㅎ
기존 WCF 서비스에서는 web.config 파일을 사용했었는데, REST 서비스 템플릿은 조금 다릅니다. 
global.asax 파일을 열어보시면 그 답을 찾을 수 있으실 겁니다.

private void RegisterRoutes()
{
    // Edit the base address of Service1 by replacing the "Service1" string below
    RouteTable.Routes.Add(new ServiceRoute("MemberService"new WebServiceHostFactory(),
                                            typeof(MemberService)));
}

 
위 코드를 보니 어디서 많이 봤다~ 싶으네요~ ㅎ
ASP.NET 4.0과 ASP.NET MVC 프로젝트를 한 번이라도 구현해보신 분들이라면 저랑 같은 생각을 하셨을겁니다. ASP.NET MVC 때 부터 사용한 라우팅 방법과 같은 방식을 사용하고 있네요~

아무튼, 위 코드 처럼 구현을 할 경우 서비스의 기본 주소는 "http://{서비스가 배포된 기본 주소}/MemberService"가 됩니다.


Help 페이지

이렇게 REST 서비스 템플릿을 이용하여 서비스를 구현하고, 빌드를 하면 기본적으로 서비스에 대한 help 페이지를 만날 수 있습니다. help 페이지의 주소는 서비스의 기본주소에 "/help" 가 붙는 형식입니다.
저 같은 경우, Visual Studio 개발 서버로 돌렸기 때문에 다음 그림에서 보듯이 help 페이지의 경로는 "http://localhost:2853/MemberService/Help" 가 되는 것입니다.


위 그림을 보시면 알겠지만, 각 서비스 끝점에 대한 간단한 설명을 볼 수 있고, 각 서비스 끝점의 메서드를 클릭하면 자세한 내용을 확인할 수 있습니다. 이는 WCF 서비스의 헬프 페이지와 아주 유사하죠~? 

자~ 이제 슬 마무리 지어 볼까요? ^^

이번 포스팅을 통해 REST 서비스의 많은 부분에 대해 알려드리진 못했지만 기본적인 부분은 모두 설명이 된 듯 합니다. 그리고 REST 서비스 템플릿을 이용하면 정말 쉽게 WCF를 이용한 RESTful 서비스를 구현할 수 있다는 것도 알게 되었습니다. 

혹시나 추가적인 설명이 필요한 부분이나 질문이 있으신 분들은 댓글 남겨주시면 성심성의껏(?) 답변 해드리겠습니다.
그리고, 첨부한 소스 코드를 참조하시어 테스트 해보시면 이번 포스팅에서 설명한 많은 부분이 이해가 되실 것 같습니다. 

SQL Azure Sample Database 설치

Cloud 2011. 4. 29. 08:30 Posted by 알 수 없는 사용자

SQL Azure Sample 데이터베이스 설치

SQL Azure용 샘플 데이터베이스를 설치하는 것을 다뤄보려고 합니다. Cloud Application에서 스토리지 서비스를 쓰지 않고 Azure 데이터베이스를 액세스하려고 할 경우 테스트 데이터를 입력하고 구성하기에는 시간이 좀 걸리기도 약간 귀찮기도 합니다.

아래 사이트에서 SQL Azure용 샘플 데이터베이스를 다운로드 가능합니다.

http://msftdbprodsamples.codeplex.com/releases/view/37304

설치를 위해서는 SQL Azure 프로젝트가 생성되어 있어야 하며 .NET 3.5 가 설치되어 있어야 합니다. 반드시 로컬에 SQL Server가 있어야 하는 것은 아니지만 SSMS가 있다면 데이터 확인이나 쿼리 하기가 더 쉽겠죠~

다운로드 받아 압축을 풀고 위의 사이트에서의 순서에 따라 구성하시면 됩니다.

1. 먼저 이미 데이터베이스가 존재한다면 AdventureWorksDWAZ2008R2 데이터베이스를 삭제합니다.

2. 명령 프롬프트를 관리자 권한으로 실행합니다.

3. 압축 파일의 AdventureWorks2008R2Az/DW 폴더로 이동합니다.

4. 아래 명령을 실행합니다. 서버의 FQDN 이름과 계정, 암호를 입력합니다.

그러면 아래처럼 실행되면서 SQL AzureAdventureWorksDWAZ2008R2 데이터베이스가 생성됩니다.


Management Portal을 보면 아래 그림과 같이 생성되어 있는 것을 확인이 가능합니다.

어느 순간부터 Portal에서 몇몇 내용들은 한글로 표시되고 있습니다.

물론 Database Manager 에서도 아래 그림처럼 데이터 확인이 가능합니다. 그리고 SQL Server 2008 R2 SSMS에서도 가능합니다. 또한 AdventureWorks2008R2 LT 데이터베이스도 설치가 가능합니다.

이상으로 Sample Azure 데이터베이스를 설치해보았습니다. 이 데이터를 SQL Azure 리포팅이나 Cloud 응용프로그램에서 액세스할 수 있습니다.


'Cloud' 카테고리의 다른 글

Windows Azure VM Role 미리보기 #1  (0) 2011.05.09
Windows Azure Application - Hello Azure (1)  (0) 2011.05.03
DataMarket (2) - 데이터 구독 및 탐색  (0) 2011.03.07
DataMarket (1) - 소개  (0) 2011.02.28
SQL Azure Update (3)  (0) 2011.02.21

is_sorted는 데이터셋이(컨테이너나 배열) 정렬되어 있다면 true를 반환하고, 그렇지 않다면 false를 반환 합니다.

is_sorted_until는 데이터셋에서 정렬되어 있지 않는 요소의 첫 번째 위치를 반환합니다.

 

is_sortedis_sorted_until의 원형은 아래와 같습니다.

is_sorted

template<class ForwardIterator>

    bool is_sorted( ForwardIterator _First, ForwardIterator _Last );


template<class ForwardIterator, class BinaryPredicate>

    bool is_sorted( ForwardIterator _First, ForwardIterator _Last, BinaryPredicate _Comp );

 

 

is_sorted_until

template<class ForwardIterator>

    ForwardIterator is_sorted_until( ForwardIterator _First, ForwardIterator _Last);

 

template<class ForwardIterator, class BinaryPredicate>

    ForwardIterator is_sorted_until( ForwardIterator _First, ForwardIterator _Last,

               BinaryPredicate _Comp );

 

위의 is_sortedis_sorted_until의 원형을 보시면 알겠지만 조건자(함수객체)를 사용하는 버전과 사용하지 않는 버전 두 가지가 있습니다.

조건자를 사용하지 않는 경우 기본으로 operator<가 적용됩니다.

 

프로그래머는 코드로 이해하죠? ^^ 그럼 바로 예제 코드 들어갑니다.

이번 예제는 간단하게 만들기 위해 정수 배열을 사용해 보았습니다. 아마 STL을 이제 막 공부하고 있는 분들은 알고리즘을 STL의 컨테이너에만 사용할 수 있는 것으로 알고 있는 분들도 있을텐데 그렇지 않습니다. 아래 예제는 int 형 배열을 사용하였습니다.

 

< 예제 코드 >

#include <iostream>

#include <algorithm>

using namespace std;

 

 

int main()

{

           int Numbers1[5] = { 1, 2, 3, 4, 5 };

           int Numbers2[5] = { 5, 4, 3, 2, 1 };

           int Numbers3[5] = { 1, 2, 4, 3, 5 };

           bool IsResult = false;

 

          

           IsResult = is_sorted( &Numbers1[0], &Numbers1[5], [](int x, int y) { return x < y; } );

           cout << "Numbers1. 오름 차순 ? " << IsResult << endl;

 

           IsResult = is_sorted( &Numbers2[0], &Numbers2[5], [](int x, int y) { return x > y; } );

           cout << "Numbers2. 내림 차순 ? " << IsResult << endl;

 

           IsResult = is_sorted( &Numbers3[0], &Numbers3[5], [](int x, int y) { return x < y; } );

           cout << "Numbers3. 오름 차순 ? " << IsResult << endl;

 

           cout << endl;

           cout << "is_sorted에서 조건자(함수객체)를 생략한 경우 " << IsResult << endl;

           IsResult = is_sorted( &Numbers1[0], &Numbers1[5] );

           cout << "Numbers1 is_sorted의 결과는 ? " << IsResult << endl;

           IsResult = is_sorted( &Numbers2[0], &Numbers2[5] );

           cout << "Numbers2 is_sorted의 결과는 ? " << IsResult << endl;

 

           cout << endl;

           int Numbers4[8] = { 1, 2, 3, 5, 4, 5, 7, 8 };

           int* NumIter = is_sorted_until( &Numbers4[0], &Numbers4[5], [](int x, int y) { return x < y; } );

           cout << "Numbers4에서 정렬되지 않은 첫 번째 위치의 값 : " << *NumIter << endl;

 

           return 0;

}

 

< 결과 >


 

 

Native C++ 개발자를 위한 C++/CLI

C++/CLI 2011. 4. 20. 09:00 Posted by 알 수 없는 사용자

제가 http://vsts2010.tistory.com/category/C++/CLI 에 올린 글을 정리한 것으로 보기 편하도록 정리하여 pdf 파일로 만들었습니다.

이후 관련 글을 포스팅 하면 일정 시간이 지난 후 다시 이 글에도 추가하여 배포할 예정입니다.





이번에 설명할 is_partitioned, partition_point는 그 이름처럼 앞서 소개한 partition_copy와 관계가 있는 알고리즘 입니다.

 

is_partitioned의 원형

template<class InputIterator, class BinaryPredicate>

    bool is_partitioned(

        InputIterator _First,

        InputIterator _Last,

        BinaryPredicate _Comp

    );

 

partition_point의 원형

template<class ForwardIterator, class Predicate>

    ForwardIterator partition_point(

        ForwardIterator _First,

        ForwardIterator _Last,

        Predicate _Comp

    );

 

is_partitioned는 데이터셋의 요소가 전반 부와 후반 부 두 개로 나누어져 있는지 조사할 때 사용하고, partition_point는 두 개로 나누어져 있는 데이터셋에서 후반 부의 첫 번째 요소를 가리키는 반복자를 반환합니다.

 

약간 설명이 애매하죠?^^;

예를 들어 설명하면 온라인 FPS 게임에서 8명이 각각 4명씩 레드 팀과 블루 팀으로 나누어서 게임을 하는 경우 vector로 된 StagePlayers(온라인 게임에서 방에 들어온 유저들을 저장)에 앞 부분에는 레드 팀 플레이어 4명을 차례로 저장하고, 그 이후에 블루 팀 플레이어를 저장하고 있는지 조사하고 싶을 때 is_partitioned 알고리즘을 사용하면 알 수 있습니다(맞다면 true를 반환합니다). 그리고 StagePlayers에서 블루 팀의 첫 번째 플레이어에 접근하고 싶다면 partition_point를 사용합니다.  


나름 쉽게 설명한다고 했는데 이해 가시나요? 만약 이해가 안 간다면 예제 코드를 봐 주세요^^

 

< 예제 >

#include <iostream>

#include <algorithm>

#include <vector>

#include <list>

using namespace std;

 

struct PLAYER

{

           int CharCD;

           bool IsRedTeam;

};

 

 

int main()

{

           vector< PLAYER > StagePlayers1;

           PLAYER player1; player1.CharCD = 1;         player1.IsRedTeam = true;           StagePlayers1.push_back( player1 );

           PLAYER player2; player2.CharCD = 2;         player2.IsRedTeam = true;           StagePlayers1.push_back( player2 );

           PLAYER player3; player3.CharCD = 3;         player3.IsRedTeam = true;           StagePlayers1.push_back( player3 );

           PLAYER player4; player4.CharCD = 4;         player4.IsRedTeam = false;                      StagePlayers1.push_back( player4 );

           PLAYER player5; player5.CharCD = 5;         player5.IsRedTeam = false;                      StagePlayers1.push_back( player5 );

           PLAYER player6; player6.CharCD = 6;         player6.IsRedTeam = false;                      StagePlayers1.push_back( player6 );

           PLAYER player7; player7.CharCD = 7;         player7.IsRedTeam = false;                      StagePlayers1.push_back( player7 );

 

           bool IsPartitioned = is_partitioned( StagePlayers1.begin(), StagePlayers1.end(),

                                                                                     []( PLAYER player ) -> bool { return player.IsRedTeam; } );

           if( IsPartitioned ) {

                     cout << "레드 팀과 블루 팀으로 구분 되어 나누어져 있습니다." << endl;

           } else {

                     cout << "레드 팀과 블루 팀으로 구분 되어 있지 않습니다." << endl;

           }

 

           vector< PLAYER >::iterator IterFirstBlueTeamPlayer = partition_point( StagePlayers1.begin(),StagePlayers1.end(),

                                                     []( PLAYER player ) -> bool { return player.IsRedTeam; } );

           if( IterFirstBlueTeamPlayer != StagePlayers1.end() ) {

                     cout << "첫 번째 블루 팀 플레이어. 캐릭터 코드 : " << (*IterFirstBlueTeamPlayer).CharCD << endl;

           }

 

                    

           vector< PLAYER > StagePlayers2;

           StagePlayers2.push_back( player7 );

           StagePlayers2.push_back( player6 );

           StagePlayers2.push_back( player1 );

           StagePlayers2.push_back( player5 );

           StagePlayers2.push_back( player4 );

           StagePlayers2.push_back( player3 );

           StagePlayers2.push_back( player2 );

          

           IsPartitioned = is_partitioned( StagePlayers2.begin(), StagePlayers2.end(),

                                                                                     []( PLAYER player ) -> bool { return player.IsRedTeam; } );

           if( IsPartitioned ) {

                     cout << "레드 팀과 블루 팀으로 구분 되어 나누어져 있습니다." << endl;

           } else {

                     cout << "레드 팀과 블루 팀으로 구분 되어 있지 않습니다." << endl;

           }

 

           getchar();

           return 0;

}

 

< 결과 >

 

예제 코드를 보니 쉽게 이해 되시죠? 그럼 저는 아는 걸로 생각하고 다음 포스팀에서는 다른 알고리즘을 설명하겠습니다^^