요즈음 클라우드 서비스들을 이용하다보면, Windows 서버 운영체제를 통해서 확장성있는 클라우드를 만들고자 하는 경우가 자주 있습니다. 일반적인 웹 사이트를 구축할 때에도 마찬가지이고, 당연히 KT UCLOUD나 Amazon과 같은 환경에서도 같은 노력이 뒷받침이 되어야 하지요. 그리고 제가 주 전공으로 하고 있는 Windows Azure 역시, 첫 배포 때에는 간과하기 쉬운 점이 바로 로드 밸런싱 환경이라는 점입니다.

이러한 로드밸런싱 환경을 만들때에는, 이전에 구축해본 경험이 없는 관리자가 개발자 입장에서는 상당히 어려운 문제에 봉착하게 될 가능성이 많습니다. 특히 요즈음 웹 환경에서는 당연하게 사용하는 세션이나 쿠키에 관련된 설정들이 로드밸런싱 환경에서 기대했던 것과 다르게 동작해서 좌절하는 경험을 많이들 하실텐데요, 제가 오늘 블로그에 올리는 것은 ASP.NET에 관한, 그리고 IIS 7에 관한 내용입니다. (PHP나 JSP 개발자분들께서도 공감하실 수 있는 부분이 있을 것입니다.)

로드밸런싱 환경을 잘 알고 구축할 수 있다면, 앞으로 나오게될 어떤 종류의 클라우드 서비스이든 관계없이 문제를 정확하게 해결할 수 있을 것입니다. 사실 클라우드 기반의 웹 서비스는 달리 표현하면, 기본 골자는 로드밸런싱에 기반을 두고 있는 것이고, 그 이후의 확장성 전략을 클라우드 솔루션으로 채우는 것과 같다고 말할 수 있습니다. (어떤 뼈대를 사용할 것인지는 전적으로 여러분들의 선택에 달린 것입니다.)

로드 밸런싱 환경이란?

로드 밸런싱 기술 자체는 상당히 오래된 것입니다. 이름에서 알 수 있듯이, 몰려오는 트래픽을 내부적으로 분산하여 특정 서버 컴퓨터로 연결이 몰려 서비스가 사용 불가 상태로 빠지는 것을 "지연"시키거나 "완화"시키는 것에 목적이 있습니다. 로드 밸런싱의 기술적 개념도는 다음과 같습니다. (이미지 출처: http://msdn.microsoft.com/en-us/library/ff650667.aspx)

다양한 상황에서 로드밸런싱이 쓰이겠지만 가장 일반적으로는 웹 환경에서 많이 쓰입니다. 연결을 오래 유지할 필요가 없으면서도, 짧은 시간 내에 빠른 연결 회전을 보이는 웹 프로토콜에서 가장 중요한 것은 바로 신속성인데, 분산 처리를 하지 않는 경우에는 필연적으로 서버 컴퓨터가 받아들일 수 있는 동시 연결 한계치에 금방 치닫게 됩니다. 그러나 로드 밸런싱을 정확히 사용하면 이러한 한계치에 치닫게 되는 속도가 로드 밸런싱에 참가하는 컴퓨터의 댓수만큼 반비례하게 됩니다. 그리고 이 때 하나의 웹 사이트를 위한 로드 밸런싱 서비스에 멤버로 참여하는 서버 컴퓨터들을 묶어서 "웹 팜"이라고 정의를 하는 것이지요. 더 일반적으로는 "서버 팜"이라고도 합니다.

잠시 다른 이야기로 넘어가자면, 요즈음 대두되는 클라우드 컴퓨팅은 관리 측면에서 봤을 때, 충분한 대역폭을 보장하는 연결과 매우 뛰어난 성능을 가진 로드 밸런서를 이용하여 연결을 분산하는 작업을 수행하는 것입니다. 그리고 웹 팜 안에 참여하는 컴퓨터의 유형에 있어서는 이전과 다른 점이 하나 있는데, 마치 구름과 같이 수축과 팽창을 자유자재로 한다는 것입니다. 물론 이런 수축과 팽창이 가능함은 내부적으로 가상화 솔루션을 이용했다거나 여기에 대응할 수 있는 알고리즘을 사용했다는 가정이 깔려있는 것입니다.

정말 완벽하고 정확하게 구축했다면, 적은 전원이나 자원 공급으로도 충분히 웹 팜이 유지가 될 수도 있고, 필요하다면 웹 팜의 크기가 엄청나게 커질 수도 있겠지요. 이걸 여러분이 관리하신다면 프라이빗 클라우드, 신뢰할 수 있는 IT 기업이 관리한다면 퍼블릭 클라우드가 된다고 보실 수 있겠습니다. 그러나, 클라우드 컴퓨팅이 만능약처럼 들릴 수 있는 부분이 있지만 정확히 알아야 할 것은 클라우드 컴퓨팅 역시 이 로드 밸런싱을 기초로 만들어지는 것이고, 여러분이 운영할 수 있는 한계에까지 트래픽이 몰리거나, 이런 일을 하는 IT 업체에게 지불할 수 있는 재정의 한계에까지 트래픽이 몰린다면 이것이 여러분이 생각할 수 있는 클라우드의 한계입니다. 무제한이라고 해서 값이 저렴하거나 무료에 수렴하는게 아님을 명확히 이해하고 있어야 합니다.

웹 로드 밸런싱을 위한 이야기

다시 본론으로 돌아와서, 웹을 로드 밸런싱할 수 있으려면 무엇을 검토해야 할까요? 가장 중요한 것은 웹 서버에 참여하는 각각의 컴퓨터 자체에는 "절대로" 컴퓨터의 고유한 정보를 가지고 있으면 안된다는 점입니다. 매우 단순한 이야기같지만 이러한 원칙을 지키지 않도록 설계되어있는 것이 지금 이 시점까지의 서버 컴퓨팅 기술들의 대다수의 원칙입니다. 간단한 예를 들어볼까요?

여러분이 일상적으로 사용하는, 웹을 통한 파일 업로드 기능을 담당하는 간단한 웹 앱이 있다고 가정해 보겠습니다. 이 웹 앱은 서버가 한 대 일때에는 참 쉽고 빠르게 설치해서 쓸 수 있었습니다. 당연히, 설치를 잘 했다면, 사용자가 웹 페이지를 방문해서 파일을 업로드하면 웹 서버가 그것을 알아보고 파일을 회수해서 하드 디스크 어딘가에 저장하겠지요. 그러나 시간이 지나서 이 웹 앱의 기능을 업그레이드하고 좀 더 많은 사용자들이 파일을 저장하고 다운로드할 수 있도록 만들어보고자 해서 로드 밸런싱 환경을 구축하여 베타 테스트를 시작했습니다. 그런데 어떤 문제들이 생겼을까요?

앞서 이야기한 기술적인 특성때문에, 사용자들은 분명히 조금전까지 파일을 업로드했었는데 페이지를 다시 와서보니 파일이 업로드되지 않은 상태로 페이지가 나와서 혼란스러워합니다. 혹은 파일을 어디로 빼돌린거냐며 분노하는 사람들도 있구요. 그래서 몇 번 F5키를 누르다보면 "어라?"하고 놀라게 됩니다. 조금 전에 업로드했던 파일이 다시 나타나니까요. 그러고나서 그 파일을 다운로드하려고 링크를 클릭하면 이번엔 또 다시 404 오류를 만납니다. 이제 사용자들은 이 서비스에 대해서 대단한 분노와 원성을 쏟아낼 것입니다. 서비스 상태에도 일관성이 없을 뿐 아니라 불안정한것 같다. 믿을 수 없다면서요.

이것이 일선 IT 현장에서 로드 밸런싱이나 클라우드를 처음 접목했을 때 겪는 "가장 흔하고 일반적인 장애"입니다. 더 안타까운 것은, 이것을 신 기술에 의한 책임으로 회피하고 문제시하는 것입니다. 문제의 본질을 정확히 알고 있다면 이렇게 말하는 것이 왜 잘못인지도 금방 알 수 있을 것입니다.

여기서 든 예제처럼, 이 웹 앱의 문제는 단순히 업로드한 파일을 자신의 컴퓨터에 저장하려고 했다는 데에 문제가 있습니다. 로드 밸런싱 멤버로 참여하는 컴퓨터가 자신의 상태를 중요하게 여기면, 다음번에 이어받는 다른 서버 컴퓨터의 입장에서는 이전에 그 컴퓨터가 무엇을 했는지 알 길이 없습니다. 그저, 찾고자 하는 내용이 없음을 이야기하는 수 밖에 없습니다. 이런 상황이 반복되면서 서비스 전체는 들어올때와 나갈때가 전혀 다른, 일관성이 없고 이상한 서비스가 되는 것입니다.

이 문제를 해결하기 위하여 어떻게 수정해야 할까요? 답은 간단합니다. 파일 저장소를 로드 밸런싱 멤버 컴퓨터 내부가 아닌, 여러 멤버 컴퓨터들이 같이 이용할 수 있는 공용 저장소로 바꾸는 것입니다. 가장 간단한 방법은 네트워크 UNC 경로로 이용할 수 있는 스토리지가 있을 수 있습니다.

여기서 궁금한 점이 하나 더 있는데, 그렇다면 로드 밸런싱에 의하여 애써 분산한 서비스가 다시 모이는 것이 아니냐고 반문할 수도 있습니다. 그런데 사실, 생각외로 사용자들이나 웹 크롤러와 같이 인터넷 상에서 발생하는 별 뜻없이 바쁘게 만드는 다양한 유형의 트래픽을 웹 팜 수준에서 한 번은 로드 밸런싱을 해주는 것 만으로도 실제 스토리지에 대한 요구 사항은 획기적으로 감소한다는 점입니다. 거기다, 역할 분담도 정확히 할 수 있으며 스토리지 자체에 대한 요구 사항이 폭증하는 것을 방지하기 위하여 기술적으로는 좀 더 복잡해질 수 있지만 캐싱 기능을 사용할 수도 있습니다. 이렇게 함으로서, 우리가 흔히 잘 아는 클라우드 서비스의 시작을 뗄 수 있게 됩니다.

기술적인 이야기 1 - 세션 처리 방법 바꾸기

그렇다면 IIS와 ASP.NET에서는 이런 이상한 상황을 예방하고 신뢰할 수 있는 서비스를 만들기 위해서 어떤 수정 사항을 반영해야 하는 것일까요? 제가 이제까지 인터넷 상으로 자료 조사를 해왔던 것은 모두 제각기 흩어져있는 정보들이었고 이것을 한 번에 취합할 수 있는 방법을 오늘 블로그 포스팅을 통하여 소개할까 합니다.

기본적으로 ASP.NET은 세션 처리를 IIS 프로세스 안에서 수행하도록 되어있습니다. 가장 동선도 짧고, 신속하게 반응하기 때문입니다. 그러나 로드 밸런싱 환경에서 이는 당연히 "채택하면 안되는" 기법입니다. 이 방법은 web.config 파일 안의 <sessionState> 요소에서 변경할 수 있는 부분으로, <configuration> 요소 아래의 <system.web> 요소 아래에서 없는 경우 새로 지정할 수 있습니다. <sessionState> 요소의 mode 속성의 값을 변경하면 됩니다. 지금 이야기한 부분은 mode 속성이 InProc으로 지정되어있거나, 아무것도 지정되어있지 않을 때 .NET Framework의 글로벌 web.config 설정을 바꾸지 않은 경우 기본으로 지정되는 설정입니다.

IIS 7에서 볼 수 있는 아래 그림과 같은 설정도 이 XML 파일의 수정을 텍스트 에디터 없이 수정하는 것입니다.

로드 밸런싱 환경에서 정상적으로 동작하는 웹 사이트를 만들기 위해서는 mode의 설정 값을 InProc 대신 StateServer나 SQLServer로 바꾸어야 하는데, 양쪽 값 모두 장단점이 있습니다. StateServer의 경우 기본적으로는 꺼져있는 ASP.NET State Service라는 NT 서비스가 제공하는 별도의 서버를 이용하는 방식이고, SQLServer는 이름에서 알 수 있듯이 실제 SQL Server를 사용하여 세션을 구현하는 방식입니다. 데이터베이스 서버의 성능이 세션을 모두 수용할 수 있을만큼 획기적으로 뛰어나거나, 세션 서버가 죽었다가 살아나도 로그아웃 처리가 안되게 한다던가, 혹은 여러 로드 밸런싱 사이트 사이에서 세션 공유를 안전하게 할 방법이 필요하다면 이 모드를 사용할 수 있습니다. 이에 비하여 StateServer는 별도의 SQL 서버 없이도 간편하게 구축할 수 있는 방법을 제공하긴 하지만, 세션 서버가 죽었다 살아날 경우 내용이 없어지는 휘발성 세션입니다.

양쪽 모드 모두 중요한 것은 멤버로 참여하는 웹 서버 컴퓨터 밖에 상태를 보관해야 한다는 것이 키 포인트로, 이것을 지키지 않고 멤버 컴퓨터 안에 이런 설정을 구축하면 전혀 나아지는 것이 없습니다. 그리고 당연한 이야기이지만 멤버 컴퓨터로 참여하는 모든 웹 서버가 같은 설정을 가지고 있어야 합니다.

StateServer와 SQLServer 모드를 구현하는 방법에 대한 자세한 내용은 아래 아티클을 참고하시면 되겠습니다.

http://msdn.microsoft.com/ko-kr/library/ms178586.aspx

기술적인 이야기 2 - ASP.NET 사이트 간에 립싱크 맞추기

세션을 공유하는 것 이외에, ASP.NET은 내부적으로 Machine Key라는 것을 사용합니다. Machine Key의 용도는 ASP.NET 안에서 참 다양한데, 가장 대표적으로는 클라이언트와 서버 사이에 쿠키 정보를 주고 받을 때 암호화하기 위한 수단으로 이용하는 것이 유명한 사례입니다. 쿠키를 이용한 취약점 공격은 웹 세계에서 너무나 당연한 공격 방식 중 하나이기 때문에 ASP.NET은 처음부터 이를 보완하기 위한 전략을 구현하고 있었습니다. 그러나 이것이 지금 와서 로드 밸런싱 환경이 되면서는 또 다른 어려운 문제로 바뀐 것입니다.

이 Machine Key라는 것 역시 서버 컴퓨터마다 고유하게 생성할 뿐 아니라, 매번 연결할 때 마다 다른 값을 생성하여 암호화에 사용합니다. 클라이언트 입장에서야, 서버가 "ABC"라는 쿠키를 주니까 "아 그렇구나. 나중에 돌려주면 서버가 날 알아보겠지?"하며 성실하게 반납합니다. 그런데 로드 밸런싱에 참여하는 A라는 서버 대신 C라는 서버가 이 쿠키를 받아들었을 때는 "이거 내것 아님" 하며 클라이언트에게 퇴짜를 놓습니다. 이것이 문제의 핵심인 것이죠.

이 문제를 해결하기 위해서는 아까전에 이야기한 주제보다 좀 더 많은 노력이 필요합니다. 생각보다, 보안을 완벽하게 유지하기 위하여 ASP.NET이 관리자들에게 요구하는 사항이 까다롭기 때문입니다. 이 Machine Key를 만들기 위해서는 별도의 생성 도구를 사용해야 합니다. 그러나 안타깝게도 이 도구를 구한다거나 만들 수 있으려면 개발자들의 조력이 좀 필요합니다. 그리고 개발자 본인들도 이런 방법을 찾아야 하기때문에 꽤나 귀찮습니다. Codeproject에 가면 이러한 방법을 자세히 설명한 아티클도 있습니다만 간단한 도구도 드리고, 코드 조각도 드리니 프로그램에 넣어 활용하시면 더 편리할 것입니다.

using System;
using System.Text;
using System.Security.Cryptography;

/* 중략 */

        public static string getRandomKey(int bytelength)
        {
            byte[] buff = new byte[bytelength];
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            rng.GetBytes(buff);
            StringBuilder sb = new StringBuilder(bytelength * 2);
            for (int i = 0; i < buff.Length; i++)
                sb.Append(string.Format("{0:X2}", buff[i]));
            return sb.ToString();
        }

        public static string getASPNET20machinekey()
        {
            StringBuilder aspnet20machinekey = new StringBuilder();
            string key64byte = getRandomKey(64);
            string key32byte = getRandomKey(32);
            aspnet20machinekey.Append("<machineKey\n");
            aspnet20machinekey.Append(" validationKey=\"" + key64byte + "\"\n");
            aspnet20machinekey.Append(" decryptionKey=\"" + key32byte + "\"\n");
            aspnet20machinekey.Append(" validation=\"SHA1\" decryption=\"AES\"\n");
            aspnet20machinekey.Append("/>\n");
            return aspnet20machinekey.ToString();
        }

        public static string getASPNET11machinekey()
        {
            StringBuilder aspnet11machinekey = new StringBuilder();
            string key64byte = getRandomKey(64);
            string key24byte = getRandomKey(24);

            aspnet11machinekey.Append("<machineKey");
            aspnet11machinekey.Append(" validationKey=\"" + key64byte + "\"\n");
            aspnet11machinekey.Append(" decryptionKey=\"" + key24byte + "\"\n");
            aspnet11machinekey.Append(" validation=\"SHA1\"\n");
            aspnet11machinekey.Append("/>\n");
            return aspnet11machinekey.ToString();
        }

위의 코드를 사용하여 프로그램을 만들거나 ZIP 파일 안의 프로그램을 이용하여 값을 만들도록 하면 아래와 같은 XML 코드 조각을 얻을 수 있을 것입니다. 이 코드 조각을 각각의 서버에 들어있는 web.config에 지정하거나, 특정한 값만 인용하여 아래의 IIS 7 설정 아이콘에서 볼 수 있는 설정 도구를 통해서 직접 설정할 수도 있습니다.

<machineKey
 validationKey="FACBB6C89C44CB8BB7165FC4639BAA7267B...EF297D815E1BDD40E883E3451628CB95D34309"
 decryptionKey="4E95057676CC8DBA9AB...AACC1121B6B962E5AFA7849B0C82"
 validation="SHA1" decryption="AES"
/>

기술적인 이야기 3 - IIS에서 놓치면 안되는 것

ASP.NET을 가장 먼저 사용할 수 있게 된 웹 서버가 IIS이다보니 발생한 일종의 특성입니다만 여러 포럼에 걸쳐서 잘 언급되지 않는 문제점이 하나 있습니다. 바로 IIS에서 사용하는 사이트 ID 값을 통해서 정해지는 Application Path를 Machine Key와 같이 활용된다는 사실입니다. 웹 사이트 관리를 하다보면 로드 밸런싱에 참여하는 컴퓨터들을 다음과 같이 관리하게 되는 경우가 있습니다.

  • 서버 A에서는 기본 웹 사이트를 먼저 지우고 새 웹 사이트를 만들었다.
  • 서버 B에서는 새 웹 사이트를 먼저 만들고 기본 웹 사이트를 지웠다.

혹은 아래와 같은 경우도 있을 수 있습니다.

  • 서버 C에서는 사이트 A를 만들고 사이트 B를 만들었다.
  • 서버 D에서는 사이트 B를 만들고 사이트 A를 만들었다.

별 차이 없이 생각할 수 있지만, IIS에서는 이 경우 각각의 사이트들에 다른 ID 값을 부과하게 됩니다. 이 경우, 분명히 Machine Key를 동일하게 지정했음에도 불구하고 로드 밸런싱 환경에서 세션 상태가 일관성없게 변하는 문제를 만나게 됩니다. 제가 이번에 고민하게 된 부분도 바로 이 부분이었는데요, 이 문제를 해결하기 위해서는 IIS 7에서 전체 웹 사이트 목록에 나타나는 내용 중 다음의 ID 값이 멤버로 참여하는 웹 서버마다 차이가 있지 않은지 우선 검토해야 합니다.

위에있는 그림에서 빨간색으로 그린 부분이 서버 컴퓨터마다 차이가 있다면 이 값을 수정해주어야 합니다. 이 값을 수정하기 위해서는 수정할 사이트를 클릭하고, 고급 설정 링크를 아래 그림과 같이 클릭합니다.

이제 아래와 같은 팝업 대화 상자가 나타나면 강조 표시한 속성인 ID 값이 멤버로 참여하는 웹 서버 모두 같은 값을 가질 수 있도록 통일시켜줍니다.

확인 버튼을 누른 다음, ID 값이 바뀐 서버 컴퓨터에 한해서 IIS 전체를 재시작해주시거나 사이트 재시작을 시켜주시면 정상적으로 작동하게 될 것입니다.

Windows Azure 환경에서의 고려 사항

오늘 살펴본 내용은 IIS 7과 ASP.NET에 관한 부분이었지만, Windows Azure Platform의 경우에도 비슷한 문제가 있습니다. Windows Azure Platform에 VM Role로 웹 사이트를 게시를 하든, Web Role로 웹 사이트를 게시하든 세션을 사용하게 될 경우 비슷한 문제가 있을 수 있습니다.

다행히, Web Role을 이용한다면 내부적으로 사용하는 IIS에서 여러분이 몇 개의 웹 사이트를 추가적으로 구성하든 관계없이 같은 순서로 같은 ID를 사용하는 웹 사이트를 만들 것이므로 세 번째로 이야기한 ID 값 수정과 같은 작업은 할 필요가 없을 것입니다. 그러나 Machine Key에 대한 설정이나 세션 공유를 위한 설정은 SQL Azure를 이용한다거나, Worker Role에서 ASP.NET State Service 혹은 써드파티의 Session State Server를 이용해야 할 수 있습니다.

물론, 최근에 Windows Azure Platform의 일부로 Windows Azure AppFabric Cache가 새로 출시되기는 하였습니다만 상당히 이용 가격이 비싼 편입니다. (비싼만큼 확실한 성능을 제공합니다.) 로드 밸런싱 환경에서 특별한 문제를 일으키지 않는 일반적인 세션 공유가 필요하시다면 오늘 이야기한 주제를 응용한 Azure Project를 구축해보는 것도 의미가 있을 것입니다.

'Cloud' 카테고리의 다른 글

SQL Azure Data Sync (3) – 고려사항  (0) 2011.09.22
SQL Azure Data Sync (2) – Sync Group  (0) 2011.09.16
SQL Azure Data Sync (1) – 소개와 Agents 구성  (0) 2011.09.09
SQL Azure Sharding 소개  (0) 2011.09.08
SQL Azure Reporting (3)  (1) 2011.08.25

SQL Azure Reporting (3)

Cloud 2011. 8. 25. 09:57 Posted by 알 수 없는 사용자

SQL Azure Reporting (3)

앞에서 SQL Azure를 데이터 원본으로 하여 보고서를 생성하고 테스트하고 SQL Azure Reporting에 게시해서 결과를 살펴보았습니다.

이번 글에서는 SQL Azure Reporting Windows Azure 웹 역할에서 이용하는 내용을 다뤄보도록 하겠습니다. SQL Azure Reporting 을 이용하는데 Windows Azure에서 ReportViewer 컨트롤을 사용하는 내용입니다.

Visual Studio 2010을 통해 Windows Azure 프로젝트를 생성합니다. 웹 역할의 이름은 “AzureReportingWebRole” 으로 지정하겠습니다.

Default.aspx 의 디자인 화면에 일단 ScriptManager를 추가합니다. 그리고 도구상자의 보고에 있는 ReportViewer를 추가합니다. 적절히 넓이와 높이를 지정합니다.


솔루션 탐색기에서 참조 추가를 해서 Microsoft.ReportViewer.Common을 추가합니다. Microsoft.ReportViewer.WebForms 컨트롤은 자동으로 추가되었을 겁니다. 추가되지 않았다면 추가합니다. 그리고 어셈블리의 속성에서 로컬 복사를 true 지정합니다. Windows Azure로 게시해서 구동하기 위함입니다.

이제 Default.aspx.cs 로 가서 코드를 작성해보도록 하겠습니다.

Page_Init 이벤트에서 작업을 진행하도록 하겠습니다. Page_Load에서 작업할 경우 보고서가 제대로 처리되지 않습니다. Page_Init 때문에 처음에 상당히 고생했었습니다.



ReportViewer 컨트롤의 ReportServerUrl, ReportPath, ReportServcerCredentials 을 처리하면 됩니다.



ReportServerUrl 의 경우는 아래와 같이 지정하면 됩니다. 별도로 Config 파일에서 불러와도 되겠죠.

https://서버이름.ctp.reporting.database.windows.net/ReportServer

ReportPath 의 경우는 위 주소로 로그인하면 경로와 보고서이름을 알 수 있습니다.

/subdir/reportname

ReportServcerCredentials 같은 경우는 IReportServcerCredentials 형식이라 별도의 클래스를 생성해야 합니다. 해당 클래스는 IReportServcerCredentials 인터페이스를 상속해야 합니다. 인터페이스를 구현하면 아래와 같이 구성되게 됩니다. Authority는 서버전체이름 또는 도메인을 나타냅니다.

로컬에서 실행하고 테스트를 진행해봅니다.

이제 Windows Azure로 게시해보도록 하겠습니다. 물론 결과는 잘 나옵니다.

ReportViewer 컨트롤 외에 ReportService2010.asmx 를 통해서도 보고서를 액세스할 수 있습니다.

이상으로 SQL Azure Reporting에 대한 부분을 간략히 살펴보았습니다.

SQL Azure Reporting 은 아직 SSMS를 통해서 액세스가 되지는 않습니다. 또한 관리자 사이트를 별도로 제공하고 있지 않습니다. 보고서 권한, 매개변수, 스냅숏/캐시 등의 내용에는 제약이 있습니다. 지금은 CTP 입니다.

Windows Azure 에서 SQL Azure 데이터를 기반으로 리포팅에 대한 내용을 지원해주고 있는 기능입니다.

SQL Azure Reporting 관련 문서는 아래를 참고하시면 됩니다. 또한 Sample을 다운로드 받을 수 있습니다.

http://msdn.microsoft.com/en-us/library/gg552871.aspx#ReportsandReportViewer

http://social.technet.microsoft.com/wiki/contents/articles/sql-azure-reporting-samples.aspx


'Cloud' 카테고리의 다른 글

SQL Azure Data Sync (1) – 소개와 Agents 구성  (0) 2011.09.09
SQL Azure Sharding 소개  (0) 2011.09.08
SQL Azure Reporting(2)  (0) 2011.08.18
SQL Azure Reporting (1)  (0) 2011.08.11
SQL Azure 데이터 이용(5)  (0) 2011.08.04

SQL Azure 데이터 이용(3)

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


SQL Azure 데이터 이용(3)

이번에는 SQL Azure의 데이터를 Windows Azure 프로젝트의 ASP.NET MVC 응용프로그램에서 데이터를 이용하는 내용을 알아보도록 하겠습니다.

앞에서 살펴보았듯이 기존 ASP.NET MVC 응용 프로그램과 별 차이가 없는 것을 확인 가능합니다.

Cloud 폴더의 Windows Azure 프로젝트를 생성합니다. 프로젝트 이름은 SQLAzureMVC 으로 지정합니다.

Windows Azure 프로젝트에서는 ASP.NET MVC 웹 역할을 추가합니다.

ASP.NET MVC 웹 역할의 이름은 SQLAZMVCWeb 로 아래와 같이 지정합니다.

Models 폴더에 View에서 나타낼 Product 클래스를 아래와 같이 선언합니다. 필요하다면 ProductSubCategory 클래스나 ModelView 클래스를 추가해야 합니다.

SQL Azure에 있는 데이터를 호출하기 위해 clsProduct에서 Enterprise Library Data Access Block을 이용해서 web.config 에 있는 연결 문자열을 통해 액세스합니다.

Controller를 생성하기 위해 Controllers 폴더를 오른쪽 클릭, 추가에서 컨트롤러를 선택하고 이름은 ProductController로 지정합니다.

ProductController Index에서는 아래와 같은 형태로 DropDownlist의 데이터는 ViewData로 처리하고 Product List View로 보내주는 내용을 구성합니다. 그리고 DropDownList Change 했을 경우 POST 방식으로 처리되는 Index 메서드를 정의합니다.

public ActionResult Index()

{

clsProduct product = new clsProduct();

var d = from p in product.GetProductSubCategory().Tables[0].AsEnumerable()

select new ProductSubCategoryModel

{

Name = p.Field<string>("Name"),
ProductCategoryID = p.Field<int>("ProductCategoryID")

};

ViewData["SubCategories"] = new SelectList(d.ToList(),"ProductCategoryID", "Name");

string ddlCategory = d.ToList().First().ProductCategoryID.ToString();

var products = from g in product.GetProducts(ddlCategory).Tables[0].AsEnumerable()

select new ProductModel

{

Name = g.Field<string>("Name"),

ProductID = g.Field<int>("ProductID"),

ProductNumber = g.Field<string>("ProductNumber"),

Size = g.Field<string>("Size"),

Color = g.Field<string>("Color"),

StandardCost = g.Field<decimal>("StandardCost"),

ListPrice = g.Field<decimal>("ListPrice")

};

return View(products.ToList());

}

Views 폴더에 View를 생성해보도록 하겠습니다. Index 메서드에서 오른쪽 클릭하여 뷰 추가 메뉴를 클릭합니다.

강력한 형식의 뷰 만들기에서 ProductModel를 선택하고 뷰 콘텐츠에서는 List 를 선택합니다.

Views 폴더의 Product 폴더의 Index.aspx의 코드를 살펴보고 DropDownList 관련 내용을 추가합니다.

<% Html.BeginForm(); %>

<p><%=Html.DropDownList("ddlCategory",(IEnumerable<SelectListItem>)ViewData["SubCategories"], new { onchange = "this.form.submit()" }) %></p>

로컬에서 실행해서 결과를 확인합니다.

자 이제 Windows Azure ASP.NET MVC Web Role에 대한 내용을 배포해봅니다.

배포에 대한 일반적인 내용은 아래 블로그를 참조하면 됩니다.
http://redju.tistory.com/56
ServiceConfiguration.cscfg
파일에서 인스턴스를 2로 수정하고 솔루션 탐색기의 SQLAzureMVC 프로젝트를 오른쪽 클릭하고 게시를 클릭하여 패키지를 생성합니다.

Windows Azure 사이트로 이동(http://windows.azure.com/) 하여 하여 New Hosted Service를 클릭하여 서비스 이름과 패키지 경로 등을 아래와 같이 지정합니다.

Staging에서 Ready 상태로 되었고 오른쪽 속성 창을 통해 테스트를 해볼 수 있습니다.

SWAP IP를 클릭하여 Staging에서 Production 환경으로 변경하여 결과를 확인합니다.

SQL Azure의 데이터를 이용하는 클라우드 ASP.NET MVC 웹 역할을 생성하고 배포해보았습니다.

SQL Azure 데이터 이용(2)

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

SQL Azure 데이터 이용(2)

SQL Azure 에 데이터를 이전했고 Windows Azure 프로젝트를 통해 클라우드 웹 응용프로그램에서 데이터를 이용하는 내용을 알아보도록 하겠습니다.

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

Cloud 폴더의 Windows Azure 프로젝트를 생성합니다. 프로젝트 이름은 SQLAZWeb으로 지정합니다.



Windows Azure 프로젝트에서는 ASP.NET 웹 역할을 추가합니다.

웹 역할의 이름은 AdventureWorks로 아래와 같이 지정합니다.

Default.aspx 의 디자인은 ScriptManager, UpdatePanel 에 추가로 DropdownList, GridView 컨트롤을 아래와 같이 배치합니다.

연결 문자열과 클래스 파일 등은 SQL Azure 데이터 이용(1)과 동일합니다. 배포에 대한 내용만 다를 뿐입니다. 일반적인 내용은 생략합니다.

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

public partial class _Default : System.Web.UI.Page

{

clsProduct product = new clsProduct();

protected void Page_Load(object sender, EventArgs e)

{

if (!Page.IsPostBack)

{

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

ddlSubCategory.DataTextField = "Name";

ddlSubCategory.DataValueField = "ProductCategoryID";

ddlSubCategory.DataBind();

GetProductData();

}

}

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

protected void ddlSubCategory_SelectedIndexChanged(object sender, EventArgs e)

{

GetProductData();

}

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

private void GetProductData()

{

DataSet ds = product.GetProducts(ddlSubCategory.SelectedValue);

GridView1.DataSource = ds.Tables[0];

GridView1.DataBind();

}

로컬에서 실행해서 결과를 확인합니다.

자 이제 Windows Azure Web Role에 대한 내용을 배포해봅니다.

배포에 대한 일반적인 내용은 아래 블로그를 참조하면 됩니다.

http://redju.tistory.com/56

솔루션 탐색기의 SQLAZWeb 프로젝트를 오른쪽 클릭하고 게시를 클릭하여 패키지를 생성합니다.

Windows Azure 사이트로 이동(http://windows.azure.com/) 하여 하여 New Hosted Service를 클릭하여 서비스 이름과 패키지 경로 등을 아래와 같이 지정합니다. 인스턴스의 수는 구성 파일에서 미리 지정해도 됩니다.

Staging에서 Ready 상태로 되었고 오른쪽 속성 창을 통해 테스트를 해볼 수 있습니다.

테스트 결과는 아래와 같습니다.

SWAP IP를 클릭하여 Staging에서 Production 환경으로 변경하여 결과를 확인합니다. 인스턴스를 2로 수정해서 Upgrade를 했습니다.


SQL Azure를 이용하여 ASP.NET 웹 역할을 생성하고 배포해보았습니다. SQL Azure라고 코드에 대한 내용이 별도 다르지 않고 ADO.NET으로 액세스 할 수 있습니다.


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 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

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

2011년 .NET 개발자의 생존전략

VSTS 2010 팀 블로그 2011. 1. 10. 08:30 Posted by POWERUMC

최근 2년 동안 다양한 개발 분야의 기술들이 물망에 오르는 굉장히 뜻 깊은 해였습니다. 2년 전이면 Microsoft 강성재 차장과 함께 처음으로 "Visual Studio 한국 공식 팀"을 창설하면서 http://vsts2010.net 이 탄생한 시기이군요. 2008년 12월에 팀이 창설되고, 2009년 1월 5일이 팀 블로그 2주년이 되는 날이었군요.

바로 저희 "Visual Studio 한국 공식 팀" 블로그에서 한홀 한홀 정성스럽게 작성된 포스트들이 2년 여간의 기술 흐름을 대변해 주고 있으며, 그리고 2011년의 기술도 짐작해 볼 수 있는 짧지만 굵은 변화의 흐름과 함께 여기까지 온 것 같습니다.

우리 팀이 함께 해왔던 핵심 키워드의 태그는 무엇이었을까요?

  • Visual Studio 2010
  • .NET 4.0, .NET Framework 4.0
  • ASP.NET MVC
  • C# 4.0
  • C++0x, C++/CLI
  • Parallel Computing
  • WCF
  • Cloud
  • Application Lifecycle Management

   

그리고 위의 태그들에 대해 더 자세히 살펴보더라도 생소한 기술과 이름, 아키텍처, 환경 등이 2년 동안 격변을 일으키며 변화를 해왔다는 사실입니다.

2011년 이전까지는 여러분들에게 선택권이었던 것들이, 이제는 필수가 되어야 한다고 해도 과언이 아닐 겁니다. 비즈니스 요구사항의 단면을 보면 업무적인 요인, 시대적인 배경 등인데, 이 시대적인 배경에는 트랜드+시장+기술+… 이 있을테고요. 그리고 '우리가 이 시대적인 배경 중 '기술'에 한 배를 타고 흐르고 있는가…?' 에 다시 한번 생각해 볼만 합니다.

예전 2010년 6월 1일 REMIX10 세미나에서 여러분에게 말씀 드린 마지막 문구가 다시금 생각이 나네요.

http://www.techdays.co.kr/2010spring/remix10/session3_1.html

   

여러분의 생존전력은 바로 아래에 해답이 있습니다. 여러분들에게 필요한 것, 그리고 그 가능성이 있다고 판단하시면 2011년 생존을 위하여 달려보는 것은 매우 멋진 2011년 한 해가 될 것입니다.

   

.NET 프레임워크

.NET Framework .NET 의 과거와 현재, 그리고 미래
.NET Framework .NET Framework 4.0 의 특징
.NET Framework .NET Framework 4.0 마이그레이션 이슈
.NET Framework .NET 스마트클라이언트 한계 극복 [1]
.NET Framework .NET 스마트클라이언트 한계 극복 [2]
CLR 1. Hello 世界
CLR 2. CLR! CLR! CLR!
CLR 3. MSCorLib & Metadata
CLR 4. Assembly
CLR 5. Assembly - Strongly named assemblies
CLR 6. Assembly - GAC(Global Assembly Cache)
CLR 7. System.Object
CLR 8. System.Object (2)
CLR 닷넷4.0에서 네이티브코드와 매나지드코드의 동거 part 1.
CLR 닷넷4.0에서 네이티브코드와 매나지드코드의 동거 part 2-1.
CLR 닷넷4.0에서 네이티브코드와 매나지드코드의 동거 part 2-2. 네이티브 랩퍼 만들기
Managed Extensibility Framework [MEF] 1. Managed Extensibility Framework 이란?
Managed Extensibility Framework [MEF] 2. Parts 와 Contracts 선언
Managed Extensibility Framework [MEF] 3. Export 선언
Managed Extensibility Framework [MEF] 4. Import 선언
Managed Extensibility Framework [MEF] 5. Catalog 사용
Managed Extensibility Framework [MEF] 6. Lazy Exports
Managed Extensibility Framework [MEF] 7. Exports and Metadata
Managed Extensibility Framework [MEF] 8. Strongly Typed Metadata
Managed Extensibility Framework [MEF] 9. Recomposition
Managed Extensibility Framework [MEF] 10. Querying the CompositionContainer
Managed Extensibility Framework MEF Preview 6 공개
Managed Extensibility Framework MEF 는 Generic Type 을 지원하지 않는다!
Managed Extensibility Framework MEF 에 Generic Type 을 지원하기 위해서..?
Managed Extensibility Framework MEFGeneric 코드 플랙스에 공개합니다.

   

애자일 개발

Agile Development [Better Code]TDD의 개념이 완벽히 녹아 들어간 VSTS 2010
Agile Development [Better Code]Visual Studio 2010 Code Analysis Enhancements - 1.개요
Agile Development [Better Code]Visual Studio 2010 Code Analysis Enhancements - 2. Rule Sets Feature
Agile Development [Better Code]PEX, Automated Whitebox Testing for .NET - 1. 개요
Agile Development [Better Code]Visualize Code Relationships
Agile Development [Testing] TDD (Test-Driven Development-테스트 주도 개발)
Agile Development [Testing] BDD (Behavior-Driven Development?행위 주도 개발)
Agile Development [Testing] Moq.NET (T/B Driven Development)
Agile Development [Better Code]Visual Studio Code Analysis Enhancements - 3. Data Flow Rules and Phoenix Engine
Agile Development 애자일에 대한 고찰
Agile Development [ALM-Test] 1. 왜 단위 테스트를 해야 하는가?
Agile Development [ALM-Test] 2. 한국적인 애자일 모델의 필요성
Agile Development [협업 1] 협업 도구의 통일성과 협업 인프라 관리
Agile Development [ALM-Test] 3. 테스터에 대한 오해와 진실
Agile Development [ALM-Test] 4. 테스터(SDET) 의 역할
Agile Development [ALM-Test] 5. 테스트 계획
Agile Development [ALM-Test] 6. Load Runner vs Visual Studio 2010 테스팅 비교 분석 - http://willstory.tistory.com/4 제공
Agile Development [ALM-Test] 7. TDD vs 계약기반 테스트
Architect Development Architect Development ?
Architect Development 몽당연필과 함께하는 VSTS 2010 모델링 0/4
Architect Development 몽당연필과 함께 하는 VSTS 2010 모델링 1/4
Architect Development Windows Server AppFabric - Velocity 란?
Architect Development WCF=SOA 에 대한 고찰

   

ASP.NET 4.0

ASP.NET 4.0 [ASP.NET 4.0] 1. Core Service - Extensible Output Caching
ASP.NET 4.0 [ASP.NET 4.0] 2. AJAX - Declarative Client Template Rendering
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Dynamic Data(1)
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Dynamic Data(2)
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Web Designer & Deployment
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Core Services
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - New Features in the Microsoft Ajax Library
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Web Forms(1)
ASP.NET 4.0 Razor in WebMatrix
ASP.NET 4.0 Razor in WebMatrix(2) 코드의 재 사용
ASP.NET 4.0 Razor in WebMatrix(3) ? WebMatrix Helper
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Web Forms(2)
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Web Forms(3)
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Web Forms(4)
ASP.NET 4.0 ASP.NET 4 와 Visual Studio 2010 Web Development Beta 2 Overview - Web Forms(5)
ASP.NET MVC M, V 그리고 C의 각방생활(1) - ASP.NET MVC vs ASP.NET WEB FORM
ASP.NET MVC M, V 그리고 C의 각방생활(2) - ASP.NET MVC와 인사나누기
ASP.NET MVC M, V 그리고 C의 각방생활(3) - 초간단 사이트 만들기(1)
ASP.NET MVC M, V 그리고 C의 각방생활(4) - 유효성 검사
ASP.NET MVC M, V 그리고 C의 각방생활(5) - 초간단 사이트 만들기(2)
ASP.NET MVC M, V 그리고 C의 각방생활(6) - 유효성 검사(2)
ASP.NET MVC M, V 그리고 C의 각방생활(7) - 함께 즐겨요~ jQuery
ASP.NET MVC M, V 그리고 C의 각방생활(8) - jQuery와 탭메뉴 그리고 파샬뷰
ASP.NET MVC M, V 그리고 C의 각방생활(9) - jqGrid 사용해보자
ASP.NET MVC M, V 그리고 C의 각방생활(10) - jqGrid를 이용한 paging과 sorting
ASP.NET MVC ASP.NET MVC 3 Preview 1 이 릴리즈 되었습니다.
ASP.NET MVC M, V 그리고 C의 각방생활(11) - jqGrid로 데이터 추가,편집,삭제해보기
ASP.NET MVC M, V 그리고 C의 각방생활(12) - 테스팅 그거, 아무나 하나?
ASP.NET MVC JailBreak From Controllers and Actions
ASP.NET MVC VSTS2010 에서 Razor 코드 하이라이팅 지원하기

   

C# 4.0

C# [C# 4.0] Named and Optional Parameters
C# [C# 4.0] Duck Typing
C# [C# 4.0] New Extension Method "Zip"
C# [C# 4.0] Generic Covariance And Contra Variance
C# Welcome to Dynamic C#(1) - 첫만남.
C# Welcome to Dynamic C#(2) - Wanna be a polyglot.
C# Welcome to Dynamic C#(3) - 마음이 넒어진 C#
C# Welcome to Dynamic C#(4) - 극과극 비교체험.
C# Welcome to Dynamic C#(5) - Return to Dynamic.
C# Welcome to Dynamic C#(6) - Return to Dynamic (2)
C# Welcome to Dynamic C#(7) - 아낌없이 표현해 주는 나무
C# Welcome to Dynamic C#(8) - DLR이 나무를 사랑하는 이유
C# Welcome to dynamic C# 외전(1) - Generate From Usage.
C# Welcome to dynamic C# 외전(2) - Generic Method.
C# Welcome to dynamic C# 외전(3) - 감시하는 자와 감시당하는 자.
C# Welcome to Dynamic C#(9) - Dynamic Returns Again.
C# Welcome to Dynamic C#(10) - Dynamic Returns Again.(2)
C# Welcome to Dynamic C#(11) - The Phantom of The Dynamic
C# Welcome to Dynamic C#(12) - dynamic은 외로운 아이.
C# Welcome to Dynamic C#(13) - 아직도 가야할 길.
C# Welcome to Dynamic C#(14) - 철지난 만우절에 낚여서 파닥파닥.
C# Welcome to Dynamic C#(15) - A/S for dynamic.
C# Welcome to Dynamic C#(16) - dynamic이라도 이건 안되는 거임.
C# Welcome to Dynamic C#(17) - 필요한 말만 하고 삽시다.
C# Welcome to Dynamic C#(18) - 이름을 붙이면서 벌어진 일들.
C# Welcome to Dynamic C#(19) - 위너 고르기.
C# Welcome to Dynamic C#(20) - 어르신과 대화하는 법.
C# Welcome to Dynamic C#(21) - 인덱스의 힘.
C# Welcome to Asynchronous C#(0) - C#의 전설.
C# Parallel Programming [C# 4.0] Parallel Extension - [1] 병렬 처리
C# Parallel Programming [C# 4.0] Parallel Extension - [2] 병렬 처리 아키텍처
C# Parallel Programming [C# 4.0] Parallel Extension - [3] TPL(Task Parallel Library)
C# Parallel Programming Welcome to Parellel world(1) - Here comes a new challenger!
C# Parallel Programming Welcome to Parallel C#(1) - 굿바이, 그리고 안녕~~?
C# Parallel Programming Welcome to Parallel C#(2) - 계속 되는 개념 찾기.
C# Parallel Programming Welcome to Parallel C#(3) - 작업의 기본.
C# Parallel Programming Welcome to Parallel C#(4) - 작업의 기본 Part 2.
C# Parallel Programming Welcome to Parallel C#(5) - 병렬작업에서 예외가 생기면 어케...?
C# Parallel Programming Welcome to Parallel C#(6) - To be continue...
C# Parallel Programming Welcome to Parallel C#(7) - Excuse me.
C# Parallel Programming Welcome to Parallel C#(8) - 취소 쉽게 하기.
C# Parallel Programming Welcome to Parallel C#(9) - 백지장은 맞들지 말엉.
C# Parallel Programming Welcome to Parallel C#(10) - 이보게, 잠깐 뒤를 돌아보지 않겠나.

   

C++/CLI

C++/CLI C++/CLI는 미운 오리새끼 or 백조
C++/CLI .NET에서의 C++/CLI의 의미
C++/CLI [Step 01] 'C++/CLI가 뭐야?'에 답하기 && 가장 많은 프로그래밍 언어로 만드는 프로그램 만들기
C++/CLI [Step 02-1] 클래스(class), 핸들(^), 그리고 구조체(struct)
C++/CLI [Step.02-2] 클래스(class), 핸들(^), 그리고 구조체(struct)
C++/CLI [step.03] 배열
C++/CLI [Step. 04] nullptr, interior_ptr, pin_ptr
C++/CLI [Step. 05] 관리 코드의 array를 비관리 코드에 포인터로 전달
C++/CLI [Step. 06-1] 관리코드의 문자열과 비관리코드의 문자열 변환
C++/CLI [Step. 06-2] 관리코드의 문자열과 비관리코드의 문자열 변환
C++/CLI [Step. 07] 비관리 클래스에서 관리 클래스를 멤버로, 관리 클래스에서 비관리 클래스를 멤버로
C++/CLI [Step. 08] 프로퍼티 ( property )
C++/CLI [Step. 09] 델리게이트 (delegate)
C++/CLI [Step. 10] 이벤트 ( event )
C++/CLI [Step. 11] 열거형( enum )
C++/CLI [Step. 12] for each
C++/CLI [Step. 13] parameter array
C++/CLI [Step. 15] static 생성자, initonly, literal
C++/CLI [Step. 14] 인터페이스 ( interface )
C++/CLI [Step. 16] array 클래스에 non-CLI 오브젝트 사용
C++/CLI [Step. 17] 델리게이트에 비관리 함수를 할당하기 그리고 다음 예고
C++/CLI [Step. 18] 순수 가상 함수
C++/CLI [Step. 19] char* -> 관리코드, 관리코드 -> char*
C++/CLI [Step. 20] 닷넷에서 HalfNetwork를 사용하자 - 1
C++/CLI [Step. 21] 닷넷에서 HalfNetwork를 사용하자 - 2
C++/CLI [Step. 22] 닷넷에서 HalfNetwork를 사용하자 ? 3
C++/CLI [Step. 23] 닷넷에서 HalfNetwork를 사용하자 ? 4
C++/CLI [Step. 24] 닷넷에서 HalfNetwork를 사용하자 ? 5
C++/CLI [Step. 25] 닷넷에서 HalfNetwork를 사용하자 ? 6(마지막)

   

C++0x

C++0x [VC++] 1. 큰 변화가 기대되는 Visual C++( VC++ )
C++0x [VC++] 2. C++0x의 auto
C++0x [VC++] 3. static_assert
C++0x [VC++] 4. 우측 값 참조( RValue Reference ) - 첫 번째
C++0x [VC++] 5. 우측 값 참조( RValue Reference ) ? 두 번째
C++0x [VC++] 6. 우측 값 참조( RValue Reference ) - 세 번째
C++0x [VC++] 7. 우측 값 참조( RValue Reference ) - 네 번째
C++0x [VC++] 8. 우측 값 참조( RValue Reference ) ? 다섯 번째
C++0x [VC++] 9. Lambda ( 람다 ) - 첫 번째
C++0x [VC++] 11. Lambda - 두 번째
C++0x [VC++] 12. Lambda - 세 번째
C++0x [VC++] 13. Lambda - 네 번째
C++0x [VC++] 14. decltype
C++0x 대용량 파일 조작을 위한 C++0x의 변화
C++0x nullptr
C++0x VC++ 10에 구현된 C++0x의 코어 언어 기능들
C++0x C++0x 관련 책 "Visual C++ 10과 C++0x"
C++0x "Visual C++ 10과 C++0x" pdf 파일
C++0x [Plus C++0x] 람다(Lambda) 이야기 (1)
C++0x [Plus C++0x] 람다(Lambda) 이야기 (2)
C++0x [Plus C++0x] 람다(Lambda) 이야기 (3)
C++0x [Plus C++0x] 람다(Lambda) 이야기 (마지막회)
C++0x [STL] 1. What's new in VC++ 2010?
C++0x [STL] 2. unique_ptr (1/2)
C++0x [STL] 3. unique_ptr (2/2)
C++0x [STL] 4. make_shared
C++0x [STL] 5. 에 추가된 새로운 함수들 (1/5)
C++0x [STL] 6. 에 추가된 새로운 함수들 all_of, any_of, none_of (2/5)
C++0x VS2010에서 nullptr의 알려진 버그
C++0x RValue Reference에 의한 STL의 성능향상 테스트
C++0x [STL] 7. 에 추가된 새로운 함수들 copy_if, copy_n, find_if_not (3/5)
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [0]
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [1]
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [2]
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [3]
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [4]
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [5]
VC++ 10 Concurrency Runtime C++ 개발자를 위한 병렬 프로그래밍 동영상 [6/7] 완결!
VC++ 10 Concurrency Runtime PPL task를 이용한 피보나치 수 계산
VC++ 10 Concurrency Runtime 인사 및 Multi Core, Multi Thread...그리고 VC++ 10
VC++ 10 Concurrency Runtime Concurrency Runtime
VC++ 10 Concurrency Runtime Parallel Patterns Library (PPL)
VC++ 10 Concurrency Runtime 양보할 줄 아는 Concurrency Runtime의 event
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - Task
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - 병렬 알고리즘
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - parallel_for 알고리즘
VC++ 10 Concurrency Runtime Asynchronous Agents Library로 Dining Philosophers 문제 해결하기 - 1
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - parallel_for_each 알고리즘
VC++ 10 Concurrency Runtime Asynchronous Agents Library로 Dining Philosophers 문제 해결하기 - 2
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - parallel_invoke
VC++ 10 Concurrency Runtime Asynchronous Agents Library로 Dining Philosophers 문제 해결하기 - 마지막회
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - combinable
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - task group에서의 병렬 작업 취소 - 1
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - task group에서의 병렬 작업 취소 - 2
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - concurrent_vector - 1
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - concurrent_vector - 2
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - concurrent_queue - 1
VC++ 10 Concurrency Runtime Parallel Patterns Library(PPL) - concurrent_queue - 2
VC++ 10 Concurrency Runtime Concurrency Runtime(ConcRT)의 디버그 모드에서 메모리 leak 문제
VC++ 10 Concurrency Runtime Asynchronous Agents Library 소개
VC++ 10 Concurrency Runtime Asynchronous Agents Library - agent. 1 ( 상태 )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? agent. 2 ( 기능 )
VC++ 10 Concurrency Runtime Asynchronous Agents Library - message 전달 함수. 1 ( 전송 )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message 전달 함수. 2 ( 수신 )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 1. ( 인터페이스 )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 2. ( unbounded_buffer )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 3. ( overwrite_buffer & single_assignment )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 4. ( call )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 5. ( transformer )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 6. ( choice )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 7. ( join & multitype_join )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 8. ( timer )
VC++ 10 Concurrency Runtime Concurrency Runtime ? 동기화 객체 1. ( critical_section & reader_writer_lock )
VC++ 10 Concurrency Runtime Concurrency Runtime ? 동기화 객체 2. ( event )
VC++ 10 Concurrency Runtime Asynchronous Agents Library ? message block 9. ( custom )
VC++ 10 Concurrency Runtime Concurrency Runtime - 만델브로트 프랙탈 ( Mandelbrot Fractal ) 예제
VC++ 10 Concurrency Runtime Concurrency Runtime ? Task Scheduler 1. ( Scheduler )
VC++ 10 Concurrency Runtime Concurrency Runtime ? Task Scheduler 2. ( SchedulerPolicy )
VC++ 10 Concurrency Runtime Concurrency Runtime ? Task Scheduler 3. ( ScheduleGroup )
VC++ 10 Concurrency Runtime Concurrency Runtime ? Task Scheduler 4. ( ScheduleTask )
VC++ 10 Concurrency Runtime Concurrency Runtime ? Task Scheduler 5. ( Context blocking )
Visual C++ 10 About Visual C++ 10
Visual C++ 10 디버깅 모드에서 역어셈블리 코드 보기
Visual C++ 10 Visual C++ 10의 변화
Visual C++ 10 [Upgrade to VC++ 10] _WIN32_WINNT 버전 문제
Visual C++ 10 VS2010 C++ 프로젝트의 디렉토리 설정

   

클라우드 컴퓨팅

Cloud 구름 속의 미래 : Windows® Azure™ Platform [1]
Cloud SQL Azure - CTP1
Cloud SQL Azure 알아보기 (1) - 데이터베이스 개체 생성
Cloud SQL Azure 알아보기(2) ? 데이터베이스 스키마 마이그레이션, 데이터 전송
Cloud 구름 속의 미래 : Windows® Azure™ Platform [2]
Cloud SQL Azure 사용 시 주의점(1) - 방화벽 설정
Cloud SQL Azure 알아보기(3) ?SQL Server 2008 R2 Nov CTP
Cloud SQL Azure 알아보기(4) ? SQL Azure Cloud App
Cloud SQL Azure 알아보기 (5)- SQL Azure 이점과 T-SQL 지원
Cloud [MS@클라우드컨퍼런스] MS 클라우드 기술과 플랫폼
Cloud 클라우드 기반 분산 컴퓨팅을 위한 AppFabric (1) : 아하! App 분산!
Cloud Hello Windows Azure / Windows Azure Platform의 이해
Cloud Hello Windows Azure / Gallery of 'Powered by Windows Azure Platform'
Cloud Hello Windows Azure / Windows Azure 개발 환경의 구축
Cloud Hello Windows Azure / Understanding Windows Azure Development Process
Cloud Hello Windows Azure / Windows Azure Tools for Visual Studio 1.2 출시
Cloud Hello Windows Azure / Windows Azure Platform 최신 소식 업데이트 (종합) [수정]
Cloud Hello Windows Azure / Twitter 스타일 방명록 만들기 #1
Cloud Windows Azure Update: Microsoft Project Code-Named "Houston" CTP 1
Cloud SQL Azure와 Excel 2010의 PowerPivot
Cloud Hello Windows Azure / Twitter 스타일 방명록 만들기 #2
Cloud Windows Azure Update: CloudStorageAccount 클래스 사용 시 주의 사항
Cloud SQL Azure Update: Dynamic Management View
Cloud Hello Windows Azure / Twitter 스타일 방명록 만들기 #3
Cloud Windows Azure Update: myAzureStorage
Cloud SQL Azure 와 SQL Reporting Service
Cloud Windows Azure Update: Windows Azure CDN의 활용
Cloud [작업 중] Windows Azure Update: Adaptive Smooth Streaming with Windows Azure Storage

   

게임 개발

Direct3d Mobile [d3dm 기초] 1. wm6.x 개발환경 세팅
Direct3d Mobile .NET 기반에서 공개소스 게임엔진 포팅하기
DirectX 11 [JumpToDX11-1] 사라진 Direct3D 오브젝트를 찾아서...
DirectX 11 [JumpToDX11-2]DeviceContext...넌 누구냣!!
DirectX 11 [JumpToDX11-3] Feature Level
DirectX 11 [JumpToDX11-4] ID3D11View
DirectX 11 [DX11_#1]D3D Buffer( 1 / 2 )
DirectX 11 [DX11_#2]D3D Buffer( 2 / 2 )
DirectX 11 [DX11_#3]기본적인 설정
DirectX 11 [JumpToDX11-5] 새로운 시대를 여는 DirectX11...
DirectX 11 [JumpToDX11-6] 커맨드(Command)...
DirectX 11 [DX11_#4]텍스트, 버튼 출력
DirectX 11 [JumpToDX11-7] 간편해진 리소스 처리.
DirectX 11 [JumpToDX11-8] Deferred Contexts
DirectX 11 [JumpToDX11-9] Multi-threaded Rendering 을 위한 API.
DirectX 11 [JumpToDX11-10] GPGPU 를 위한 DirectCompute.
DirectX 11 [JumpToDX11-11] DirectCompute 를 위한 한걸음!
DirectX 11 [JumpToDX11-12] DirectCompute 의 절차.
DirectX 11 [JumpToDX11-13] Tessellation 등장.
DirectX 11 [DX11_#5]DirectX11의 활용 사례(1/3)
DirectX 11 [JumpToDX11-14] DirectX9 세대의 테셀레이션( ID3DXPatchMesh 편 )
DirectX 11 [JumpToDX11-15] DirectX9 세대의 테셀레이션( IDirect3DDevice9::DrawXXXPatch편 )
DirectX 11 [알콜코더의 미리 배워보는 DirectX 11 - 입문편] 0. 누구를 위한 연재인가
DirectX 11 [알콜코더의 미리 배워보는 DirectX11-입문편] 1.튜터리얼 01 : 다이렉트 3D 기초 #1
DirectX 11 [알콜코더의 미리 배워보는 DirectX11-입문편] 1.튜터리얼 01 : 다이렉트 3D 기초 #2
DirectX 11 [JumpToDX11-16] DirectX9 세대의 테셀레이션( D3DXTessellateNPatches편 )
DirectX 11 [알콜코더의 미리 배워보는 DX11 ? 입문편] DX11에서 무엇이 추가되었나?
DirectX 11 [JumpToDX11-17] DirectX9 세대의 테셀레이션( ATI 라이브러리편 )
DirectX 11 [발표자료] 예제로 느껴보는 다이렉트X 11의 매력
DirectX 11 [JumpToDX11-18] DirectX11의 테셀레이션 ( 테셀레이션을 위한 하드웨어의 등장편 )
DirectX 11 [알콜코더의 미리 배워보는DX11 입문편] DirectX 11의 특징들
DirectX 11 [알콜코더의 미리배워보는 DX11-입문편] 1. 튜터리얼01 : 디바이스와 스왑체인의 생성

   

F#

F# Welcome to F#(1) - 첫만남.
F# Welcome to F#(2) - 두번째 만남.
F# Welcome to F#(3) - 사소한 탐색전.
F# Welcome to F#(4) - 과거와 배경을 좀 더 알고싶어.
F# Welcome to F#(5) - 아주 조금씩 심화되는 탐색전.
F# Welcome to F#(6) - 비교본능.
F# Welcome to F#(7) - 클리프 행어.
F# Welcome to F#(8) - 은총알과 엄친아.
F# Welcome to F#(9) - 메이져 데뷰.
F# Welcome to F#(10) - 인도음식 카레.....?
F# Welcome to F#(11) - 차별을 권장하는 언어인거임?!?!
F# Welcome to F#(12) - 공동작업 좋치아니항가

   

MFC

MFC [MFC] 리스타트 매니저(Restart Manager) - (1/3) : 기능 소개
MFC [MFC] 리스타트 매니저(Restart Manager) - (2/3) : 사용하기
MFC [MFC] 리스타트 매니저(Restart Manager) - (3/3) : 활용하기
MFC [MFC] 태스크 대화상자(Task Dialog) - (1/3) : 기능 소개
MFC [MFC] 태스크 대화상자(Task Dialog) - (2/3) : 사용하기
MFC [MFC] 태스크 대화상자(Task Dialog) - (3/3) : 활용하기
MFC [MFC] 태스크 대화상자(Task Dialog) - 예제 코드 올립니다.
MFC [MFC/윈도우 7 멀티터치] #2 : 제스처(gesture)를 이용한 구현()
MFC [MFC/윈도우 7 멀티터치] #3 : 제스처(gesture)를 이용한 구현()
MFC [MFC/윈도우 7 멀티터치] #4 : WM_TOUCH 메세지를 이용한 구현()
MFC [MFC/윈도우 7 멀티터치] #5 : WM_TOUCH 메세지를 이용한 구현()
MFC [MFC/윈도우 7 멀티터치] #6 : 예제 코드 올립니다

   

RIA

RIA Expression Blend3 preview - 1.인터페이스
RIA Expression Blend3 preview - 2. Photoshop import
RIA Silverlight 3 & Blend 3 RC 공개!!!
RIA Silverlight 4 Beta 공개
RIA .Net Ria Service + IIS6 + Silverlight 4 Troubleshooting!!
RIA 실버라이트 비하인드 코드에서 바인딩하기.
RIA .Net Ria Service 와 Entities 그리고 Stored Procedure 하다가 생긴일..
RIA 실버라이트 프로그래머가 할 수 있는 최소한의 블랜드 디자이너를 위한 배려

   

SharePoint 2010

SharePoint 2010 Visual Studio 2010 에게 바란다 - SharePoint 14 Development
SharePoint 2010 SharePoint 2010 Overview
SharePoint 2010 SharePoint 2010 개발 환경 구성
SharePoint 2010 SharePoint 2010 개발 환경- Hello World 웹 파트 생성 및 배포하기
SharePoint 2010 SharePoint 2010 Web Part 생성
SharePoint 2010 SharePoint 2010 Visual Web Part
SharePoint 2010 SharePoint 2010 Feature
SharePoint 2010 SharePoint 2010 Event Receiver
SharePoint 2010 SharePoint 2010 데이터 기술
SharePoint 2010 SharePoint 2010 Server Object Model
SharePoint 2010 Visual Studio 2010 출시에 따른 SharePoint Developer Tools
SharePoint 2010 SharePoint 2010 LINQ to SharePoint
SharePoint 2010 Client Object Model - .NET
SharePoint 2010 Client Object Model ? Silverlight (1)
SharePoint 2010 Client Object Model ? Silverlight (2)
SharePoint 2010 Client Object Model - Javascript(1)
SharePoint 2010 Client Object Model - Javascript(2)
SharePoint 2010 Client Object Model ? 정리
SharePoint 2010 SharePoint 2010 개발환경 구축 가이드
SharePoint 2010 REST -.NET
SharePoint 2010 REST ? Silverlight
SharePoint 2010 REST - jQuery
SharePoint 2010 SharePoint 2010 프로젝트 디버깅
SharePoint 2010 SharePoint 2010 Developer Dashboard

   

Team Foundation Server

Team Foundation Server Visual Studio Team System 2010 (CTP10) - 작업 항목 링크
Team Foundation Server TFS 2010 설치 하기
Team Foundation Server TFS 2010 Build Service 설치
Team Foundation Server TFS 2010 설치 과정 중에 TF255040 문제
Team Foundation Server Visual Studio 2010을 활용한 ALM (1-5) - ALM 이란 무엇인가
Team Foundation Server Team Foundation 트러블 슈팅 가이드
Team Foundation Server Visual Studio Team Foundation Server 2010 를 설치해보자
Team Foundation Server Visual Studio Team Foundation Server 2010 설치 전 할일
Team Foundation Server VS TFS 2010 설치편 - 설치전 IIS, .NET 설치
Team Foundation Server VS TFS 2010 설치편 - 설치 시작
Team Foundation Server VS TFS 2010 구성편 - 설치 후 TFS 구성으로 점심 얻어먹기 편
Team Foundation Server VS TFS 2010 사용편 - SourceSafe? 버려~
Team Foundation Server [HowTo] Team Foundation Server 의 로컬 매핑 캐시 제거하기
Team Foundation Server [HowTo] SharePoint 2010 Beta 깨끗하게 제거하기
Team Foundation Server [HowTo] SCVMM 의 Install Virtual Guest Service 작업 중 2941 오류
Team Foundation Server [HowTo] TFS2010 의 Tfs_Analysis 웨어하우스 데이터베이스가 망가졌을 경우
Team Foundation Server [PPT] 테스트와 가상화의 만남 - 테스트 가상화(Lab Management)
Team Foundation Server Team Foundation Server 2010으로 업그레이드, 마이그레이션, 동기화
Team Foundation Server Visual Source Safe 사용자를 위한 TFS2010 시리즈

   

Visual Studio 2010

Visual Studio 2010 Visual Studio Team System 2010 CTP 만료 해결하기
Visual Studio 2010 Visual Studio 2010 의 특징
Visual Studio 2010 Visual Studio 2010 내부 빌드 최신 동영상: C# 4.0 Language + IDE + WPF Shell + Editor
Visual Studio 2010 Visual Studio 2010 & .NET 4.0 참고 자료들
Visual Studio 2010 Visual Studio 2010 Beta 1 설치부터 살펴보기
Visual Studio 2010 멀티 모니터 사용
Visual Studio 2010 Visual Studio 2010 Beta 2 출시
Visual Studio 2010 Visual Studio 2010 Beta 2 설치 미리 보기
Visual Studio 2010 VS 2010 Beta 2 설치 과정에서 Silverlight SDK 문제
Visual Studio 2010 VS2010 베타2의 WPF & Silverlight 디자이너 성능 향상 팁
Visual Studio 2010 VS 2010 기능 소개 01 인텔리 센스 기능의 변화
Visual Studio 2010 Visual Studio 2010과 Blend Preview for .NET 4 통합 문제
Visual Studio 2010 VS 2010 기능 소개 02 - IDE의 기능 추가
Visual Studio 2010 VS 2010 기능 소개 03 - IDE의 변화
Visual Studio 2010 Visual Studio 2010 출시 일정
Visual Studio 2010 VS 2010 기능소개 04 - Visual C#&VB 개발자 IDE Tips & Tricks 첫번째
Visual Studio 2010 VS 2010 기능소개 05 - Visual C#&VB 개발자 IDE Tips & Tricks 두번째
Visual Studio 2010 Visual Studio 2010 RC 공개 임박!
Visual Studio 2010 Visual Studio 2010 RC 공개
Visual Studio 2010 C#에서 IntelliSense가 동작하지 않을 때 문제 해결 방법
Visual Studio 2010 똑똑한 검색을 지원하는 VSTS 2010의 "Navigate To" 검색
Visual Studio 2010 실버라이트4 RC와 블렌드 4 베타 공개
Visual Studio 2010 윈도우폰 7 개발환경 공개
Visual Studio 2010 Visual Studio 2010! 나랑 놀아보자 ? 기본편 (2회) - VS IDE
Visual Studio 2010 Visual Studio 2010! 나랑 놀아보자 ? 기본편 (3회) - Box Selection
Visual Studio 2010 Visual Studio 2010! 나랑 놀아보자 ? 기본편 (4회) - Call Hierarchy
Visual Studio 2010 Visual Studio 2010 출시와 완소 정보 총 정리
Visual Studio 2010 Visual Studio 2010 e-book 무료로 다운로드 하세요
Visual Studio 2010 Visual Studio 2010! 나랑 놀아보자 ? 기본편 (5회) - Navigate To
Visual Studio 2010 Visual Studio 2010 RTM 추가 완소 정보
Visual Studio 2010 Visual Studio 2010! 나랑 놀아보자 ? 기본편 (6회) - Generate from Usage
Visual Studio 2010 VS 2010 기능소개 05 - Visual C#&VB 개발자 IDE Tips & Tricks 두번째
Visual Studio 2010 Visual Studio 2010, 2008, 2005 에서 .NET Framework 1.1 개발하기
Visual Studio 2010 Visual Studio 2010, 2008, 2005 에서 .NET Framework 1.1 개발하기
Visual Studio 2010 Just for fun! / Visual Studio Express Edition
Visual Studio 2010 왜 Visual Studio 2010 이여야 하는가?
Visual Studio 2010 Visual Studio 2010 최신 PDF 자료를 MSDN 에서 다운로드 받으세요
Visual Studio 2010 Just for fun! / DreamSpark는 대학생 여러분을 위한 솔루션입니다.
Visual Studio 2010 VS2008 을 VS2010 에서 동시에 개발하기
Visual Studio 2010 VS2008 과 VS2010 동시에 개발하기 : 테스트 프로젝트가 포함 될 경우
Visual Studio 2010 Introducing Visual Studio LightSwitch! - Enjoy your development
Visual Studio 2010 Visual Studio Hotfix List
Visual Studio 2010 곧 다가올 기술, Microsoft Research [1/2]
Visual Studio 2010 곧 다가올 기술, Microsoft Research [2/2]
Visual Studio 2010 Visual Studio 31 (1) - 시작, 그리고 Intellisense
Visual Studio 2010 Visual Studio 31 (2) - Startpage
Visual Studio 2010 Visual Studio 31 (3) - Temp Project
Visual Studio 2010 Visual Studio 31 (4.1) - Visual Studio 2010 Productivity Power Tools, Part 1
VIsual Studio Extensibility [Blueprints] S+S Blueprints
VIsual Studio Extensibility Visual Studio 2010 SDK 와 Readme
VIsual Studio Extensibility Visual Studio 2010 Extension Manager
VIsual Studio Extensibility [VSIX] 1. What is different from before version?
VIsual Studio Extensibility [VSIX] 2-1. How to start VSIX programming
VIsual Studio Extensibility [VSIX] 2-2. How to start VSIX programming
VIsual Studio Extensibility MousePresentationTracker - MEF 세미나 예제
VIsual Studio Extensibility [VSX] 1. Visual Studio Extensibility,, 그 시작
VIsual Studio Extensibility Visual Studio 2010 확장 모델인 VSIX 버그
VIsual Studio Extensibility VSGesture v2.0 for VS2010 is now available for download

   

우리 블로그 소식

VSTS 2010 팀 블로그 Visual Studio Team System 2010 공식 팀 블로그 맴버소개
VSTS 2010 팀 블로그 Visual Studio Team System 2010 팀 블로그 소개
VSTS 2010 팀 블로그 VSTS 2010 팀 블로그/스터디 맴버를 모집합니다.
VSTS 2010 팀 블로그 VSTS 2010 팀 맴버 지원을 마감합니다
VSTS 2010 팀 블로그 Visual Studio Team System 2010 Beta 1 공개
VSTS 2010 팀 블로그 [MSDN 주간 세미나] 발표자료 / .NET Framework와 Visual Studio : 현재와 미래 1, 2
VSTS 2010 팀 블로그 VSTS 2010 팀 3분기 맴버 모집
VSTS 2010 팀 블로그 VSTS 2010 팀 세미나 동영상 - 6월 10일
VSTS 2010 팀 블로그 VSTS 2010 팀 맴버 추가 모집
VSTS 2010 팀 블로그 VSTS 2010 팀 트위터를 오픈하였습니다.
VSTS 2010 팀 블로그 TECH DAY 2009 행사 오픈!!!
VSTS 2010 팀 블로그 VSTS 2010 공식 블로그 Viva 2010팀 멤버 추가 모집 공고
VSTS 2010 팀 블로그 [세미나] 차세대 응용 프로그램 구축 방법 및 사례 소개 세미나
VSTS 2010 팀 블로그 Visual Studio 2010 팀에서 팀원 모집합니다.
VSTS 2010 팀 블로그 한국 Visual Studio 2010 사용자를 위한 트위터 커뮤니케이션
VSTS 2010 팀 블로그 C++ 개발자와 함께하는 Visual Studio 2010
VSTS 2010 팀 블로그 [무료 세미나] ReMIX 10
VSTS 2010 팀 블로그 6월 1일, 대한민국 웹 컨퍼런스의 지존 ReMIX 10가 개최됩니다!
VSTS 2010 팀 블로그 REMIX10 의 VS2010 팀 후기
VSTS 2010 팀 블로그 6월 1일, REMIX10 세미나 세션 공개
VSTS 2010 팀 블로그 [세미나] Visual Studio Camp #1
VSTS 2010 팀 블로그 [세미나 후기] Visual Studio Camp #1
VSTS 2010 팀 블로그 [세미나 발표 자료] Visual Studio Camp #1
VSTS 2010 팀 블로그 [세미나] Visual Studio Seminar #1 / 2010년 9월 28일
VSTS 2010 팀 블로그 9월 13일에 개최하는 KGC에서 강연을 합니다.
VSTS 2010 팀 블로그 KGC10에서의 VS2010 스터디 팀의 활약 모습
VSTS 2010 팀 블로그 [VSKOREA] Visual Studio 2010 정보가 한 눈에…
VSTS 2010 팀 블로그 [세미나 후기] Visual Studio Seminar #1
VSTS 2010 팀 블로그 [세미나 발표 자료] Visual Studio Seminar #1
VSTS 2010 팀 블로그 [후기] C++ & 게임 개발자를 위한 개발 생산성 및 퍼포먼스 향상 전략 세미나

   

WCF

WCF WCF란 무엇인가?
WCF 기본 WCF 프로그래밍 - 첫 WCF 서비스 만들기
WCF 기본 WCF 프로그래밍 - 첫 WCF 서비스 만들기 2
WCF WCF의 기본 - Service Contract
WCF WCF의 기본 - Data Contract
WCF WCF 서비스의 동시성(Concurrency) - 1
WCF WCF 서비스의 동시성(Concurrency) - 2
WCF WCF - Serialization
WCF WCF Hosting - WAS를 이용한 Hosting
WCF 도메인을 여러개 등록했을때 WCF 서비스를 호스팅 할수 없어요 ㅠㅠ
WCF WCF Hosting(2) - ASP.NET 호환성(Compatibility)
WCF WCF Hosting (3) - Windows Service를 이용한 Hosting
WCF WCF Security (1) - SSL을 이용한 전송계층에서의 보안 설정
WCF WCF Security (2) - 전송 계층에서의 메세지 인증 (사용자 지정 인증)
WCF WCF Troubleshooting (1)
WCF WCF Service Configuration Editor
WCF WCF Troubleshooting (2)


Windows Azure Update: Windows Azure CDN의 활용

Cloud 2010. 10. 1. 22:00 Posted by 알 수 없는 사용자

공지: 티스토리 편집기 조작 상의 문제로 완성되지 않은 글이 일찍 노출되는 문제가 있었습니다. 다음부터는 이러한 일이 없도록 하겠습니다. 불편을 드려서 대단히 죄송합니다.

안녕하세요. Visual C# MVP 남정현입니다. 지난달 13일부터 15일까지 성황리에 개최된 Korea Games Conference에서 보여주신 Social Game and Windows Azure Platform 세션에서, Windows Azure CDN에 관하여 말씀을 드린 부분이 있었습니다. 이번 아티클에서는 Windows Azure CDN의 구체적인 내용을 설명하고, Windows Azure CDN을 어떤 방법으로 활용할 수 있는지에 대한 내용을 소개합니다. 최근에 Windows Azure CDN도 Amazon Web Service CDN과 마찬가지로 서울을 경유하는 회선을 추가하여 비약적인 속도 발전이 있었기 때문에, 정식 출시가 이루어지지는 않았지만 미리 알아두시면 상당히 유용한 정보가 될 것이라 봅니다. :-)

CDN이란 무엇인가?

CDN은 일정한 크기의 파일들을 지역별로 Mirroring하여 동시에 많은 사용자가 같은 파일을 다운로드하려고 하는 상황에서도 안정적으로 파일 다운로드 서비스를 제공할 수 있도록 도와주는 서비스로, 인터넷 사용자의 비약적인 증가와 더불어서 CDN 서비스에 대한 수요가 증가하였습니다. 일반적으로 CDN 서비스는 대화형 웹 인터페이스 (CGI)를 경유하지 않고 정적인 컨텐츠를 퍼다나르기 위한 방법으로 많이 사용되며, 이미지, 동영상, 다소 크기가 큰 클라이언트용 설치 파일과 같이 "자료"의 성격을 띄는 데이터들을 위한 것이 일반적입니다.

Windows Azure CDN에 대한 소개

이전 방명록 샘플 강좌에서 파일을 업로드하기 위하여 사용한 저장 공간인 Windows Azure Storage에 최근에 CDN 서비스가 추가되었습니다. Windows Azure Storage에서 CDN을 사용하는 것은 별도의 과금이 이루어지는 서비스이며, 기본적으로 제공되는 Storage Service 주소와는 별개로 CDN 서비스만을 위한 전용 도메인이 구분되어있습니다. 물론 Storage 서비스와 마찬가지로 CDN 서비스도 Custom Domain 구성이 가능합니다.

Windows Azure CDN의 동작 원리

Windows Azure CDN은 Windows Azure Storage의 컨텐츠를 기준으로 만들어지는 서비스로, 여러분이 수집하거나 배포하기 위하여 Storage에 올려놓은 자료들 중에서도 "Public Access" 퍼미션이 지정된 컨테이너내의 Block BLOB들을 자동으로 검색하여 CDN 배포 에이전트가 일정 주기로 미러링을 수행합니다. 이렇게 미러링된 파일은 지역별로 제일 빠른 서버에 의하여 클라이언트로 다운로드될 수 있도록 자동 구성됩니다.

참고로, 특별히 Block BLOB이라고 언급한 까닭은, Windows Azure Storage에서 취급할 수 있는 BLOB이 두 종류가 있기 때문인데, 크기가 매우 크기 때문에 한번에 취급할 수 없어서 마치 Win32의 메모리 맵 처럼 부분별로 나누어서 데이터를 저장하거나 관리해야하는 거대한 파일을 위한 Paged BLOB은 미러링 대상으로 적합하지 않기 때문입니다.

Windows Azure CDN의 과금 정책

Windows Azure CDN의 과금 정책은 2010년 10월 현재 다음과 같이 공시되어있습니다. (출처: http://www.microsoft.com/windowsazure/offers/popup/popup.aspx?lang=en&locale=en-US&offer=MS-AZR-0003P)

  • $0.15 per GB for data transfers from European and North American locations
  • $0.20 per GB for data transfers from other locations
  • $0.01 per 10,000 transactions
  • 그리고 CDN 서비스의 사용을 위하여 전제가 되는 Storage 서비스의 요금은 다음과 같습니다.

  • $0.15 per GB stored per month
  • $0.01 per 10,000 storage transactions
  • 위의 요금들을 기준으로 하였을 때, 동아시아 지역의 데이터 센터를 이용하도록 구매하였을 경우, 매 달 과금되는 요금은 1GB 당 0.15$이고, 아시아 내에서의 트래픽이 많이 발생할 것이므로 전송량 1GB당 0.2$가 과금될 것이며, CDN 서비스를 통하여 매 1만건의 트랜잭션이 발생할 때 마다 0.01$가 과금될 것입니다.

    이러한 기준으로 볼 때, 한달에 30MB 정도의 파일 5개가 각각 기간 내 누적 다운로드 회수가 10000여회 정도 된다고 가정하면, 약 1464GB의 트래픽이 발생한 것으로 볼 수 있고 금액은 약 292.81$, 대미환율이 1200원이라고 가정하였을 때 한달 35만원 정도의 비용이 과금되는 셈입니다. 어떤 CDN 서비스를 사용하는지에 따라서 이 가격에 이점이나 단점이 제각기 있을 수 있지만 확장성이나 사용 편리성 관점에서 보았을 때 그리 나쁘지 않은 가격대일 수 있습니다.

    결론

    Windows Azure CDN은 다른 Windows Azure 서비스와 마찬가지로 프로그래밍 방식으로 제어가 가능한 범위 안에 있는 솔루션입니다. 기존의 CDN으로 충족되지 않는 기능성을 모두 포함하면서도, World-wide class의 서비스를 제공할 수 있으므로 사업 영역을 확장하거나, 초기 투자 비용을 적게 만들 수 있는 방안으로서는 매우 이상적인 서비스입니다. 최근에는 대한민국 서울을 경유하는 회선도 추가되어 서비스 수준이 더욱 높아졌습니다.

    이는 동영상 서비스 제공, 자료실 운영과 같은 일반 사용자를 위한 서비스 제공에도 대응이 가능하면서, 좀 더 복잡한 요구 사항을 만족시킬 수 있는 방법을 제공함을 뜻합니다. 사용한 만큼 돈을 지불하는 과금 모델이므로 호스팅과는 달리 사용량이 적을 때에는 적은 운영 비용을 유지하는 것도 가능합니다.

    CDN 서비스의 특성상 기술적으로 이해하거나 학습해야 할 내용이 많은 것은 아니나 성공적으로 비즈니스를 시작할 수 있도록 도움을 주는데에는 그 가치가 충분하다고 생각되는 바 Windows Azure CDN 서비스의 배경과 특징을 설명하는 내용을 이번 시간에다루었습니다.

    감사합니다. :-)

    'Cloud' 카테고리의 다른 글

    SQL Azure Update (2)  (0) 2011.02.11
    SQL Azure Update (1)  (0) 2011.01.28
    SQL Azure 와 SQL Reporting Service  (0) 2010.09.30
    Windows Azure Update: myAzureStorage  (0) 2010.09.06
    Hello Windows Azure / Twitter 스타일 방명록 만들기 #3  (0) 2010.09.04

    SQL Azure 와 SQL Reporting Service

    Cloud 2010. 9. 30. 22:24 Posted by 알 수 없는 사용자

    현재 SQL Azure에서는 Business Intelligence 에 대한 내용을 제공해주고 있지 않지만 향후에는 지원이 될 예정입니다. SQL Azure를 활용하는 방법 중의 하나로 SQL Reporting Service에서 SQL Azure를 이용하는 방법을 다루어보도록 하겠습니다.

    사실 데이터 원본에 대한 내용이 SQL Azure 이며 나머지 보고서를 작성하는 것은 별 다른 차이가 없습니다.

    보고서 서버 프로젝트를 생성해서 보고서를 추가하고 데이터 원본을 생성합니다.

    데이터 원본의 서버이름은 SQL Azure의 서버 이름을 입력하고 SQL 계정과 비밀번호를 입력하고 데이터베이스 이름은 직접 입력합니다.


    SQL Azure
    에 있는 테이블과 뷰로 보고서 집합을 생성합니다.

    여기서는 Category, SubCategory, Product 테이블에 대한 뷰를 생성하도록 하겠습니다.

    쿼리 디자이너를 통해 테이블을 추가하려고 하면 아래와 같은 메시지를 볼 수 있습니다.

    그래서 직접 쿼리문을 작성하거나 SQL Server Management Studio에서 쿼리문을 작성해서 데이터 집합을 생성합니다.

    쿼리문은 아래와 같습니다.

    아래와 같이 보고서를 디자인합니다.

    미리보기를 클릭해서 결과를 확인합니다.


    현재의 SQL Azure Business Intelligence를 제공하고 있지 않아 SQL Azure를 활용하는 방법으로 SQL Server Reporting Service에서 SQL Azure 데이터를 표시하는 것을 다루어 보았습니다.


    SQL Azure Update: Dynamic Management View

    Cloud 2010. 8. 25. 19:30 Posted by 알 수 없는 사용자

    안녕하세요. Visual C# MVP 남정현입니다. 가을을 재촉하는 비가 여기저기 내리면서 무더웠던 날씨가 한풀 꺾이는듯 합니다. 오늘은 Windows Azure Update와 Side-by-Side로 SQL Azure Update에 대한 이야기를 진행해보고자 합니다. :-)

    SQL Azure의 주요 기능이 우리가 생각하는것과 같이 상당한 수준에 있기 때문이거나, SQL Azure에 대해서 아직까지 많은 내용이 전달되지 않았기 때문일 수 있지만 SQL Azure 만의 고유한 기능을 다루는 섹션도 필요하다고 생각하여 진행하고 있으니 역시 많은 Feedback을 부탁드립니다.

    Dynamic Management View란?

    Dynamic Management View (이하 DMV)는 SQL Azure Team Blog에서 SQL Azure Service Update 1과 함께 제공한 새로운 기능으로, 이 글을 작성하는 현 시점에서는 매우 요긴하게 사용될 수 있고, 데이터베이스에 대한 정확한 사용량 추이를 파악할 수 있는데 도움을 주는 관리 API의 일종입니다. DMV는 시스템 뷰의 일종으로 다음과 같이 제공됩니다.

    • sys.dm_exec_connections: 최근에 접속한 모든 클라이언트들의 정보들을 조회합니다.
    • sys.dm_exec_requests: 최근에 실행된 Query의 상태와 실행 정보들을 조회합니다.
    • sys.dm_exec_sessions: 현재 연결된 클라이언트 및 세션에 대한 정보들을 조회합니다.
    • sys.dm_tran_database_transactions: 데이터베이스 수준의 트랜잭션들에 대한 정보를 조회합니다.
    • sys.dm_tran_active_transactions: 현재 활성화된 트랜잭션들에 대한 정보를 조회합니다.
    • sys.dm_db_partition_stats: 데이터베이스의 파티션 상태 및 각 파티션 별 사용량 정보를 조회합니다.

    DMV의 데이터를 살펴보는 방법

    DMV의 데이터는 관리를 위한 목적으로 활용하기에 알맞습니다. 또한, 데이터베이스 관리자가 별도의 응용프로그램을 사용하지 않고 손쉽게 상태를 파악할 수 있기 위해서는 Codename: Houston과 같은 SQL Azure 전용 데이터베이스 관리 도구를 활용하는 것이 편리합니다. (이 도구를 사용하면 별도의 방화벽 설정을 추가함으로 인해서 발생할 수 있는 노출 영역의 확대를 회피할 수 있기 때문입니다.)

    Codename: Houston에 관한 좀 더 자세한 정보는 2010/07/29 - [Cloud] - Windows Azure Update: Microsoft Project Code-Named "Houston" CTP 1 에서 확인하실 수 있으며, 현재 이 도구는 CTP 단계에 있으므로 실무에 곧바로 적용하여 활용하는 것에는 다소 불편함이 따를 수 있습니다. (관리 목적으로 활용할 때 제일 빈번하게 사용되는 결과 집합의 내보내기 기능이 아직 지원되지 않습니다.)

    DMV 데이터 조회 예시

    그 이외에 Service Update 1에서 개선된 부분들

    Service Update 1 이후부터는 이미 만들어진 데이터베이스의 상품 크기를 동적으로 관리 차원에서 변동을 줄 수 있습니다. 다음의 Query를 관리자 권한으로 SQL Azure Database에 접속한 후 실행하면 원하는 데이터베이스 크기를 설정하고 그 이후부터 변경된 데이터베이스 인스턴스 크기에 따른 요금을 자동으로 과금받을 수 있습니다.

    ALTER DATABASE database_name
    {
        MODIFY (MAXSIZE = {1 | 5 | 10 | 20 | 30 | 40 | 50} GB)
    }

    그리고 SQL Azure에서 세션 타임 아웃은 현재 30분으로 연장된 상태이며, 기본적으로 SQL Server 2008 R2에서 제공하는 장기 실행 트랜잭션 (혹은 교차 잠금 상태의 트랜잭션)을 찾아내서 정리하는 알고리즘이 좀 더 최적화되어있다는 것이 Service Update 1 이후의 변경 사항임을 알아두시면 유용할 것 같습니다.

    감사합니다. :-)

    SQL Azure와 Excel 2010의 PowerPivot

    Cloud 2010. 8. 2. 17:12 Posted by 알 수 없는 사용자

    Excel 2010 PowerPivot은 별도의 Add-in을 설치하면 Excel 2010에서 사용할 수 있는 도구입니다.

    아래의 사이트에서 다음과 같은 내용을 얘기하고 있습니다.

    http://www.powerpivot.co.kr/

     

    PowerPivot for Excel은 많은 사용자들을 확보하고 있는 Microsoft Excel 내에서 가히 독보적인 연산 능력을 직접 발휘할 수 있도록 하는 데이터 분석 도구입니다. Office와 동일한 사용자 인터페이스, 피벗 테이블 및 피벗 차트 보기, 슬라이서 등과 같이 이미 잘 알고 있는 Excel 기능을 사용하여 손쉽게 데이터를 분석할 수 있습니다.

     

    제가 말씀드릴 내용은 SQL Azure의 데이터를 Excel 2010 PowerPivot에서도 문제없이 접근할 수 있다는 것입니다.

    아래 그림은 PowerPivot 창의 화면입니다.

    *PowerPivot 탭은 PowerPivot을 설치해야 나옵니다.

     

    [외부 데이터 가져오기] 그룹의 기타 원본을 클릭하면 아래와 같이 SQL Azure에 대한 내용을 볼 수 있습니다.



    SQL Azure를 선택하고 서버이름과 인증 정보, 데이터베이스를 선택합니다.

    (SQL Azure의 방화벽이 설정되어 있어야 연결할 수 있습니다.)



    SQL Azure에 있는 테이블을 선택합니다. 여기서는 CategorySubCategory 를 선택합니다. 그리고 클라우드가 아닌 로컬 네트워크에 있는 Product 테이블을 선택해서 관계를 적용할 것입니다.로컬 네트워크의 테이블과 연결하는 것은 PowerPivot에서 다양한 데이터 원본을 통해(클라우드 포함해서) Self-분석이 가능하다는 것을 알아보기 위함입니다.


    데이터를 가져오기 할 경우에 “XML 구문 분석에 대한 에러가 발생할 경우는 SQL Server 2008 R2 기능 팩의 Microsoft® SQL Server® 2008 R2 Microsoft® Analysis Services OLE DB 공급자를 다운로드 받아 설치하면 됩니다.

    http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=ceb4346f-657f-4d28-83f5-aae0c5c83d52


    잘 가져오면 아래와 같이 성공으로 나타납니다.



    데이터 가져오기 결과는 아래와 같습니다.


    클라우드 환경이 아닌 로컬 데이터베이스에 있는 Product 테이블을 가져오기 했습니다.



    디자인 탭의 관계 만들기를 통해 PowerPivot 테이블 간의 관계(FK)를 정의했습니다.


    클라우드의 SQL Azure 를 이용해서 피벗 테이블을 구성한 결과는 아래와 같습니다. 또한 Excel 2010의 슬라이서를 이용했습니다.



    이상으로 SQL Azure의 활용 측면으로 Excel 2010의 PowerPivot을 이용해서 SQL Azure의 데이터를 연결하는 내용을 알아보았습니다.

    다음은 SQL Reporting Services 에서 SQL Azure 데이터를 나타내보도록 하겠습니다.







     

    Hello Windows Azure / Twitter 스타일 방명록 만들기 #1

    Cloud 2010. 7. 27. 09:00 Posted by 알 수 없는 사용자

    꼭 읽어주세요: 이 글이 작성된 현 시점에 가장 최신 버전의 Azure Tools는 버전 1.2입니다. 이 강좌를 시작하시기 전에 Windows Azure Tools for Visual Studio를 1.2 버전으로 업그레이드하여 주십시오. 이전 버전을 설치하신 경우에는 SDK와 Tools를 모두 완전히 제거한 후 1.2 버전으로 새로 설치하여 주십시오. Windows Azure Tools for Visual Studio 1.2 한글판 다운로드는 http://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=2274a0a8-5d37-4eac-b50a-e197dc340f6f 에서 가능합니다.

    지난번 글 (2010/06/07 - [Cloud Development] - Hello Windows Azure / Understanding Windows Azure Development Process)에 이어서, 오늘부터는 Twitter 스타일 방명록 만들기 첫 번째 시간입니다. 이번 시간에는 Windows Azure 프로젝트를 만들고, 데이터 모델을 작성하고 파악하는 것을 실습 목표로 정의하고자 합니다.

    빠르고 편리한 실습을 위하여, Visual Web Developer 2010 Express를 사용하여 실습하는 것을 기준으로 하겠습니다. Visual Studio 2010이 이미 설치되어있으신 경우 이를 이용하셔도 됩니다. 어떤 개발 도구를 사용하더라도 반드시 Windows Azure Tools for Visual Studio가 설치되어있어야 하며 설치 방법은 2010/06/03 - [Cloud Development] - Hello Windows Azure / Windows Azure 개발 환경의 구축 에서 소개하는 내용에 따라 완료하여 주시기 바랍니다.

    개발 도구 시작하기 및 프로젝트 생성하기

    1. Visual Web Developer 2010 Express (또는 Visual Studio 2010)를 권한 상승 시킨 상태에서 시작하도록 합니다. 아래의 그림을 참고하세요. 사용자 계정 컨트롤을 사용하고 있을 경우 별도의 경고 대화 상자가 나타날 수 있으며 실행하도록 선택하시면 됩니다.

    2. Visual Web Developer 2010 Express가 실행되면 초기 화면에서 새 프로젝트 만들기 링크를 클릭합니다.

    3. 아래에 표시된 대화 상자에서 왼쪽의 개발 범주를 Cloud로 선택하면 사용 가능한 프로젝트 템플릿 중에서 "Windows Azure 클라우드 서비스"가 나타납니다. 이 항목을 클릭하고, 프로젝트 이름을 원하는 이름 (여기서는 TwistBook이라고 하겠습니다.)을 지정한 후, "솔루션용 디렉터리 만들기"에 체크하고 "확인" 버튼을 클릭합니다.

    특별히 솔루션용 디렉터리 만들기에 체크가 되어있는지를 확인하는 이유는, 이 옵션이 Windows Azure Tools로 생성되는 프로젝트의 특성 상 한 솔루션 안에 다수의 프로젝트가 만들어지기 때문에 이를 정확하게 분류하기 위하여 사용하는 옵션으로, 사용하도록 맞추어져있을 때 좀 더 소스 코드 관리가 편리하기 때문입니다.

    4. 배포할 Windows Azure 응용프로그램 내에 배치될 Role의 종류와 유형을 설정하는 추가 프로젝트 마법사가 아래와 같이 나타납니다. (만약 아래 화면 대신 HTML 페이지로 안내 페이지가 나타나는 경우 Azure Tools가 올바르게 설치되지 않은 상태입니다.)

    5. .NET Framework 4 역할 그룹과 클라우드 서비스 솔루션 그룹 사이의 두 개의 버튼을 이용하여 실제로 제작할 프로젝트의 유형을 설정하고 프로젝트의 이름까지 정할 수 있습니다. 우선 ASP.NET MVC 2 웹 역할 프로젝트 한 개와 작업자 역할 프로젝트 한 개를 추가하겠습니다.

    6. 이제 각 프로젝트의 정확한 이름을 설정하기 위하여, 클라우드 서비스 솔루션 그룹 안에 추가된 프로젝트 중 MvcWebRole1 프로젝트 항목을 선택하면 연필 모양의 아이콘이 이름 옆에 나타납니다. 이를 클릭하면 아래와 같이 이름을 바꿀 수 있도록 편집 영역이 나타납니다. 이 예제에서는 다음과 같이 이름을 정하였습니다.

    - MvcWebRole1 => TwistBook.WebRole
    - WorkerRole1 => TwistBook.LinkProcessor

    이름을 편집하고 나면 아래와 같은 화면이 되어있을 것입니다. 확인 버튼을 눌러 프로젝트를 생성합니다.

    7. 프로젝트의 생성을 진행하다보면 Visual Studio 2010 Professional 이상의 버전에서는 다른 ASP.NET MVC 2 프로젝트와 마찬가지로 테스트 프로젝트를 만들것인지를 물어보는 대화 상자가 나타납니다. 빠른 설명과 간결한 진행을 위하여 테스트 프로젝트를 생성하지 않는 방향으로 이 예제에서는 진행하도록 하겠습니다. (필요하신 분들께서는 생성하셔도 됩니다.) Visual Web Developer 2010 Express Edition에서는 이러한 대화 상자가 따로 나타나지 않습니다.

    8. 프로젝트 생성이 끝나면 아래와 같이 솔루션 탐색기에 총 3개의 프로젝트가 열거됩니다.

    TwistBook 프로젝트는 Cloud Application 전체를 총괄하는 프로젝트이며, Cloud 환경에서 하나의 Application으로 분류됩니다. 이 프로젝트 안에 Web Role과 Worker Role이 다수 연결되는 구조로 되어있으며, 나중에 Cloud Service Package 파일 (CSPKG)로 컴파일될 때 이 프로젝트가 기준이 됩니다.

    TwistBook.WebRole 프로젝트는 ASP.NET MVC 2를 사용하도록 프로젝트가 구성되어있으며 여기에 기본적인 트위터 스타일의 방명록 UI를 표시하거나 인증된 사용자로부터 메시지를 입력받아 Worker Role에게 처리를 위임하는 등의 작업을 수행하도록 코드를 구성할 것입니다.

    그리고 TwistBook.LinkProcessor 프로젝트는 Web Role과는 따로 실행되는 개별적인 Role 인스턴스로서, Web Role에서 받아들이는 메시지 중 이미지 파일을 twitpic.com에 게시하여 짧은 URL을 받아온다거나, 본문에 있는 긴 URL을 짧게 만들어 받아오는것과 같이 처리량이 많이 몰렸을 경우 병목 현상을 일으킬 수 있는 기능만을 전담하도록 코드를 구성할 것입니다.

    자료 구조 만들기

    1. 클라우드 환경 내부 및 외부에서 기준이 될 모델 자료 구조를 만들기 위하여, 별도의 클래스 라이브러리를 작성하도록 하겠습니다. 솔루션 탐색기에서 솔루션 항목을 오른쪽 버튼으로 클릭하고 아래 그림처럼 새 프로젝트 추가 메뉴를 클릭합니다.

    2. 일반적인 클래스 라이브러리 프로젝트를 하나 만듭니다. 이름은 TwistBook.DataModel로 지정하고, Cloud 환경 위에서 사용하도록 현재 지정된 .NET Framework 4와 동일한 빌드 타겟이 지정되어있는지 확인한 후 프로젝트를 생성합니다.

    3. TwistBook.DataModel 프로젝트에 Windows Azure Table Storage에서 사용할 Data Context 클래스를 만들도록 하겠습니다. [각주:1]

    Data Context 클래스를 만들기 위해서는 Windows Azure SDK에서 제공하는 클래스 라이브러리 파일들을 TwistBook.DataModel 프로젝트 참조에 포함시켜야 합니다. 아래 그림과 같이 솔루션 탐색기에서 TwistBook.DataModel 프로젝트 아래의 참조 항목을 오른쪽 버튼으로 클릭하고 "참조 추가" 메뉴를 클릭합니다.

    4. 참조 추가 대화 상자가 나타나면, .NET 탭을 클릭합니다. 이 과정에서 비동기적으로 Visual Studio가 관리하는 디렉터리 목록 내에 있는 모든 어셈블리들을 조사하여 실시간으로 리스트 박스에 추가합니다. 이 샘플에서 필요로 하는 SDK의 라이브러리가 목록에 나타나기까지 조금 시간이 걸릴 수 있으며 시스템마다 차이가 있을 수 있지만 약 1분 이내에 나타납니다.

    5. 나타난 항목들 중에서 다음의 항목들을 찾아 키보드의 Ctrl 키를 누른채로 하나씩 클릭하면, 아래 그림과 같이 여러 대상을 선택하고 참조로 추가할 수 있습니다.

    * System.Data.Services.Client
    * Microsoft.WindowsAzure.StorageClient

    6. 아래 그림과 같이 참조 목록이 구성되어있으면 준비가 다 된것입니다. 이제 본격적으로 코드 작성을 시작해 보도록 하겠습니다. :-)

    7. 기본으로 만들어진 클래스가 담겨있는 Class1.cs 파일의 내용을 아래와 같이 작성합니다. 코드에서 핵심이 되는 부분을 굵게 표시하였습니다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.WindowsAzure.StorageClient; [각주:2]

    namespace TwistBook.DataModel
    {
        public class TwistModel : TableServiceEntity [각주:3]
        {
            public TwistModel()
            {
                DateTime current = DateTime.Now;
                PartitionKey = current.ToString("yyyyMMdd");
                RowKey = current.ToString("hhmmss"); [각주:4]

            }

            public string WriterName { get; set; }
            public string MessageBody { get; set; }
            public DateTime WrittenDate { get; set; }
            public string ImageUrl { get; set; } [각주:5]
        }
    }

    8. Class1.cs 파일의 이름을 클래스 이름과 동일하게 설정합니다. Windows 탐색기를 열지 않고, 아래의 그림에서처럼 솔루션 탐색기에서 직접 이름을 바꿀 수 있으며, Class1.cs 파일을 TwistModel.cs 파일로 이름을 변경합니다.

    9. TwistBook.DataModel 프로젝트에 Windows Azure Table Storage에서 사용할 Data Context 클래스를 만들도록 하겠습니다. 새 항목을 프로젝트에 추가하기 위하여 아래 그림과 같이 솔루션 탐색기에서 TwistBook.DataModel 프로젝트 항목을 오른쪽 버튼으로 클릭하면 "추가" - "새 항목 추가" 메뉴가 나타나는데 이를 클릭하시면 됩니다.

    10. 새 항목 추가 대화 상자에서 설치된 템플릿 영역에서 "Visual C# 템플릿"을 선택하고, 우측 목록에서 "클래스"를 선택합니다. 그리고 이름에 새로 추가할 클래스의 이름을 지정한 후 "추가" 버튼을 클릭합니다. 9단계와 10단계를 거쳐서 다음의 파일들을 추가로 생성합니다.

    * TwistDataServiceContext.cs
    * TwistDataSource.cs

    11. 솔루션 탐색기 내의 TwistBook.DataModel 프로젝트 항목 아래에 다음 그림과 같이 구성이 되어있으면 정상적으로 추가가 된 것입니다.

    12. 이제 TwistDataServiceContext.cs 파일을 열어서 다음과 같이 코드를 작성합니다. 코드에서 중요한 부분은 굵은 글씨로 표현하였고 여기에 따른 부가적인 설명을 각주로 붙였습니다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.WindowsAzure;
    using Microsoft.WindowsAzure.StorageClient; [각주:6]

    namespace TwistBook.DataModel
    {
        internal class TwistDataServiceContext : TableServiceContext [각주:7]
        {
            internal TwistDataServiceContext(CloudStorageAccount account)
                : base(account.TableEndpoint.AbsoluteUri, account.Credentials) [각주:8]
            {
            }

            internal const string TwistModelName = "TwistModel";

            public IQueryable<TwistModel> TwistModel [각주:9]
            {
                get { return this.CreateQuery<TwistModel>(TwistModelName); } [각주:10]
            }

        }
    }

    13. 이어서 TwistDataSource.cs 파일을 열어서 다음과 같이 코드를 작성합니다. 코드에서 중요한 부분은 굵은 글씨로 표현하였고 이에 따른 부가적인 설명을 각주로 붙였습니다.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.WindowsAzure;
    using System.Data.Services.Client;
    using Microsoft.WindowsAzure.StorageClient; [각주:11]

    namespace TwistBook.DataModel
    {
        public class TwistDataSource
        {
            private static CloudStorageAccount storageAccount;
            private TwistDataServiceContext serviceContext;

            static TwistDataSource()
            {
                // 중요: 실제로 응용프로그램을 Cloud 환경에 배포할 때에는
                // Cloud Project 내의 다른 환경 설정 문자열을 이용하도록
                // 호출을 변경해야 합니다.
               storageAccount = CloudStorageAccount.DevelopmentStorageAccount; [각주:12]

               CloudTableClient.CreateTablesFromModel(
                    typeof(TwistDataServiceContext),
                    storageAccount.TableEndpoint.AbsoluteUri,
                    storageAccount.Credentials); [각주:13]

            }

            public TwistDataSource()
            {
                this.serviceContext = new TwistDataServiceContext(storageAccount); [각주:14]
                this.serviceContext.RetryPolicy = RetryPolicies.Retry(
                    3, TimeSpan.FromSeconds(1)); [각주:15]

            }

            public DataServiceResponse Insert(TwistModel model)
            {
                this.serviceContext.AddObject(
                    TwistDataServiceContext.TwistModelName,
                    model); [각주:16]

                return this.serviceContext.SaveChanges(); [각주:17]
            }

            public IEnumerable<TwistModel> Select()
            {
                var results = from eachTwist in this.serviceContext.TwistTable
                              select eachTwist; [각주:18]

                var query = new CloudTableQuery<TwistModel>(
                    results as DataServiceQuery<TwistModel>,
                    RetryPolicies.Retry(3, TimeSpan.FromSeconds(1))); [각주:19]

                return query.Execute(); [각주:20]
            }

            public DataServiceResponse Delete(TwistModel model)
            {
                this.serviceContext.AttachTo(
                    TwistDataServiceContext.TwistModelName,
                    model, "*"); [각주:21]

                this.serviceContext.DeleteObject(model);
                return this.serviceContext.SaveChanges();
            }
        }
    }

    Preface: ASP.NET MVC 2 Web Role에 대한 이해

    다음 Article의 내용을 올리기 전에, ASP.NET MVC 2에 대한 이해를 돕기 위하여 간단한 단락 하나를 구성하였습니다. ASP.NET MVC 2는 Microsoft의 최신 웹 기술이 적용된 프레임워크로 Windows Azure 개발 환경에서 뿐만 아니라 일반적인 웹 사이트 개발에도 얼마든지 활용될 수 있는 유용한 프레임워크입니다.

    TwistBook.WebRole 프로젝트의 노드를 솔루션 탐색기에서 살펴보면 아래와 같은 구성이 나타납니다. 이 구성은 전형적인 ASP.NET MVC 응용프로그램이며, 고전적인 웹 프로그래밍 모델에서와는 달리 직접 aspx 페이지를 부르지 않고 알기 쉬운 주소를 기반으로하는 것이 특징입니다. ASP.NET MVC 응용프로그램을 처음 접하시는 분들을 위하여 디렉터리 구조에 대한 설명을 잠시 말씀드립니다.

    App_Data: ASP.NET 응용프로그램이 데이터베이스에 연결하기 위하여 필요한 각종 코드 및 데이터베이스 연결 설정 파일들을 보관하는 디렉터리이며, ASP.NET 2.0부터 존재해왔던 디렉터리입니다. 예외적으로 이 디렉터리에는 Microsoft Access 파일 (*.mdb 또는 *.accdb)이나 소규모 웹 사이트를 위한 Embedding 가능한 SQL 데이터베이스 파일 (*.mdf 및 *.ldf)이 배치되기도 합니다.

    Content: ASP.NET MVC 응용프로그램 전반에 걸쳐서 사용되는 공통적인 클라이언트측 구성 요소 (가령 CSS 스타일 시트, XSLT 스타일 시트, 이미지 파일, 오디오 파일 등)가 이 디렉터리에 저장됩니다. 이 디렉터리에 저장된 파일들은 중간 처리기에 의하여 해석되지 않는 고유한 경로를 유지할 수 있습니다.

    [중요] Controllers: ASP.NET MVC 응용프로그램에서 "C"를 대표하는 구성 요소가 저장되는 디렉터리이며 백그라운드에서 웹 페이지를 그리거나, 웹 브라우저로부터 받아온 정보를 해석하거나, 가공하거나, 처리하는 제어 코드를 이곳에 배치합니다.

    [중요] Models: ASP.NET MVC 응용프로그램에서 "M"을 대표하는 구성 요소가 저장되는 디렉터리이며 주로 Controller 간의 통신, 데이터베이스와의 통신, 클라이언트로의 통신 등에서 기본 단위가 되는 데이터나 모델을 표현하는 클래스 코드를 이곳에 배치합니다. 이곳에 배치되는 코드에는 로직이 포함되지 않는 것을 원칙으로하며, 이곳에 배치되는 클래스들의 성격을 일반적으로는 POCO [각주:22] - 또는 - PONO [각주:23] (http://en.wikipedia.org/wiki/Plain_Old_CLR_Object)로 이해하면 쉽습니다.

    Scripts: Content 디렉터리와 유사한 성격의 디렉터리이지만 특별히 JavaScript 라이브러리들을 위하여 할당된 디렉터리로, ASP.NET MVC 2는 오픈 소스 기반의 JavaScript Framework인 jQuery를 기본으로 제공합니다. 만약 jQuery Plugin을 개발하였거나 사용하고자 하는 다른 Plugin이 있을 경우 - 또는 - jQuery 이외의 다른 JavaScript 라이브러리 (예: 네이버 jindo, script.aculo.us, Moo Tools, Google Web Toolkit, extJS, Dojo Toolkit, prototype, Yahoo! UI 등)를 이곳에 추가하면 됩니다.

    [중요] Views: ASP.NET MVC 응용프로그램에서 "V"를 대표하는 구성 요소가 저장되는 디렉터리이며 주로 Controller에 어떤 데이터를 전달할 것인지를 사용자에게 대화형으로 묻거나, Controller에 의하여 발생한 출력 결과를 사용자에게 대화형으로 전달할 때 사용하는 컨텐츠 파일들이 여기에 저장됩니다. ASP.NET MVC 2에서는 Web Forms와 Script Tag Expression을 기반으로 하는 뷰 엔진을 기초로 합니다. [각주:24]

    [중요] Global.asax: ASP.NET MVC에서 매우 중요한 구성 요소로 지금 작업하는 ASP.NET 응용프로그램이 ASP.NET MVC 엔진에 의하여 처리되어야 함을 지정하고 초기 설정을 구성하는 코드가 여기에 포함되어있습니다. 이 파일이 누락되거나 내용이 잘못되어있을 경우 ASP.NET MVC 응용프로그램으로서 동작하지 않음을 유의해야 합니다. 추가적으로 사이트 내에 다른 영역을 구성하거나, 다른 주소 패턴을 확장해야 할 경우에도 이 파일에 내용을 추가해야 설정이 적용됩니다.

    [중요] Web.config: ASP.NET 응용프로그램의 환경 설정 파일로 역시 이 파일의 내용에 문제가 있거나 누락되어있을 경우 ASP.NET MVC 응용프로그램이 올바르게 동작하지 않을 수 있음을 주의해야 합니다.

    [중요] WebRole.cs: ASP.NET 응용프로그램과는 무관하나, Windows Azure 환경에서 Web Role이 초기에 기동될 때 필요한 설정을 포함하고 있으며, 클라우드 컴퓨팅 환경에서의 실질적인 진입점이 됩니다. 이 클래스가 없을 경우 응용프로그램 실행에 문제가 있을 수 있습니다.

    다음 시간에는

    다음 시간에는 ASP.NET MVC 2 기반의 Web Role을 작성하고, 테이블 스토리지에서 실제로 데이터를 조회하거나 추가, 변경, 삭제하는 예시를 들어보도록 하겠습니다. 긴 강좌 읽어주셔서 감사하며, 즐거운 여름 휴가 되십시오. 감사합니다. :-)

    강좌에 대한 고칠 부분, 의견, 제안 등은 남정현의 클라우드 & 닷넷 블로그 (http://www.rkttu.com/), 트위터 (@rkttu), 전자 메일 (rkttu nospam rkttu dot com)을 통하여 항상 받고 있습니다. 언제든 의견 주시면 감사하겠습니다. :-)

    1. 이 샘플에서 Windows Azure Storage를 이용하는 방향으로 설명이 되어있지만, 실제로 여러분이 개발할 Windows Azure 서비스에서는 SQL Azure나 다른 곳에 배치되어있을 고가용성의 관계형 데이터베이스 시스템 (예: SQL Server 2008 R2)을 이용하는 것이 더 좋을 수 있습니다. [본문으로]
    2. Windows Azure SDK와 함께 제공되는 Table Storage를 위한 API가 포함되어있는 네임스페이스입니다. [본문으로]
    3. TableServiceEntity 클래스를 상속받도록 자료 구조를 만들어야 SDK를 이용하여 Table Storage에 데이터를 저장하거나 가져올 수 있습니다. [본문으로]
    4. TableServiceEntity 클래스의 기능을 적용하기 위하여 동일한 시그니처를 가진 생성자를 하나 만듭니다. Table Storage의 접근 효율성을 위하여, 테이블은 여러 개의 파티션으로 구분됩니다. 이 샘플에서 파티션의 분리 단위로 "날짜"를 사용하였습니다. 그리고 파티션 내에서 각각의 Entity가 고유한 의미를 가질 수 있게 하기 위하여 Row Key를 사용하여 구분합니다. Partiton Key와 Row Key가 더해져서 테이블 내에서는 이 Entity가 "유일할 수 있다"는 특성을 보장합니다. [본문으로]
    5. WriterName Property는 작성자의 이름, MessageBody Property는 메시지 본문, WrittenDate Property는 작성한 날짜와 시간을, ImageUrl Property는 같이 첨부하는 사진의 URL을 보관하는 목적으로 사용됩니다. C# 3.0 이후로 지원되는 단축 Property Getter/Setter 선언으로 별도의 private 멤버 변수를 배치하지 않고 이와 같이 단순한 코드를 만들 수 있습니다. [본문으로]
    6. Windows Azure SDK와 함께 제공되는 Table Storage를 위한 API가 포함되어있는 네임스페이스입니다. [본문으로]
    7. LINQ를 이용하여 손쉽게 데이터를 가져오거나 설정할 수 있도록 LINQ의 설정을 확장해주는 기본 추상 클래스입니다. [본문으로]
    8. CSCFG 파일 상의 정보를 표현하는 객체인 CloudStorageAccount를 생성자에서 인자로 받아 이 객체를 초기화하고, Windows Azure Storage와의 연결을 초기화합니다. [본문으로]
    9. 지연 실행을 목적으로 하는 질의 객체를 생성합니다. 지연 실행이란, 각각의 요소를 다룰 필요가 있을 때 식을 계산하고 평가하는 방식으로, 전체의 내용을 미리 메모리에 읽어들여서 처리하는 것과는 차이가 있습니다. 이 객체는 앞서 우리가 정의한 TwistModel 클래스를 트랜잭션의 단위로 사용하도록 SDK 내의 프레임워크에서 생성됩니다. [본문으로]
    10. 주의: 엔티티 클래스의 이름, ServiceContext에서 노출하는 프로퍼티의 이름, CreateQuery 메서드에 전달하는 테이블 명의 이름이 모두 같아야 혼선없이 올바르게 동작할 수 있음을 보증할 수 있습니다. [본문으로]
    11. LINQ to Azure Table Storage를 활용하는데에 필요한 클래스 및 원격 데이터 액세스에 필요한 클래스들이 굵게 강조 표시한 3개의 네임스페이스 안에 모두 포함되어있습니다. [본문으로]
    12. 현재는 실제 Windows Azure Storage 계정을 지정하지 않고 Local Development Storage 계정을 대신 지정합니다. [본문으로]
    13. 테이블 모델을 생성할 때 사용할 기준이 될 DataContext 클래스를 선택하고, 생성을 요청합니다. 이 때 접속할 대상 스토리지의 HTTP 주소와 자격 증명 정보도 한꺼번에 지정합니다. 또한, 이 작업은 TwistDataSource 클래스를 프레임워크에서 로드할 때 한 번만 발생할 수 있도록 유도하기 위하여 정적 생성자에 정의하였습니다. 테이블의 초기 구조를 할당하는 작업은 자주 일어날 필요가 없는 작업이기 때문에 성능 상의 이득을 위하여 이와 같이 작성합니다. [본문으로]
    14. 서비스 객체를 초기화합니다. 앞에서 가져온 계정 정보를 사용하여 복원된 계정 정보 객체를 사용하여 초기화하고 있다는 점을 확인하십시오. [본문으로]
    15. 혹시 있을지 모르는 장애에 대해 좀 더 완벽한 대비를 위하여, 재시도 정책을 설정할 수 있습니다. (이 부분은 매우 중요한 개념입니다.) 첫 번째 인자에는 재시도 횟수, 그리고 두 번째 인자에는 재시도 간격을 TimeSpan 객체를 이용하여 지정할 수 있습니다. 여기서는 처음 실패가 발생한 시점을 기준으로 3회 더 시도하며 각 시도 간격은 1초로 정합니다. [본문으로]
    16. 전형적인 LINQ to Entity 서비스와 마찬가지로 AddObject를 이용하여 객체의 참조를 기반으로 새로운 데이터를 추가할 수 있습니다. [본문으로]
    17. 트랜잭션 개념을 기본적으로 사용하므로 SaveChanges 메서드는 삽입, 변경, 삭제 작업이 있은 직후에는 반드시 병행되어야 합니다. [본문으로]
    18. Windows Azure Table Storage에 전송할 Query를 지연된 실행을 위한 객체로 초기화합니다. 이 문장이 실행되었다고해서 곧바로 데이터가 수집되는 것은 아닙니다. [본문으로]
    19. Windows Azure Table Storage에 실제로 Query를 전송할 클라이언트 객체를 초기화하고, 이 객체의 재시도 정책도 추가로 정의할 수 있습니다. 여기서도 3회 재시도, 매 시도마다 1초 간격을 두기로 설정합니다. [본문으로]
    20. 비로소 이 부분에서야 실제 전송과 데이터 수집이 발생하게 됩니다. [본문으로]
    21. Table Storage에서 객체를 삭제할 때에는 삭제를 위하여 검색할 대상을 지정해야 하며 이 때 사용하는 것이 AttachTo 메서드입니다. 이 메서드를 이용하여 어떤 테이블에서 어떠한 유형의 데이터를 검색할 것인지를 서비스 객체에 지정합니다. [본문으로]
    22. Plain Old CLR Object (Plain Old Java Object; POJO를 응용한 줄임말) [본문으로]
    23. Plain Old .NET Framework Object (Plain Old Java Object; POJO를 응용한 줄임말, POCO와 동일한 의미의 다른말) [본문으로]
    24. 이 글을 작성하는 시점에서 ASP.NET MVC 3에서 기본으로 채택될 예정인 Razor View Engine이 새로 발표되었습니다. Razor View Engine은 Web Form을 대체하는 ASP.NET MVC 전용의 View Engine 시스템을 뜻합니다. [본문으로]

    Hello Windows Azure / Windows Azure 개발 환경의 구축

    Cloud 2010. 6. 3. 09:00 Posted by 알 수 없는 사용자

    지난번 글 (http://vsts2010.net/303)에 이어서 오늘부터는 Windows Azure 기반 응용프로그램을 개발하기 위한 본격적인 실습 위주의 글을 시리즈로 연재하게 되었습니다. Windows Azure 기반의 응용프로그램을 개발하는 방법은 여러 가지가 있을 수 있습니다만 Visual Studio 2010을 활용하여 Windows Azure 기반의 응용프로그램을 개발하는 것에 관한 내용을 중심으로 블로그를 연재할 예정임을 미리 밝혀둡니다.

    Windows Azure 기반 응용프로그램 개발을 위한 필요 사양 요약

    • 필요한 운영 체제: Windows Vista, Windows 7, Windows Server 2008, Windows Server 2008 R2를 지원합니다. Windows 2000, Windows XP에서는 개발하실 수 없습니다.
    • 필요한 구성 요소: IIS 7.x (ASP.NET, WCF HTTP 활성화, 정적 컨텐츠, CGI 기능이 필요합니다.)
    • 필요한 개발 도구: Visual Studio 2008 SP1, Visual Web Developer 2008 Express SP1, Visual Studio 2010, Visual Web Developer 2010 Express 중 하나가 필요합니다. 이 글에서는 Visual Web Developer Express 2010을 택하여 설명을 드리겠습니다.
    • 필요한 데이터베이스: SQL Server 2005 Express 이상의 데이터베이스
    • 주의 사항: Visual Studio, Visual Web Developer의 모든 CTP, RC, Beta 버전 및 .NET Framework의 CTP, RC, Beta 버전을 설치 전에 완전히 제거하여 주십시오.
    • 팁: 배포 후 호환성 문제를 최소화하기 위하여, Windows Azure 기반 응용프로그램을 개발할 때에는 64비트 버전의 Windows Vista, 7, Server 2008, Server 2008 R2를 이용하여 개발하시는 것을 권장합니다. 64비트 버전의 Windows를 가지고 있지 않은 경우 32비트 버전의 개발 환경을 이용하더라도 문제는 없습니다.

    Visual Web Developer Express 2010으로 시작하는 Windows Azure 개발 환경 구축

    Visual Web Developer Express 2010은 학생, 프로그래밍 입문자, 아마추어 개발자 등을 위하여 제공되는 Visual Studio의 무료 버전입니다. 그러나, 상용 목적으로 소프트웨어 개발을 하는 동안에도 자유롭게 제한없이 이용하실 수 있으며, 전체 버전의 Visual Studio 2010을 구입하기 이전에 Visual Studio 2010이나 최신 기술을 빠르게 테스트해보기 위한 목적으로도 이용이 가능합니다. 이번 글에서는 Visual Web Developer Express 2010을 이용하여 개발 환경을 구축하는 과정을 보여드리도록 하겠습니다.

    Windows Vista / 7에서 기본 환경 설정하기

    1. 시작 메뉴를 클릭하고 프로그램 및 파일 검색란에 아래와 같이 appwiz.cpl을 입력한 후 Enter 키를 누릅니다. Windows Vista를 사용 중이시고, 고전 메뉴를 사용 중이신 경우 키보드의 Windows 키와 R 키를 동시에 눌러 나타나는 실행 대화 상자에서 같은 방법으로 실행할 수 있습니다.

    Windows 7에서 실행

    Windows Vista에서 실행

    2. 아래의 화면에서, Windows 기능 사용/사용 안함 항목을 클릭합니다. 사용자 계정 컨트롤 설정에 따라 최소 한 번 이상 관리자 권한이 필요함을 승인해야 하는 대화 상자가 나타날 수 있습니다.

    3. Windows 기능 대화 상자에서, Microsoft .NET Framework 3.5.1 항목 아래의 Windows Communication Foundation HTTP Activation 항목을 체크합니다. 그리고, 아래의 이어지는 그림에서와 같이, 인터넷 정보 서비스 항목 아래의 응용프로그램 개발 기능 아래의 "ASP.NET"과 "CGI", 일반적인 HTTP 기능의 "정적 콘텐츠" 항목을 체크한 후, 확인 버튼을 클릭하여 설정을 적용합니다.

    Windows Server 2008 / 2008 R2에서 기본 환경 설정하기

    1. 시작 메뉴를 클릭하고 프로그램 및 파일 검색란에 아래와 같이 appwiz.cpl을 입력한 후 Enter 키를 누릅니다. Windows Vista를 사용 중이시고, 고전 메뉴를 사용 중이신 경우 키보드의 Windows 키와 R 키를 동시에 눌러 나타나는 실행 대화 상자에서 같은 방법으로 실행할 수 있습니다.

    2. 아래의 화면에서, Windows 기능 사용/사용 안함 항목을 클릭합니다. 이 기능을 이용하여 설정을 변경하기 위해서는 관리자 계정 - 또는 - 대행 계정으로 시스템에 접속한 상태여야 합니다.

    3. 서버 관리자 콘솔이 나타나면, 오른쪽 트리뷰에서 기능 항목을 오른쪽 버튼으로 클릭합니다. 그 후 나타나는 팝업 메뉴에서 "기능 추가" 메뉴를 클릭합니다.

    4. 기능 추가 마법사에서 .NET Framework 3.5.1 기능 항목 아래의 WCF 활성화 항목의 HTTP 활성화를 체크합니다. 이미 설치되어있는 경우, 체크된 상태로 비활성화된 항목이 보입니다. 다음 버튼을 클릭하여 진행하거나, 이미 설치되어있는 경우 취소 버튼을 클릭하여 마법사를 종료할 수 있습니다. 시스템을 다시 시작해야 할 경우, 다시 시작한 다음 5단계로 이동합니다.

    5. 이제 웹 서버로서의 역할을 추가하기 위하여 역할 항목을 오른쪽 버튼으로 클릭하고, 역할 추가 메뉴를 클릭하여 역할 추가 마법사를 시작합니다. 시스템을 다시 시작하도록 권고 받았지만 재시작하지 않았을 경우 재시작을 안내하는 대화 상자가 나타날 수 있습니다.

    6. 이어지는 두 화면에서처럼 웹 서버에 대한 역할이 구성되어있는지 확인 후, 웹 서버 역할 항목이 설치되어있지 않은 경우 체크하여 설치를 진행합니다. 이미 설정되어있는 경우 비활성화된 상태로 나타나므로 이 경우에는 마법사를 그냥 종료하면 됩니다.

    Visual Web Developer 2010 다운로드 및 설치

    Visual Web Developer 2010은 Windows Azure 기반 응용프로그램 개발을 위하여 사용할 수 있는 무료 개발 도구입니다. Visual Web Developer 2008의 경우 Service Pack 1 이상을 포함한 버전을 다운로드하여 사용할 수 있습니다. 더불어서, Silverlight Tools 역시 Visual Web Developer를 기반으로 맞추어진 개발 도구이기 때문에 같이 설치하여 사용하면 Microsoft의 최신 웹 기술의 혜택도 같이 얻을 수 있습니다.

    Visual Web Developer 2010 Express를 다운로드하려면 http://www.microsoft.com/web 에서 다운로드 가능한 Web Platform Installer를 설치해야 합니다. 이 프로그램을 설치하고 난 후에 시작 메뉴에 아래 그림과 같이 바로 가기 메뉴가 생성되며, 언제든 이 메뉴를 이용하여 최신 웹 제품이나 널리 사용되는 웹 어플리케이션을 다운로드할 수 있습니다.

    Web Platform Installer를 시작하면 아래와 같은 화면이 나타납니다. 여기서, 웹 플랫폼 탭을 선택하고, 도구 섹션으로 이동하여 사용자 지정 링크를 클릭합니다.

    아래와 같이 개발자 도구 그룹이 나타나면 여기서 Visual Web Developer 2010 Express 체크 박스를 선택합니다. 필요한 경우, WCF RIA Services Toolkit과 Silverlight Toolkit 등을 같이 설치하여 Windows Azure Web Role 개발 때 같이 적용할 수 있습니다.

    설치 버튼을 누르면 이후의 모든 설치 과정을 Web Platform Installer가 대행하여 처리하고 그 결과를 보여줍니다. 설치 과정 중에는 관리자 권한이 필요하며, 사용자 계정 컨트롤이 설정된 시스템에서는 한 번 이상 관리자 권한 요청에 대한 승인이 필요할 수 있습니다.

    개발자를 위한 설치: Windows Azure Tools for Visual Studio 설치하기

    Windows Azure SDK와 함께 Visual Studio에 연동하기 위한 환경을 구축하려면, Windows Azure Tools for Visual Studio를 선택하여 설치하면 됩니다. 이 설치 패키지 안에 Windows Azure 환경을 Emulation하기 위한 SDK까지 모두 포함되어있으므로 간단히 설치를 완료할 수 있습니다. 이 글을 작성하는 현 시점에서 2010년 2월 버전이 가장 최신의 SDK이며, http://www.microsoft.com/downloads/details.aspx?FamilyID=5664019e-6860-4c33-9843-4eb40b297ab6&displaylang=en 페이지에서 다운로드 가능합니다.

    만약 단순히 만들어진 Windows Azure Package를 Local Machine에서 테스트하기 위하여 환경을 구축하고자 하는 경우에는 아래의 "테스트 환경을 위한 설치: Windows Auzre SDK 설치하기" 절을 참조하여 주십시오. 64비트 버전의 Windows Server 2008 환경에서 Cloud Application을 미리 테스트하는 시나리오에서 유용할 수 있습니다.

    테스트 환경을 위한 설치: Windows Azure SDK 설치하기

    Windows Azure 환경에서는 Windows Server 2008 R2 x64를 기본 운영 체제로 사용합니다. 만약 상호운용성 등의 복잡한 요구 사항을 필요로 하는 클라우드 기반 응용프로그램의 경우, 이 운영 체제와 동일한 환경에서 Windows Azure SDK만을 설치하여 Windows Azure Tools로 제작된 배포용 패키지 파일을 실제로 Windows Azure Cloud Environment에 게시하기 전에 올려보는 것은 문제를 사전에 진단하고, 디버깅을 하는데에 무척 유리한 전략이 될 수 있습니다.

    http://www.microsoft.com/downloads/details.aspx?FamilyID=dba6a576-468d-4ef6-877e-b14e3c865d3a&displaylang=en 페이지에서 이 글을 작성하는 현 시점의 최신 버전인 2010년 2월 버전의 SDK를 설치할 수 있습니다.

    Windows Azure SDK 설치 후 필요한 추가 구성 확인하기

    Windows Azure 환경을 위하여 최적화된 운영 체제와 플랫폼을 이용하기 때문에, RTM 버전으로 출시된 운영 체제와 환경 설정과는 구분되는 점이 몇 가지 있습니다. 아래는 Windows Azure 환경에 특화하기 위하여 변경된 설정을 로컬 / 개발자 컴퓨터에서 재현하기 위한 패치들로 원활한 개발과 테스트를 위해서는 반드시 설치해야 하는 패치들입니다.

    다음 시간에는

    다음 글에서는 본격적으로 Windows Azure Tools for Visual Studio를 이용하여 프로젝트를 만들고, 샘플 응용프로그램을 만들고 테스트하는 과정을 실습해보도록 하겠습니다. 궁금하신 점이나 어려운 점은 rkttu nospam rkttu dot com - 또는 - twitter at rkttu 에서 이야기하실 수 있습니다.

    감사합니다. 즐거운 하루 되십시오. :-)

    시작하면서

     

    안녕하세요? Microsoft 클라우드 컴퓨팅 기술에 대해 포스팅 하고 있는 안준석 입니다.

    동안 Window Azure Platform 대한 기본적인 개념에서 사용법까지 살펴 봤었습니다. 특히 클라우드를 하드웨어와 플랫폼 측면에서 이야기 했습니다.

    앞으로는 Azure 라는 클라우드 환경에서 애플리케이션을 어떻게 설계하고 만들어야 하는지에 대해 알아보려고 합니다.

     


    핵심 키워드는 "분산" "하이브리드" 그리고 "Window Azure Platform AppFabric" 입니다.

    앞으로 포스팅 글들에 대한 전체 개요는 링크 보시면 됩니다.

     

     

     

    Windows Azure 遺憾(유감)

     

    개발자로써 동안 Microsoft Azure 플랫폼을 공부하고 사용하면서 재미도 있었지만 한편으론 많이 따분했었습니다.

     

    "내가 개발 하던 방법 그대로 개발 하면 되네"

    Microsoft 저력이 느껴지는 부분이기도 한데요, 다양한 기술들을 묶어 통일 패러다임이 녹아든 제품을 만들어 내는 능력을 보면 감탄사가 절로 나옵니다. 특히 클라우드 컴퓨팅은 새로 나온 기술이 아니라 동안 축적 기술들의 총아라고 있는데요, 클라우드 컴퓨팅에서도 Microsoft 제품들은 가지 색을 갖고 개발자에게 이전과 동일한 사용자 경험을 제공합니다.

    따라서 Visual Studio 에서 예전과 같이 개발하고 마우스 오른쪽 클릭 "Public" 하고 결과물을 Azure 포탈에 업로드 하면 프로그램이 클라우드에서 작동 하게 됩니다.

     


    "무한한 성능을 제공하는 새로운 컴퓨터가 생긴 건가?.. 재미없다!"

    개발은 동일하게 하고 배포만 Azure 하면 된다? Microsoft 제공하는 기능은 편리하지만 자유도가 떨어지죠. 실제로 클라우드 자원을 자유롭게 조작해 없습니다. 클라우드에서 있는 것이 별로 없고 애플리케이션은 예전처럼 만든다면 클라우드든 로컬이든 개발자에게는 다를 없잖아요?

     


    "아차! 잘못 생각하고 있었다!"

    클라우드 컴퓨팅을 애플리케이션 개발 측면에서 접근 것이 아니라 하드웨어 기반(IaaS) 플랫폼 기반(PaaS) 이해 하고 사용하는 데만 집중 하고 있던 것이 문제 였습니다. 이런 기반들 위에서 작동하는 애플리케이션은 어떤 구조로 만들어야 하는지에 대한 고민이 부족해서 오해가 생겼던 것이었습니다. 아하!

     

    동안 잠시 잊고 있던 !

    클라우드 환경에서 애플리케이션이 탑재해야 기본 개념이 있으니 바로 "분산" 입니다.

     

     

     

     

     

    분산 : 클라우드 기반 애플리케이션 개발을 위한 핵심 키워드

     

    클라우드 컴퓨팅에서 분산은 무엇을 의미 할까요? 일반적으로 다음과 같은 것을 의미합니다.

     



    논리적
    또는 물리적으로 분리 되어 있는 애플리케이션들이 네트워크로 연결 되어 상호 연동 되는 것을 "분산 시스템" 이라고 말합니다.

     

    클라우드 환경에서의 애플리케이션은 이렇게 분산 되고 상호 작용을 통해 하나의 시스템으로 통합되는 것을 전제로 개발 되야 합니다.

     

    그런데 애플리케이션들이 물리적으로 떨어져 있고 네트워크를 통해 상호 연동하게 하려면 많은 것들이 필요합니다. 네트워크 연결 주소는? 프로토콜은? 암호화는? OS 달라? 서버장비가 달라? 방화벽은 어떻게 통과하지? 보안은? 등등 많은 이슈를 해결해야 합니다.

     

    이를 위해 Windows Azure Platform 에서 제공하는 것이 있으니 바로 AppFabric 입니다.

     

     

     

    Windows Azure Platform AppFabric

     

    분산 애플리케이션을 위한 기반 컴포넌트입니다. 애플리케이션을 분산 시켜 상호 연동 발생하는 다양한 문제들을 미리 해결 놓은 Application Infrastructure 입니다.

     

    앞으로는 회에 걸쳐 Application Infrastructure Key 플레이어인 Windows Azure Platform AppFabric 통해 클라우드 컴퓨팅 환경에서 어떻게 분산 애플리케이션을 개발 하면 되는지 알아보겠습니다. 이게 무엇인지 궁금하시죠? ;)

    (주의!  Windows Server AppFabric Windows Azure Platform AppFabric 다른 것입니다.)

     

     


    마치면서

     

    클라우드 컴퓨팅에 대한 관심은 커지고 있지만 아직까지 애플리케이션(App) 개발자들에게 닿는 부분은 적습니다. 가지 이유로 클라우드 컴퓨팅을 이야기 때면 주로 물리적인 인프라의 구성과 활용 이점을 이야기 한다거나 제공되는 플랫폼을 사용하는 방법 등에 대해 다뤄지고 있었기 때문입니다.

     

    이번 글에서는 애플리케이션(App) 개발자가 클라우드 환경에서 "분산" 시스템 구축을 전제로 개발해야 한다는 것을 이야기 했고 Microsoft 에서 제공하는 AppFabric 이를 위한 기반을 제공한다고 언급했습니다.

     

    다음 회에는 분산 애플리케이션(App) 개발자들을 위한 Windows Azure Platform AppFabic 본격적으로 파헤쳐 보겠습니다 ;)

     

     

    SQL Azure 알아보기 (5)- SQL Azure 이점과 T-SQL 지원

    Cloud 2010. 1. 1. 19:52 Posted by 알 수 없는 사용자


    SQL Azure에 대해 어느 정도 살펴보았으며 간단하게 현재 운영하고 있는 SQL Server와 비교를 나열해보려고 합니다. 현재 CTP를 살펴본 내용으로 저와 생각이 상이할 수 있습니다.

    그리고 실제 운영한다면 많이 차이점을 구체적으로 느낄 것 같습니다.


    먼저 SQL Azure의 이점을 아래에서 살펴봅니다.

     

    1.     관리적 요소와 확장성

    패치 등등 많은 관리적 오버헤드 없이 손쉽게 엔터프라이즈의 데이터 서비스 응용프로그램 기능을 제공할 수 있습니다. 그리고 저장소 증가로 인한 비용은 현재 사용하고 있는 저장소에 대한 비용만을 지불하면 됩니다. 초기 비용에 대한 감소가 매력적으로도 보입니다. 데이터 센터인데 관리적으로 별 신경 안써도 된다는 것이라고 생각됩니다.

     

    2.     고 가용성

    SQL Azure 는 물리적으로 여러 복사본이 생성되어 비즈니스 연속성과 고 가용성을 제공해주고 있습니다. 하드웨어 고장시 자동 Failover를 제공합니다. 이 또한 관리적 요소와 초기 비용의 감소를 제공합니다.

     

    3.     개발 및 관계형 데이터 모델

    SQL Azure TDS를 통해 Client Server 사이 통신을 지원함으로 익숙한 개발 모델로 접근할 수 있습니다. Visual Studio 2010을 통해 ADO.NET으로 접근한다면 거의 동일한 코드를 사용하게 됩니다. 개발 모델에서는 별 차이를 느끼지 못합니다. 그리고 SSIS를 통해서도 SQL Azure를 접근할 수 있습니다.
    SQL Azure
    를 개체 탐색기에 연결하면 관리하고 있는 여러 인스턴스 중의 하나로 보입니다. 또한 로컬의 데이터베이스와 유사하게 테이블, , 저장 프로시저, 인덱스 등을 생성할 수 있습니다. 하지만 조금 차이점이 있으며 아래에서 T-SQL 의 지원 내용을 알아봅니다.

     

    지원되는 T-SQL 기능

    지원되지 않는 T-SQL 기능

    • Constants
    • Constraints
    • Cursors
    • Index management and rebuilding indexes
    • Local temporary tables
    • Reserved keywords
    • Stored procedures
    • Statistics management
    • Transactions
    • Triggers
    • Tables, joins, and table variables
    • Transact-SQL language elements such as
      • Create/drop databases
      • Create/alter/drop tables
      • Create/alter/drop users and logins
      • and so on.
    • User-defined functions
    • Views, including sys.synonyms view
    • Common Language Runtime (CLR)
    • Database file placement
    • Database mirroring
    • Distributed queries
    • Distributed transactions
    • Filegroup management
    • Global temporary tables
    • Spatial data and indexes
    • SQL Server configuration options
    • SQL Server Service Broker
    • System tables
    • Trace Flags







    아래 주소에서 보다 더 구체적으로 T-SQL 지원 내용에 대해서 알아볼 수 있습니다.

    http://msdn.microsoft.com/en-us/library/ee336281(lightweight).aspx



    구름 속의 미래 : Windows® Azure™ Platform [2]

    Cloud 2009. 10. 11. 21:52 Posted by 알 수 없는 사용자
    안녕하세요? Ted 입니다.
    이번에는 PT 로 자료를 준비했습니다.

    클라우드에 대해 다시 살펴보고 Azure 를 실제로 사용해 보도록 하겠습니다.

    구름 속의 미래 : Windows® Azure™ Platform [1]

    Cloud 2009. 8. 13. 02:12 Posted by 알 수 없는 사용자


      반갑습니다
      ! Q3 에서 활동하게 Ted 라고 합니다. ^^

      저는 Q3 에서 MS 클라우드 플랫폼 Azure 대해 이야기 하려고 합니다.

       

      시작하면서...

       

       

      단순히 서버에 저장된 정보를 액세스 하는 것이 아니라 ‘구름(Cloud)’의 컴퓨팅 능력을 얻어서 사용 하는 클라우드 컴퓨팅이 글로벌 기업들의 적극적인 투자와 구축에 따라 점차 대중화 되어 가고 있습니다.

       

      상대적으로 MS 늦게 클라우드(Cloud) 시장에 뛰어 들었습니다.
      클라우드 컴퓨팅 플랫폼 Azure 발표하면서 MS 최고 아키텍트 레이 오지는 인터뷰 중에 "Azure 새로운 컴퓨터" 라고 말했었죠.

       

      구름.. 구름에서의 컴퓨팅.. 새로운 컴퓨터..

      새로운 기술과 개념들이 지적 호기심과 즐거움을 주고 있습니다.

       

      글에선 간단하게 클라우드(Cloud) 컴퓨팅의 개념을 알아보고 Azure Platform 어떻게 구성되어 있는지 살펴보겠습니다.

       

       

      클라우드 컴퓨팅? 플랫폼?

       

      클라우드(Cloud) 그대로 구름입니다. ^^

      IT 분야에서 최근 유행하는 클라우드(Cloud) 의미는 복수의 데이터센터(IDC) 가상화 기술을 통해 소프트웨어, 하드웨어, 네트워크, 컴퓨팅 파워 등의 전산 자산을 통합해 놓은 것을 의미합니다.

       

      그렇다면 클라우드 컴퓨팅이란 무엇일까요?

      사용자가 PC, 휴대폰, PDA 등 컴퓨팅이 가능한 단말기를 통해 구름(Cloud)에 접속해서 원하는 작업을 하는 것입니다. 크게 가지 작업을 있겠죠.
      언제 어디서나 데이터를 저장하고 프로그램을 실행시킨다.


      뿐만 아니라 인프라를 서비스로 제공받거나(IaaS), 플랫폼을 서비스로 제공(PaaS) 받는 것이 또한 클라우드 컴퓨팅에서 가능합니다.


      클라우드를 제공하는 회사 입장에서 본다면 애플리케이션, 인프라, 플랫폼을 "서비스"의 형태로 일정 금액을 받고 제공해 주는 것입니다. 이 서비스들을 통털어 클라우드 플랫폼이라고 하는 것이죠.


      아래
      그림은 현존 하는 클라우드 플랫폼들이 제공하는 서비스를 분류해 놓는 도식 입니다.

      클라우드 컴퓨팅을 제공하는 글로벌 벤더들은 서비스들 중에 일부 또는 전부를 제공하고 있습니다.

      SaaS, IaaS, PaaS
      없는(?) 말들이 난무 합니다. 관련해서 좋은 있으니 참고하세요!

       

      < 출처 : http://nexr.tistory.com/ >

       

      오늘은 정도로 클라우드에 대한 설명을 마치겠습니다. (앞으로 ~ 계속 됩니다)

      광범위고 추상적인 개념이다 보니 아직은 멀게만 느껴집니다.

      앞으로 Azure 통해 프랙티스를 경험해 보고 실제로 사용하면 많이 가까워 있겠죠? ^^

       

       

      An Overview of The Windows® Azure™ Platform

       

      < 여기서 잠깐! >

      Window Azure Azure Platform 다른 것입니다.

      Window Azure Azure 플랫폼에서 운영체제를 담당하는 부분입니다.! 


      Azure Platform?
       


      Azure Platform 은 클라우드
      운영체제(Windows Azure) 와 클라우드 컴퓨팅을 위한 편의를 제공하는 다양한 서비스들(Live Service, .NET Service..) 을 말합니다.


       

      1. Windows Azure
       클라우드 운영체제입니다. 

      사진 및 동영상 등의 Blob(바이너리 형식의 큰 파일)을 저장하는 스토리지, 실제 연산 및 처리 작업을 수행하는 컴퓨팅, 서비스에 대한 관리의 역할을 제공합니다.
       

      2. 서비스 모듈들 

       Azure Platform 클라우드 컴퓨팅을 이용해 쉽게 개발할 수 있도록 다양한 서비스가 제공됩니다.


       기반 애플리케이션 모듈

      Live Services: Live Mesh 개념의 Social Service 애플리케이션 개발

      SQL Services: 클라우드 서비스용 SQL Server 연동 모듈

      .NET Services: 클라우드 애플리케이션 서비스 개발 프레임웍

       
       전용 애플리케이션 모듈

      Sharepoint Services: 협업 관련 서비스 개발

      Dynamics CRM Services: CRM 관련 서비스 개발


      Windows Azure?

       
      Windows Azure
      는 레드 독(Red Dog)이란 코드명으로 알려진, 마이크로소프트의 클라우드용 운영체제로, 마이크로소프트가 데이터센터에서 운영하게 될 Azure Platform의 핵심 요소입니다. 또한, Windows Azure 는 클라우드용 애플리케이션 개발자들을 위한 개발 환경이기도 하지요.

       > 최신 CTP 다운로드

       > Azure 컬러 설명

       > Windows Azure 블로그


      처음에는 Azure 관련 자료를 찾아보면 수록 이름도 헷갈리고 서비스들의 역할이 아리송 했는데요, Azure MSDN 개발자 사이트 화면에서 바로 "Window Azure 클라우드 운영체제" 라는 말을 보고 "아하" 했답니다.

       

      윈도우나 리눅스 같은 운영체제의 제일 주된 역할은 무엇일까요?

      중요한 역할 중에 하나가 하드웨어 자원을 사용 하는 추상화 방법(HAL) 제공함으로써 소프트웨어 작동 환경을 만들어 주는 것입니다.

       

      같은 맥락에서 보면, 클라우드 운영체제인 Azure 클라우드 자원을 관리하고 추상화 사용 방법을 제공함으로써 컴퓨팅 환경을 제공하는 입니다.

      ( 클라우드 자원이란 위에서 언급한 복수의 데이터센터(IDC) 가상화 기술을 통해 소프트웨어, 하드웨어, 네트워크, 컴퓨팅 파워 등의 전산 자산 입니다. )

       

      아직 모르시겠다구요? FAQ 참고해 주세요!



      마치면서...

      다음 포스팅에서는 Azure 플랫폼을 구성하는 기능들에 대해 상세히 살펴보고 실제 Azure 서비스를 사용해 보겠습니다!