지난 아티클에서는 Phalanger와 PHP 사이에 차이점들이 있다고 말씀드렸습니다. 구체적으로 어떤 차이점들이 있을까요? 여러 프로그래밍 언어를 지원한다는 사실이 가장 큰 차이점이고 닷넷 기반 위에서 실행된다는 것이 구분되는 점이겠지만 이런 점을 차치하고 PHP 관점에서 차이점을 살펴본다면 지금 이야기하려는 토픽들에 대한 이야기가 빠질 수 없을 것입니다.

App_Code 폴더의 사용

Phalanger가 ASP.NET을 기반으로 하고 있기 때문에 자동으로 이어받는 특성으로, App_Code 폴더의 사용에 관한 부분이 있습니다. ASP.NET에서는 App_Code 폴더 안에 낱개 코드 파일들을 넣어두면 이것을 자동으로 웹 페이지의 서버 런타임에서 자유롭게 가져다쓸 수 있다고 하였는데, Phalanger도 마찬가지입니다. 웹 페이지를 렌더링하기 위한 목적이 아닌 공통이 되는 PHP 코드를 이 폴더에 넣어두기만 하면 자동으로 이 폴더에 속한 모든 PHP 코드들이 글로벌 문맥 상에서 사용 가능하게 활성화됩니다.

단, 조심해야 할 부작용이 하나 있다면 여기에 지나치게 많은 코드를 배치할 경우 컴파일 시간이 늘어나서 처음 사이트를 시작할 때 시간이 오래 걸리게 될 가능성이 있습니다. 안타깝게도 C나 C++처럼 병렬 컴파일은 아직 지원되지 않기 때문에 컴파일 시간이 오래 걸릴 경우 다양한 문제를 야기할 가능성이 있습니다.

php.ini와 같은 Global Configuration이 아닌 web.config에 의한 설정

PHP의 경우 설정을 변경하기 위해서는 PHP 전체의 설정을 주관하는 php.ini 파일을 업데이트하거나, PHP를 다시 컴파일하여 설치하는 번거로운 과정을 거쳐야만 모듈에 대한 설정이나 추가/제거가 가능했습니다. 하지만 Phalanger의 경우 현재 만들어진 응용프로그램 풀마다 다른 설정을 가지도록 구성할 수 있으므로 좀 더 자유도 높은 설정이 가능합니다. 이를 위해서 web.config 파일을 수정하고 저장하기만 하면 됩니다.

이러한 설정을 다루기 위해서는 phpNet이라는 XML 요소를 web.config에 지정해야 하는데, 그냥 지정할 수는 없고 반드시 적절한 처리기를 연결해주어야 합니다. web.config은 단순한 XML 파일이 아니라 닷넷 프레임워크가 직접 내용을 검사하고 분석하는 프로그램 코드의 일부이기 때문에 규칙을 준수하는 것이 매우 중요합니다.

phpNet 요소를 추가하려면 web.config에서 <configuration> 요소의 제일 첫 번째 노드로 아래 XML 조각이 배치되어야 합니다.

<configSections>
<section name="phpNet" type="PHP.Core.ConfigurationSectionHandler, PhpNetCore, Version=3.0.0.0, Culture=neutral, PublicKeyToken=0a8e8c4c76728c71" />
</configSections>

그 다음, 보기에 편리한 위치에 phpNet 요소를 추가합니다. 보통 아래의 코드 조각으로 최초 설정을 시작하면 무난합니다.

<phpNet>
<classLibrary>
  <add assembly="PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb" section="bcl" />
  <add assembly="PhpNetXmlDom, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03" section="dom"/>
</classLibrary>   
</phpNet>

php.ini 파일의 샘플 사본을 복사하여 php.ini 파일로 사용하던 것과 비슷한 접근 방법이지만 각 사이트 혹은 도메인 별로 따로 사용하는 web.config 파일 안에서 이러한 설정을 다루는 것이 중요한 차이점입니다. 그리고 무엇보다도 안심해도 좋은 것은 INI 파일처럼 프로그램이 잘못 다루게 될 가능성이 있는 파일이 아니라, XML의 형태로 설정 파일이 관리되므로 web.config 파일을 건드리는 다른 써드 파티 어플리케이션 때문에 Phalanger의 설정이 깨지거나 변형될 일이 거의 없다는 점입니다.

위의 기본 설정을 지정하면 Phalanger에서 기본적인 PHP API를 사용할 수 있으며, PHP5부터 기본으로 제공되는 SimpleXMLElement도 위의 설정으로 기본으로 활성화됩니다.

PHP/CLR의 사용

이제 위의 설정을 토대로 PHP/CLR을 활성화하여 닷넷 프레임워크의 기본 API를 Phalanger에서 즉시 호출하여 사용할 수 있습니다. 위의 <phpNet> 요소 아래에 다음의 XML 요소를 추가하면 됩니다.

<compiler>
  <set name="LanguageFeatures">
    <add value="PhpClr" />
  </set>
</compiler>

그리고 <classLibrary> 요소 아래에 .NET Framework 기본 어셈블리에 대한 레퍼런스를 추가합니다.

<classLibrary>
  <add assembly="mscorlib" />
  <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
  <add assembly="PhpNetClassLibrary, Version=3.0.0.0, Culture=neutral, PublicKeyToken=4af37afe3cde05fb" section="bcl" />
  <add assembly="PhpNetXmlDom, Version=3.0.0.0, Culture=neutral, PublicKeyToken=2771987119c16a03" section="dom"/>
</classLibrary>

이제 새로 추가한 코드가 의도한대로 잘 작동하는지 살펴보기 위하여, 이미지 리사이징을 수행하는 샘플 코드를 Phalanger 위에서 실행하도록 PHP/CLR 기반으로 코드를 만들어보도록 하겠습니다. 이 코드는 http://wiki.php-compiler.net/Code_Samples/Resize_image 의 예제를 발췌하여 조금 변형한 것입니다.

<?php
use System\Drawing\Bitmap;
use System\Drawing\Graphics;
use System\Drawing\GraphicsUnit;
use System\Drawing\Rectangle;
use System\Web\HttpContext;

function resize_imageSysDraw($from,$wid,$hgt)
{
  $bmp = Bitmap::FromFile($from);
  $fmt = $bmp->RawFormat;
  $new = new Bitmap($wid, $hgt);
  $gr = Graphics::FromImage($new);
  $gr->DrawImage($bmp,
    new Rectangle(0,0,$wid,$hgt),
    new Rectangle(0,0,$bmp->Width, $bmp->Height),
    GraphicsUnit::Pixel);
  $gr->Dispose();
  $new->Save(HttpContext::$Current->Response->OutputStream, $fmt);
  $new->Dispose();
}

resize_imageSysDraw(realpath('Penguins.jpg'), 320, 240);
?>

PHP/CLR의 경우 여느 닷넷 언어들과 마찬가지로 네임스페이스에 속한 클래스에 대한 참조를 use 명령어로 지정하고 있으며, 정적 멤버에 대해서는 :: 연산자를, 객체 생성은 new 연산자를 사용하였습니다. resize_imageSysDraw 함수에서는 ASP.NET의 HttpContext를 가져와서 기본 출력 대신 비트맵 이미지를 내보내도록 만들었고 그 결과 아래와 같이 축소된 이미지가 렌더링되서 나타나게 됩니다.

Phalanger의 LINQ 지원

이제 마지막으로 PHP/CLR의 하이라이트라고 할 수 있는 LINQ 지원에 대해서 살펴보겠습니다. LINQ는 Microsoft Research에서 C# 언어의 확장 사양인 C-omega 언어의 일부로 개발 중이던 사양을 정규화하여 Production Spec으로 만든 것으로, C# 이외에 VB.NET에도 영향을 주었으며 Prism이나 지금 소개하는 Phalanger에서도 개념을 적극 채택하여 정규 사양으로 활용 중입니다. 그리고 F#은 이러한 접근을 더욱 드라마틱하게 활용하여 함수형 언어로 발전시키기도 하였습니다.

LINQ에 대해서 이야기하려면 책을 한 권 따로 만들어야할 만큼 방대합니다. 그래서 자세한 이야기는 하지 않고, LINQ 자체에 대해서 진지하게 학습하기 원한다면 LINQ 관련 국내외 도서들을 검토하기 바랍니다. 개인적으로는 "생각하는 C# LINQ"라는 책을 추천합니다. :-)

http://kangcom.com/sub/view.asp?sku=200809180001&mcd=571

LINQ는 한 마디로 이야기하면, 프로그래밍 코드를 한 방향에서만 바라보도록 뷰 포인트의 시각을 고정한 것과 같습니다. 본디, 어떤 연관성이 있는 데이터 집합을 접근하는 방법에는 여러 가지 방법이 있을 수 있지만 LINQ는 데이터가 어떤 순서로 들어있든, 어떤 형태로 연결되어있든 관계없이 데이터를 꺼내올 수 있도록 도와주는 Iterator 패턴의 한 형태인 Enumerator를 조금 독특하게 해석하였습니다.

Enumerator가 열거할 대상을 미리 정할 수 있도록 만들고, 열거할 때 조건을 지정하여 필요없는 데이터는 건너뛸 수 있게 해준다던지 이런 취지에서 해석을 한 것이 LINQ입니다. 그리고 Enumerator를 수정하게 되는 시점이 이미 메모리 상에 저장된 데이터 셋에 대한 작업인지, 아니면 아직 수신되지 않은 미지의 데이터 셋에 대한 작업인지에 따라서도 지연 실행이냐 즉시 실행이냐 이렇게 구분하기도 하구요. 그러면서도 항상 잃지 않는 것은 핵심은 Enumerator라는 사실이며, 이에 입각하여 배열이나 리스트같은 정규화된 자료 구조로 변환할 수 있는 길을 항상 열어놓아 최대한의 유연성을 부여하기도 합니다.

어렵게 들릴 수도 있지만 Enumerator를 수정할 수 있게 해준다는 컨셉은 생각보다 활용 폭이 넓은데, 가장 가까이 있는 예로는 SQL 쿼리가 될 수 있습니다. 처음의 아이디어는 SQL 쿼리를 이용하여 전체 데이터 셋보다 가능한 적게 데이터를 반환하여 네트워크 트래픽을 줄이고 빠르게 데이터를 검색할 수 있도록 최적화하자는 것에 있었을 것이며, 이것을 좀 더 프로그래밍 언어와 친화적으로 만들 방법을 모색한 끝에 LINQ to SQL이 나타나게 된 셈입니다. 그리고 이를 필두로 접근할 수 있는 모든 유형의 컬렉션에 대해서 이런 아이디어를 대입하여 현재는 오픈 소스를 찾아보면 정말 엄청나게 많은 LINQ provider들을 발견할 수 있을 정도입니다.

이렇게 독창적이고 전례없던 기술을 Phalanger에서도 이용할 수 있다는 것은 매우 좋은 일입니다. <phpNet> 요소에 대해 PHP-CLR을 활성화하도록 설정을 수정한 후 아래 코드를 테스트해보기 바랍니다.

<?php
$myarray = json_decode('[
    {"label":"foo","name":"baz"},
    {"label":"boop","name":"beep2"},
    {"label":"foo","name":"baz1"},
    {"label":"boop","name":"beep3"},
    {"label":"foo","name":"baz2"},
    {"label":"boop","name":"beep1"}
]', true);

$result =
from $myarray as $x
where $x['label'] == 'foo'
select $x['name'];

foreach ($result as $x) {
    print($x.'<br />');
}

print_r($result);

?>

json_decode라는 기본 PHP 함수를 이용하여 JSON을 PHP 연관 배열로 바꾸고, 이것을 LINQ로 조회한 다음, 그 결과를 foreach 문을 통해서 출력하도록 만들었습니다. C#이나 VB.NET의 LINQ와 약간 다른 점은, from 절에서 in 연산자 대신 as 연산자를 사용하고 in 연산자와는 도치되는 좌/우항 관계를 가집니다. 즉, [나열 변수] in [데이터 소스] 에서 [데이터 소스] as [나열 변수]로 바뀝니다. 그리고 이것은 foreach 문에도 동일하게 적용됩니다. 아래는 실행 결과입니다.

PHP, JSON, 그리고 LINQ가 한 자리에 모여 매우 재미있는 상호 작용을 이룬 것을 볼 수 있습니다. 이 정도면 닷넷에서의 웹 프로그래밍이 이전과는 제법 많이 달라질 수 있다는 것을 체감할 수 있을 것입니다.

다음번에는 Phalanger가 기존 PHP의 모듈들을 어떻게 다루고 관리하는지에 대한 상세한 내용을 살펴보도록 하겠습니다. 긴 글 읽어주셔서 감사합니다. :-)

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Web Development > Phalanger' 카테고리의 다른 글

Phalanger와 PHP의 차이점들  (0) 2012/02/10
PHP x C# x VB.NET = ASP.NET  (0) 2012/02/08
Phalanger와 WebMatrix의 완벽한 만남  (1) 2012/02/06
PHP와 .NET의 완벽한 만남 - Phalanger  (0) 2012/02/04
Posted by Windows Azure MVP 남정현 (rkttu.com)

지난 아티클에 이어 오늘은 Phalanger를 이용하여 C#과 VB.NET 코드를 동시에 활용하는 예를 한 번 조명해보려고 합니다. 사실 이것이 Phalanger의 하이라이트라고 하여도 무방하지 않습니다. 기존의 C#과 VB.NET 로직을 재사용하면서도 Phalanger로 빠르고 가볍게 웹 페이지를 풀어나가는 방식은 여러모로 웹 개발에 가속을 붙여줄 것입니다.

계속 설명하기 전에, Phalanger가 ASP.NET 위에서 실행되기 때문에 적용되는 한 가지 특수한 규칙을 이야기할 것이 있습니다. 바로 미리 정해진 이름의 폴더인데, Bin, App_Code 폴더입니다. 그 외 많은 폴더들이 있지만 지금은 두 가지만 살펴보겠습니다.

앞에서 이야기한대로 ASP.NET은 닷넷 프레임워크를 기반으로 작동한다고 하였고, 닷넷 프레임워크는 언어의 종류와 무관하게 MSIL이라는 코드로 컴파일되서 나오는 DLL 파일들을 취급할 수 있습니다. 그렇게 만들어지는 DLL 파일들은 Bin 폴더에 파일을 넣어주면면 자동으로 참조가 활성화되서 해당 웹 사이트 안의 모든 닷넷 코드에서 클래스 라이브러리를 사용할 수 있게 됩니다. 단, 주의할 것은 이 폴더 안에 아무 DLL이나 넣을 수 있는 것은 아니며 반드시 닷넷으로 컴파일된 DLL만 포함시킬 수 있습니다.

그리고 이번 아티클에서 가장 핵심이 되는 기능을 제공하는 폴더인 App_Code 폴더는, 컴파일을 하려는 모듈에 대한 코드를 여기에 넣어서 모든 페이지에서 공유할 수 있습니다. 기본적으로 이 폴더에는 한 종류의 언어에 해당되는 파일들만 넣을 수 있고, 그외 다른 언어의 파일이 포함되면 아래 이미지와 같은 오류가 발생합니다. 하지만 제가 이전에 소개했던 약간의 추가 설정을 적용하면 App_Code 폴더에서 여러 프로그래밍 언어를 동시에 사용할 수 있습니다.

위와 같이 나타나는 문제를 해결하기 위하여, App_Code 폴더 자체에서 사용할 언어는 Phalanger로 정하고, App_Code 폴더 안의 두 번째 수준의 디렉터리들에 C#이나 VB.NET 같은 언어를 사용하기로 결정합니다. 그리고 web.config 파일에 다음과 같이 <system.web> 요소 아래에 하위 디렉터리가 존재한다는 것을 알려줍니다.

<system.web>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="utf-8" />
<compilation>
  <codeSubDirectories>
    <add directoryName="Cs" />
    <add directoryName="Vb" />
  </codeSubDirectories>
</compilation>
</system.web>

그리고 App_Code 폴더에 각각 Cs 폴더와 Vb 폴더를 만듭니다. 폴더 이름에서 바로 알 수 있듯이 각각 C#과 VB.NET 코드를 따로 보관할 수 있도록 하고, 위의 그림처럼 오류가 발생하지 않으면서 자동으로 C#과 VB.NET으로 만든 코드를 Phalanger에서 액세스할 수 있도록 하게 할 것입니다. 이것으로 준비는 모두 끝났으며 우리가 원하는대로 C#과 VB.NET 코드를 추가하기만 하면됩니다.

C# 코드

using System;
using System.Collections.Generic;
using System.Web;

/// <summary>
/// Summary description for ClassName
/// </summary>
public class ClassName
{
    public string Name { get; set; }
    public int Age { get; set; }
    public override string ToString() {
        return String.Format("Name: {0} / Age: {1:D3}", Name, Age);
    }
}

VB.NET 코드

Imports Microsoft.VisualBasic

Public Class ClassName2
    Public Content As String
End Class

그리고 중요한 부분이 있습니다. Phalanger가 서브 디렉터리에 있는 코드들을 컴파일하였을 때 각각 따로 만들게 될 코드 조각들을 인식할 수 있도록 최소한 1개 이상의 임의의 PHP 파일이 필요합니다. 이후 아티클에서 따로 설명하겠지만 Phalanger는 App_Code 폴더 안에 있는 PHP 파일을 모두 자동으로 include하는 동작을 가지고 있습니다. (이것이 이전의 Original PHP와는 다른 부분입니다.)

지극히 일상적이고도 당연한 클래스 선언을 담고 있는 파일을 각 디렉터리에 추가하였습니다. 이제 웹 매트릭스의 폴더 레이아웃은 아래 그림과 같은 형태가 되면 됩니다.

이제 마지막으로 index.php 코드를 아래와 같이 작성합니다. 아래와 같이 작성하면 정말 PHP에서 C#과 VB.NET 코드를 자동으로 불러올 수 있을까요? 기대됩니다. :-)

<?php       
// C#
$test1 = new ClassName();
$test1->Name = "남정현";
$test1->Age = 2012-1987;
print $test1->ToString().'<br />';
print get_class($test1).'<br />';

// VB.NET
$test2 = new ClassName2();
$test2->Content = '<strong>안녕하세요!!!</strong>'.'<br />';
print $test2->Content;
print get_class($test2).'<br />';

phpinfo();
?>

ClassName은 C#으로, ClassName2는 VB.NET으로 만든 코드입니다. PHP/CLR 확장의 도움으로 Name, Age, Content 프로퍼티에 문자열을 대입하고 있으며, print 문을 이용하여 웹 페이지 상에 문자열을 출력합니다. 그리고 get_class라는 기본 PHP 함수를 사용하여 클래스 형식명을 가져오는 일도 하려고 하는군요. 마지막으로는 phpinfo() 함수를 호출하여 Phalanger 및 서버 시스템에 대한 정보도 덤프로 출력합니다. 이제 이 페이지를 실행해보면 아래와 같이 나타나게 될 것입니다. :-)

훌륭합니다! C#과 VB.NET 컴파일러를 따로 부르는 일 없이 앉은 자리에서 한 번에 코드를 컴파일하고, 이것을 PHP에서 보기 좋게 가져다 쓰는 일까지 해냈습니다.

다음 아티클에서는 마지막으로 Phalanger만의 고유한 기능이라고 할 수 있는 자동 include에 대해서 마지막으로 이야기해볼까 합니다. Original PHP에서는 include나 include_once 같은 함수를 어떤 인과 관계에 따라서 포함하게 될 것인지, 그리고 순서에 대해서도 많은 고민을 해야 했지만 Phalanger는 이러한 부분에 대한 고민을 많이 덜어낼 수 있습니다. 그리고 그 중심에는 App_Code 폴더의 역할이 크다고 했는데요, 이 부분에 대해서 집중적으로 살펴보려고 합니다.

 

저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License

'Web Development > Phalanger' 카테고리의 다른 글

Phalanger와 PHP의 차이점들  (0) 2012/02/10
PHP x C# x VB.NET = ASP.NET  (0) 2012/02/08
Phalanger와 WebMatrix의 완벽한 만남  (1) 2012/02/06
PHP와 .NET의 완벽한 만남 - Phalanger  (0) 2012/02/04
Posted by Windows Azure MVP 남정현 (rkttu.com)

오늘 소개하려는 Visual Studio 확장 기능은 멀티 타기팅 팩의 기능을 매우 적극적으로 활용하는 똑똑한 확장 기능이다. 실무에서 3.5세대 혹은 4세대 닷넷 프레임워크를 적극적으로 사용 중인 개발자들이 국내에도 많이 있을텐데 이 경우 숟한 고민에 부딪히게 되는 것 중에 하나는 다중 플랫폼을 지원해야 한다는 점이다. 대충 열거해봐도 세 가지 이상은 된다. ASP.NET, Windows Presentation Foundation, Silverlight, 경우에 따라서는 XNA Game Studio나 Windows Phone 7.1까지 생각해야 하는 셈이다.

물론 신경써서 세심하게 잘 프로그래밍할 수 있을만큼 노련하다면야 이런 도구가 굳이 필요하지는 않겠지만 사람이 하는 일인지라 신경쓸 것이 많아지면 자연스레 귀찮을 수 밖에 없고 실수도 어디선가는 꼭 나온다. 이런 불분명하고 애매한 상황을 도구를 통하여 정확하게 잡아낼 수 있다면 괜찮지 않을까? Microsoft 개발 팀이 이런 문제를 해결해 줄 명쾌한 답을 Visual Studio Gallery에 올려놓았으니 참고하기 바란다. 아래의 URL에서 다운로드할 수 있다.

http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/

Portable Library Tools를 설치하면 Visual Studio에 새로운 프로젝트 템플릿이 C#과 Visual Basic .NET에 대하여 Windows 카테고리 아래에 아래 그림과 같이 나타날 것이다.


시험삼아 새 프로젝트를 한 번 만들어보자. 이름에서 알 수 있듯이 특별할 것이 없는 공통되는 코드를 묶기 위한 클래스 라이브러리 프로젝트로서 만들어지며 일상적으로 여러분의 코드를 추가할 수 있다. 그런데 정말 중요한 것은 프로젝트 속성 안에 들어있다. 프로젝트 속성을 열어보면 아래와 같이 재미있는 구성을 볼 수 있다.

목표로 하는 프레임워크를 이전처럼 하나만 선택하는 것이 아니라 하나 이상을 동시에 지정할 수 있다. 이는 다시 말해서 이들 프레임워크의 공통 분모만을 사용하여 클래스 라이브러리를 정확히 프로그래밍할 수 있도록 보증한다는 의미이다. 그리고 Change 버튼을 클릭하면 더 유용한 쓰임새를 찾을 수 있다.

Visual Studio와 함께 설치된 다른 멀티 타기팅 팩이 있을 경우 여기에 모두 열거되어 여러분이 선택할 수 있도록 할 수 있다. 프로젝트의 종류가 많고 정말 일반적이면서도 널리 쓰여야 할 클래스 라이브러리를 만들어야 한다면 여기서 선택을 어떻게 하는가에 따라서 사용할 수 있는 API가 자동으로 필터링된다. 만약 위에서 선택한 플랫폼에서 사용할 수 없는 API에 대한 내용이 발견되면 곧바로 빌드 오류로 나타나기 때문에 문제를 쉽게 찾아낼 수 있다. 그리고 여기서 선택한 대로 해당 프로젝트에서 레퍼런스로 추가할 수 있으므로 생산성도 높일 수 있다. 즉, 솔루션이나 프로젝트를 여러벌로 나눠 관리할 필요 없이 한 곳에서 모두 관리할 수 있다.

이 도구를 사용하기 위해서는 Visual Studio 2010 전체 버전이 필요하며 SP1이 설치되어있어야 한다. 그리고 다른 타기팅 팩이 필요하다면 아래 URL에서 추가적으로 설치할 수 있다. 타기팅 팩은 그 자체로 설치할 수 있는 것은 아니고 보통은 해당 플랫폼에 대한 SDK 안에 같이 수록된다는 점에 유의해야 한다.

http://go.microsoft.com/fwlink/?LinkID=153626

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

안녕하세요. 오랫만에 블로그에 글을 올립니다. 지난번 Visual Studio Camp에서 옴니버스 형식의 세미나로 Visual Studio 2010 Service Pack 1에 대하여 말씀을 드렸던 세션이 있는데, 발표 자료와 더불어서 Visual Studio 2010 SP1에 대한 간략한 소개를 위하여 글을 씁니다.


Visual Studio의 새 도움말 시스템

Visual Studio 2010 RTM 버전부터는 새로운 형태의 도움말 시스템이 도입되는데, 로컬 웹 서버를 통하여 도움말 컨텐츠가 제공되는 방식으로 이전의 Visual Studio 2005와 Visual Studio 2008에서 제공되던 방식과 다르게 제공됩니다. Visual Studio 2005와 Visual Studio 2008의 경우 자체 URI Scheme을 Windows Registry에 등록하고 이를 Internet Explorer를 통하여 탐색할 수 있도록 확장하는 방식이었습니다. 그러나 새로운 도움말 컬렉션을 추가하거나 삭제하는 과정에서 시스템 성능에 따라 재배열 시간이 상당히 오래 걸리는 문제가 있어 불편한 점도 있었습니다. 이러한 방식 대신 더 단순하지만 더 유연한 방식으로 바꾸게 된 듯 합니다.

그렇지만 이전 버전에서 제공되던 색인, 검색 기능 등이 웹 사이트 형식으로 바뀌면서 이전에 사용했던 기능들이 사라져서 아쉬운 점도 있었는데 이번 Service Pack 1에서는 다시 Help Browser Software가 부활했습니다. 그래서 로컬 웹 서버로 컨텐츠를 보여주는 것은 동일하지만 Visual Studio를 통해서 컨텐츠를 탐색하면 Help Browser가 별도로 나타납니다.

그리고 이번 도움말 시스템에서의 백미는 인터넷을 통한 업데이트가 가능해졌다는 점입니다. 실제로 설치한 적이 없는 제품이라 할지라도, 그리고 DVD를 통해서만 설치할 수 있는 전체 버전의 MSDN 안에서만 제공되던 컨텐츠까지도 인터넷을 통하여 항상 최신 버전을 다운로드받아 로컬 도움말 컬렉션에 추가하거나 필요하지 않으면 삭제할 수 있습니다.



Silverlight 4에 대한 지원 추가

Visual Studio 2010 SP1을 설치하면 별도로 Silverlight 4에 대한 Tools for Visual Studio를 추가 설치할 필요가 없습니다. Silverlight 4부터는 이전의 WPF보다 작지만 웹이 아닌 데스크탑 및 오프라인 환경에서 잘 동작하는 응용프로그램을 제작할 수 있는 기능이 더 완벽하게 제공됩니다. 이러한 기술 전반은 권한 상승이 적용된 실버라이트 응용프로그램에서 가능한 것이며, 여기에는 파일 입출력이나 로컬 COM 컴포넌트와 연계하는 방안이 포함되어있습니다. 아래의 예제는 권한 상승이 적용된 Silverlight 4 기반 응용프로그램 샘플의 소스 코드이며, 사용자 프로필 디렉터리 내의 "내 그림" 폴더에 있는 이미지들을 열거하고 뷰어를 통하여 보여주는 예제입니다.



위 프로그램의 소스 코드 중 파일 입출력에 대한 소스 코드를 실제로 발췌하면 다음과 같습니다.

private void UpdateFileList()
{
    string targetPath = Environment.GetFolderPath(
        Environment.SpecialFolder.MyPictures);
 
    List<object> content = new List<object>();
    foreach (string eachFile in Directory.EnumerateFiles(targetPath))
    {
        switch (System.IO.Path.GetExtension(eachFile).ToLower())
        {
            case ".jpg":
            case ".jpeg":
            case ".png":
                break;
 
            default:
                continue;
        }
 
        content.Add(eachFile);
    }
    this.fileList.ItemsSource = content;
}
Visual Studio 2010 SP1을 설치한 후 Silverlight 프로젝트를 생성하려고 하면 다음과 같이 대화 상자가 나타나는데 이 때 Silverlight 4를 사용하도록 지정하면 사용이 가능합니다.


IIS Express 7.5에 대한 지원 추가

Visual Studio 2005부터는 Cassini Web Server라고 불리던 ASP.NET Development Server를 통하여 전체 버전의 IIS가 없어도 쉽게 ASP.NET 응용프로그램을 테스트할 수 있는 환경이 제공되었습니다. 그러나 Visual Studio 2008의 등장과 더불어 IIS 역시 대폭 업그레이드되어 Windows Server 2008부터는 완전히 새로워진 아키텍처를 기반으로 하는 IIS 7이 등장하게 됩니다. 이에 따라, 어느 정도 호환성을 보장하기는 하지만 이전의 IIS와는 많이 달라졌기 때문에 Cassini Web Server 만으로는 테스트가 어려운 점이 많았습니다. 통합 IDE의 이점도 확보하고, 전체 버전의 IIS를 사용하지 않으면서도 충분히 모든 기능을 점검해볼 수 있는 방향으로 가기 위하여 IIS Express가 등장하게 됩니다.

IIS Express를 사용하는 것은 실제 IIS를 사용하는 것과 비교했을 때 다음과 같은 장점이 있습니다.

  • ASP.NET Development Server와는 달리 FastCGI 모듈을 호스팅할 수 있으므로 PHP와 같은 FastCGI 지원 웹 언어들을 같은 환경에서 동시에 테스트할 수 있습니다.
  • 웹 프로젝트에서 IIS를 사용하도록 지정한 경우, 관리자 권한을 얻을 수 없는 다른 컴퓨터에서는 웹 프로젝트를 열 수 없는 문제점이 있었으나 IIS Express를 사용하도록 하면 이런 제약이 없습니다.
  • IIS Hosted Core를 사용하므로 전체 버전의 IIS가 없어도 상관이 없으며, IIS Express가 설치되어있지 않은 경우 Visual Studio가 자동으로 이를 감지하여 Web Platform Installer를 호출하여 IIS Express가 설치될 수 있도록 해줍니다.
  • 개별 프로세스 형태로 실행되므로 여러 사람이 사용하는 컴퓨터에서도 시스템 설정을 편집하는 일 없이 안전하게 실행할 수 있습니다.

HTML 5와 CSS 3에 대한 문법 검증 지원

Visual Studio 2010 SP1 및 Visual Web Developer 2010 Express SP1을 설치하면 HTML 5, XHTML 5 및 CSS 3에 대한 지원이 기본으로 내장되어있어 정확한 코딩이 가능합니다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>HTML5 Test</title>
    <link type="text/css" rel="Stylesheet" href="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/themes/redmond/jquery-ui.css" /> 
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.1.js"></script>
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $('#test').dialog({ show: "drop", hide: "drop", width: "auto", height: "auto", title: "html 5 rocks!" }).show();
        });
    </script>
</head>
<body>
    <div id="test">
        <video src="demo.mp4" width="700" height="500" id="testVideo" autoplay="autoplay">
            <strong>Your web browser does not support video element.</strong>
        </video>
    </div>
</body>
</html>



위의 그림과 같이 검사할 문법을 지정하여 프로그래밍하면 꼭 지정해야 할 프로퍼티를 검사하여 경고를 띄우거나, 프로퍼티에 포함되어야 할 값의 유형을 자동으로 유추해주어 규칙을 몰라서 잘못 코딩할 가능성을 예방해 줍니다.

그 외에 눈여겨 볼만한 것들

Visual Studio 역시 최근에 급격한 변화를 맞이하고 있습니다. 빠르게 변화하는 기술을 수용하기 위해서 Internet Explorer의 런칭 주기가 짧아진 것과 비슷하게, Visual Studio 역시 자주 새로운 형태의 도구와 프레임워크를 업데이트하고 있으며, 이러한 노력의 일환으로 Express Edition의 가치가 더 높아지고 있습니다.

대표적으로 Visual Studio LightSwitch와 Visual Web Developer Express Edition, 그리고 Visual Studio for Windows Phone 7이 그 예시입니다. 전체 버전의 Visual Studio 제품 구성을 바꾸지 않고 안전하게 테스트해볼 수 있는 방법으로서도, 그리고 실무 개발 환경에서도 유용하게 쓰일 수 있습니다.

그러나 서비스 팩 출시와 더불어서 Express Edition의 경우 한 박자 정도 업데이트가 늦어지는 편입니다. 이 때문에, 먼저 설치한 서비스 팩과 나중에 설치한 RTM 버전의 Express Edition 사이의 버전 차로 인한 충돌 문제가 이슈가 되었던적이 있는데, 이번 버전부터는 그러한 상황이 있을 경우 Visual Studio가 시작되기 전에 해당 문제점을 사용자에게 정확히 알려줍니다. 그 외에, 다양한 도구와 런타임에서 기능 및 성능 향상이 있었습니다.
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

[Internet Explorer에 대한 내용을 정정하였습니다.]

이전부터 포터블 응용프로그램을 만들기 위한 시도는 많이 있었고 최근들어서는 이러한 시도들이 가상화 기술의 한 장르로 발전하게 되었습니다. 대표적으로 Thinstall이 과거에 있었는데 이 솔루션은 VMware ThinApp으로 재탄생했지요. 그리고 Microsoft 역시 App-V 기술을 제공하고 있습니다. 그런데 오늘은 이러한 응용프로그램 가상화 솔루션에 클라우드 기술, 그리고 적절한 사용자 인터페이스까지 결합한 해외 서비스 하나를 소개해볼까 합니다. 바로 roozz입니다.


roozz는 Firefox와 Google Chrome 브라우저에서 사용할 수 있는 전용 플러그인을 다운로드받아 설치하고, Application Feed 페이지를 방문하기만 하면, Application이 Windows 기반이었든, Linux 기반이었든 관계없이, 거기에 roozz 플러그인을 설치하고 실행하는 컴퓨터 역시 Windows이든 Linux이든 관계없이 가상화된 소프트웨어가 별도의 격리된 공간 안에서 실행됩니다. 뿐만 아니라, 응용프로그램 가상화를 기반으로 하기 때문에 3D 게임까지 지원됩니다.

제가 평소에 애용하는 개발 도구 중 하나인 LINQpad 역시 roozz에서 호스팅되는 응용프로그램 중 하나입니다. 시험 삼아서, roozz에서 호스팅되는 LINQpad를 직접 실행해보았습니다. 그리고 편의를 위하여, Google Chrome의 웹 어플리케이션 생성 기능을 LINQpad roozz feed page에 대해 적용하여 실행해보았습니다. 그 결과 아래와 같이, 마치 Native application과 같은 UI가 구현되는 것을 볼 수 있습니다.


.NET Framework를 사용하는 응용프로그램임에도, LINQ expression을 잘 실행하고 있는 것이 보입니다. .NET Framework 기반의 응용프로그램을 이와 같이 가상화를 통하여 원활하게 사용할 수 있다는 것은 Windows 개발자에게도 굉장한 메리트가 아닐 수 없습니다. 그런데 여기서 한 가지 궁금한 점이 생깁니다. 지금 이렇게 보는 화면이 원격지 서버의 화면을 기반으로 하는 것은 아닐까 하는 것이지요. 시험삼아서 파일 저장과 로드 기능을 테스트해보았습니다.


터미널 서비스나 Citrix Xen과 같은 VDI나 Remote Session 서비스와는 달리, 로컬 컴퓨터에 직접 저장하는 대화 상자가 나타납니다. 그리고 한 가지 더 확실한 증거가 있는데, 작업 관리자의 메모리 사용량을 보면 알 수 있습니다.


커서를 가져다 놓은 부분에서 알 수 있듯이, LINQpad 자체는 원격지가 아닌 현재 컴퓨터의 메모리를 사용하고 있습니다. 단, 응용프로그램 가상화를 기반으로 하므로 .NET Framework를 메모리에 올려서 사용하기 때문에 다소 메모리 사용량이 많은 것이 보입니다. 하지만, 메모리 사용량과는 별개로 이러한 수준의 기능을 제공할 수 있는 서비스라고 한다면 상당히 괜찮지 않을까 생각합니다.

roozz에 이와 같이 소프트웨어를 게시할 수 있는 방법은, 소스 코드가 아닌, 컴파일된 - 혹은 - 패키징된 소프트웨어 사본을 roozz에 전송하는 것입니다. 이렇게 전송된 사본은 roozz Conversion Tool에 의하여 재배포 가능한 형태로 구성되며 이것을 사용자가 받아볼 수 있는 형태로 게시됩니다. 좀 더 자세한 내용은 http://www.roozz.com/node/3 에서 확인할 수 있습니다.

Roozz로 게시된 LINQpad를 사용해보시려면, Google Chrome이나 Firefox로 아래 웹 사이트를 방문해 보시면 됩니다. 최초에 Roozz Plugin을 설치한 후 페이지를 새로 고치면 됩니다. 아쉽게도, 현재 Internet Explorer는 지원되지 않는다고 합니다. Internet Explorer의 경우 보호 모드때문에 roozz 플러그인이 곧바로 실행되지는 않으며, 적어도 신뢰할 수 있는 사이트 목록에 http://prod.roozz.com 을 추가한 이후에야 아래와 같이 동작합니다. Internet Explorer 9에서도 잘 동작합니다. :-)

http://prod.roozz.com/apps/61/LINQPad.htm

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

이전 글: [Windows Azure Platform/A Lap around Cloud Computing] - A Lap around cloud computing – 지금이 여러분의 이력서를 새로 쓸 시간 

뜬금없이 근두운 이야기가 무엇인가 하고 놀라는 분들이 있으리라 생각한다. 이해가 빠른 분들이 계실 것이므로 단도직입적으로 말하면, 필자가 의도한 그대로, Cloud Computing 이야기를 하고자 했던 것이다. 우리의 머릿속 한 구석에 큰 존재감을 과시하며 차지하고 있는 전설 속 원숭이 손오공의 근두운을 IT 세상에서는 누구나 하나씩 다 가지고 있는 것이다.

여러분이 사용하고 싶어하는 근두운의 종류 또한 다양하다. 그래서 앞서 설명했던 Windows Live, Windows Server 기반 Private Cloud, Office 365가 있었고, 오늘은 마지막으로 개발자와 IT 전문가들의 관점에서 적극적으로 검토해 볼 가치가 있고 든든한 파트너 역을 맡아줄 Windows Azure Platform이라는 근두운을 이야기해볼 생각이다.

IT 관리자의 관점에서 보는 Windows Azure Platform

PDC08에서 처음 소개된 Windows Azure Platform은 전적으로 개발자의 역할을 중시했던 플랫폼이었다. 이는 PDC09, 그리고 PDC 2010 직전까지도 지속되었고 꾸준히 그 색을 더해 나가고 있던 과정이었다. 하지만 PDC 2010에서 처음으로 세간에 루머로만 떠돌던 VM Role이 공식적으로 사용 가능하게 베타 서비스로 출시되었고 이에 따라 IT 관리자들의 관점에서도 Windows Azure Platform을 활용할 수 있는 기회가 대폭 늘어나게 되었다.

Windows Azure Platform이 IT 관리자들에게 제공하는 주요 이점은 한 마디로 정리하면 기존의 IT 자산과 맞물려 사용할 수 있는 다양한 기회를 제공한다는 점이다. Microsoft의 Public Cloud는 모든 것을 Cloud로 올려야 한다고 말하지 않는다. 대신, 네트워크 수준에서의 통합부터 시작하여 Cloud 내부 및 외부에서 발생할 수 있는 문제를 다양한 방법으로 해결할 수 있도록 도와준다.

Windows Azure의 VM Role은 On-Premise 시스템을 분리 해체하는 작업을 거치지 않고 곧바로 Windows Azure 데이터센터에 서버를 올려놓는 방법이다. 기존에 먼저 소개된 Web Role 및 Worker Role과 달리 Windows Server 2008 R2 운영 체제 전체를 하나의 완전한 Role로 채택하여 사용할 수 있는 기법으로, 여러분이 기존에 어떤 라이선스를 가지고 있던지 관계없이 Windows Azure VM Role 라이선스로 전환할 수 있도록 해준다.

매우 이상적인 이야기처럼 들릴 수도 있지만 사실 중요한 문제가 두 가지가 있다. 라이선스에 관한 것이 있고, 또 다른 하나는 기술적인 구성 상의 문제이다. 다음의 표에 대략적인 내용을 언급해두었다.

구성 요소 및 역할

변경 방향

3rd Party Software

Plan A: Public Cloud 호환 라이선스로 재계약

Plan B: 기존 서버를 유지하고, Windows Azure Connect로 네트워크 통합 / 단 Traffic 추가로 인한 변동 사항은 해당 공급자와 재 협상 필요

3rd Party Software Data

SQL Server Embedded DB

è MDF 및 LDF 파일을 SQL Server에 연결하고, 해당 DB를 SQL Azure로 이관해야 함

è MDB 파일이나 ACCDB 파일의 경우 SQL Server로 이관 후 SQL Azure로 이관해야 함

기타 데이터베이스

è 기존 서버를 유지하고, Windows Azure Connect로 네트워크 통합

SQL Server

Plan A: SQL Azure로 부분/전체 Migration

Plan B: 관계 지향적이지 않고 대용량 DB가 필요한 경우 Windows Azure Table Storage 사용

Plan C: 기존 서버를 유지하고, Windows Azure Connect로 네트워크 통합

Exchange Server

Plan A: Office 365로 부분/전체 Migration

Plan B: 기존 서버를 유지하고, Windows Azure Connect로 네트워크 통합

SharePoint Online

Plan A: Office 365로 부분/전체 Migration

Plan B: 기존 서버를 유지하고, Windows Azure Connect로 네트워크 통합

Lync Online

Plan A: Office 365로 부분/전체 Migration

Plan B: 기존 서버를 유지하고, Windows Azure Connect로 네트워크 통합

Active Directory

AD DS, AD LDS 모두 기존의 On-Premise 시스템을 Windows Azure Connect를 경유하여 활용하는 것이 최선

 

라이선스에 관한 문제의 본질은 다음과 같다. Windows Azure Compute를 통해서 서비스가 실행되면, Service Level Agreement (SLA) 계약 이행을 위하여 기본적으로 VM을 1대 이상 사용하는 것을 전제로 한다. 최소 1대만을 유지하도록 설정해도 상관은 없지만, 필연적으로 사용량이 증가하고 서비스를 위하여 배치된 VM들의 상태가 바빠지는 것이 감지되면 자동적으로 Fabric Controller가 원본 VM 이미지를 복제하여 새로운 VM을 복제하기 시작한다. 이것이 의미하는 바는 단순하다. 물리적인 Instance의 수가 자동으로 늘어나므로 그 안에 포함된 3rd Party 소프트웨어에 대한 라이선스도 같이 계산되어야 하고, 그것이 CPU 기반 라이선스이든 연결 개수 기반 라이선스이든 상관이 없는 것이다. 양쪽 라이선스 모두 있는 그대로 (as-is) 해석을 한다면 Public Cloud 내에서는 상식을 넘는 금액을 요구할 수 밖에 없다.

이를 해결하기 위해서는 해당 소프트웨어 공급자가 Public Cloud에 대응되는 사용량 – 또는 – 사용 시간 기반 라이선스를 지원해야 하며, 대다수의 경우 이를 지원하지 않을 것이므로 이러한 소프트웨어를 포함하는 서버를 On-Premise 환경에 배치하고, 이들 서버에 대한 종속성을 지니는 별도의 VM Role, Web Role, Worker Role 만을 Windows Azure에 게시한 후 Windows Azure Connect로 상호 연동을 가능하게 만드는 것이 최선이다.

기술적인 문제의 본질은 다음과 같다. 주로 데이터베이스에 대한 부분과 관련이 깊은데, Windows Azure가 SLA 이행을 위하여 VM을 복제하고, 복제된 VM들의 목록을 기준으로 Load Balancer를 구현하는 것은 매우 바람직한 일이다. 그러나 기존의 서버 모델은 개별 서버가 데이터베이스까지 서버 내에 같이 포함하고 있는 경우가 많은데 여기에 대한 적당한 조치를 취하지 않고 그대로 VM Role로 전환하는 경우 우스꽝스러운 문제가 발생한다. 접속할 때 마다 데이터베이스의 내용이 달라지는 일이 발생하는 것이다. 이를 해결하기 위해서는 사용 중인 데이터베이스의 종류를 파악하는 것이 중요한데, SQL Server로 이관이 가능한 범주 안에 있는 데이터베이스들은 우선 SQL Server로 이관한 후, 이를 SQL Azure로 다시 이관하는 작업이 필요하다. 그리고 기존 응용프로그램들도 SQL Azure를 데이터 소스로 사용할 수 있도록 일부 수정이 필요하다.

SQL Azure로 이관하는 것을 누구나 쉽게 검토해볼 수는 있다. 그러나 생각 외로 만만찮은 문제들이 쌓여있다. 기존에 사용하던 자료 형식 중 CHAR, VARCHAR, TEXT와 같이 유니코드와 호환되지 않는 문자열 자료 형식들은 이관 후 CJK 문자 세트로 구성된 데이터가 소실되므로 NCHAR, NVARCHAR, NTEXT로 업그레이드해야 한다는 부분이 있다. 날짜와 시간의 경우 이관 이전과 이관 이후의 시간대 설정 차이가 있으므로 데이터 일관성에 문제가 있을 수 있다는 점이다. 드문 경우이지만, .NET 어셈블리는 SQL Azure에 설치할 수 없으므로 이와 관련된 기능을 사용하는 경우 SQL Azure로 이관하기 전 적당한 Wrapper나 Agent를 따로 개발해야 한다. 또, 기존의 응용프로그램이 데이터베이스 연결을 헤프게 사용하는 경향이 있다면 SQL Azure 입장에서는 예고 없이 연결을 차단시킬 수 있다는 점도 숙지해야 한다. SQL Azure 서비스 자체는 공유 환경에서 실행되므로 SQL Server 인프라와는 비교할 수 없이 엄격한 정책 준수를 요구하는데, 사실 이 때문에 낭패를 보는 경우가 많다. 이런 모든 문제들을 극복하기 위해서, 데이터베이스 역시 특별한 이슈가 없다면 Windows Azure Connect를 사용하여 기존 On-Premise 환경과 구분선 없이 밀착시키는 것이 좋을 수 있다.

사실 지금 언급한 내용들만 이야기해도 Cloud로 이관하는 것보다는 이관하지 않는 것이 더 좋은 것처럼 들린다. 그래서, IT 관리자 입장에서는 무리해서 기존의 인프라를 Cloud로 이관하기 보다, 기존의 인프라나 IT 자산으로는 충당할 수 없는 새로운 영역을 Cloud를 통해 개발하고 확보하는 방법을 새로 익히는 것이 좋다. 그런 맥락에서, IT 관리자들은 Cloud 환경에 최적화된 VM-Role을 개발하는 방법을 익히고, VM-Role이 Windows Azure Connect를 통하여 기존의 Active Directory Domain Controller에 참가하도록 시스템을 구성하거나, 웹 상에서의 클레임 기반 인증을 구현할 목적으로 Active Directory Federation Services (AD FS)와 Windows Azure AppFabric Access Control을 같이 활용하는 방안을 모색하는 것이 바람직하다.

응용프로그램 개발자 관점에서 보는 Windows Azure

원래부터 그러했지만 Windows Azure는 개발자들을 위한 Cloud 플랫폼이었다. 여러 서비스들이 있지만 각각의 역할을 하나씩 소개하려 한다.

Windows Azure Compute: Windows Azure 데이터센터에서 여러분의 응용프로그램을 Hosting할 수 있도록 해주며, IIS를 활용하여 웹 응용프로그램을 실행할 수 있도록 해주는 Web Role, WCF, Socket, C, C++, Python 등 Win32 기반 시스템에서 사용 가능한 모든 종류의 응용프로그램을 실행할 수 있도록 해주는 Worker Role, 그리고 VHD 기반 이미지를 이용하여 Windows Server 2008 R2 OS를 실행할 수 있도록 해주는 VM Role을 하나의 서비스 안에서 다양한 방법으로 조합하여 실행할 수 있는 서비스이다. Windows Azure SDK에서는 VM Role을 제외한 Web Role과 Worker Role 에뮬레이터가 기본 제공된다.

Windows Azure Storage: 대용량의 데이터를 고속으로 처리할 수 있도록 해주는 특별한 저장소로, HTTP 및 HTTPS 프로토콜을 기반으로 상호 작용할 수 있기 때문에 플랫폼이나 위치에 제약이 없다. 저장소의 유형으로는, 단순 파일 저장 및 대용량 파일의 Paging 연산을 지원하는 BLOB 저장소, 행과 열의 대규모 집합 및 고속 인덱싱을 지원하는 테이블 저장소, 고속 메시지 입력 및 출력을 지원하는 큐 저장소로 구분된다. 저장소의 범주에 속하지는 않으나, Windows Azure Compute 상의 Role들이 Win32 API를 사용하여 파일 입력과 출력 연산을 수행할 수 있도록 해주는 Cloud Drive API가 Windows Azure Storage Emulator와 함께 제공된다.

Windows Azure CDN: 대한민국 및 아시아 권역에서 빠른 속도를 자랑하는 새로운 CDN 서비스 역시 Windows Azure Platform 안에 있다. 기본적으로는 Windows Azure Blob Storage에서 공개 권한으로 설정한 Block BLOB에 대해 CDN 서비스를 사용할 경우 자동으로 Mirroring이 된다. 최근 업데이트에서는 Windows Azure Storage가 아닌, 동적으로 API를 사용하여 특정 Contents를 CDN 서비스를 통해 Mirroring할 수 있게 업데이트되었고, 더불어 HTTPS도 지원하기 시작하였다.

Windows Azure AppFabric: 대규모 서비스 운영에 필요한 주요 서비스 컴포넌트 5가지를 제공하는 온라인 서비스로, Windows Server AppFabric의 기술을 바탕으로 하지만 외부에 드러나는 모습은 많이 다르다.

Windows Azure 초창기부터 지속적으로 제공되어왔던 Service Bus는 Point-to-Point 연결을 구현하는 Tunneling Mechanism을 제공한다. WCF 기술을 기반으로 하며, 서버 역할을 수행하는 WCF 호스트가 Service Bus와 연결을 맺은 뒤, WCF 클라이언트는 직접 WCF 호스트에 접근하지 않는 대신, 암호화된 연결을 사용하는 Service Bus로 방향을 바꾸어 접속을 시도하는 방식이다. 이러한 방식이 유용한 이유는, 방화벽의 존재 여부와 관계없이 네트워크 계층에 일관성이 없는 서로 다른 환경 사이를 완벽하게 연결시켜주기 때문이다.

Access Control 서비스는 또 한 번 업데이트를 준비 중에 있다. 처음 발표된 Access Control은 특정 도메인이나 기관이 운영하는 Active Directory 인프라를 기반으로 인터넷 상에서 클레임 기반 인증을 구현하기 위한 목적으로 처음 소개되었다. 인터넷 서비스를 상대로 클레임 기반 인증을 수행하는 것이기 때문에, 인트라넷 환경과는 달리 수시로 Traffic이 발생하며, 뿐만 아니라 신뢰성도 매우 중요하기 때문에 Azure AppFabric Access Control이 유용하다. 그리고 조만간 대대적인 업데이트를 통하여 Windows Live ID, Yahoo, Google, Facebook 등의 Social Networking Platform을 인증 수단으로 사용할 수 있게 되어 한층 더 폭넓은 활용 가능성을 제공한다.

Cache 서비스는 Server 버전의 AppFabric Cache를 Cloud 버전으로 제공하는 것으로, Cache를 위한 인프라를 직접 구축하지 않으면서, 같은 API, 같은 기술을 사용할 수 있는 것이 장점이다. Windows Azure Storage와 SQL Azure를 AppFabric Cache 원본으로 지정하여 사용할 경우 시간과 비용을 획기적으로 절약할 수 있다. 그리고 올해 연중으로 BizTalk Server와의 연계를 고려한 AppFabric Integration 서비스와 함께 Cloud Computing 전반을 통솔하고 제어할 수 있는 AppFabric Composite App 역시 출시될 예정에 있다.

물론 아직 부족한 서비스들도 있다. 그렇지만 이 정도 수준의 서비스라고 한다면 누구나 원하는 서비스를 제약 없이 구현해 볼 수 있지 않을까? 프로그래밍 언어나 개발 도구에 관계없이, 그리고 여러분이 실행하는 프로그램의 위치와 무관하게 말이다. 다시 강조하지만, Microsoft의 Public Cloud는 다른 Cloud Platform들처럼 강제 이주를 논하지 않는다. 모든 것은 여러분의 결정에 따라 움직이며, 매번 적절한 솔루션은 Microsoft에 의해서이든 오픈 소스 커뮤니티에 의해서이든 쓰여지고 업그레이드되어 나가고 있다. Microsoft가 말하는 Cloud Power의 진가를 확인하고 싶다면 지금 곧 Windows Azure Platform으로 떠나보자.

더 많은 정보가 필요하다면 Windows Azure 홈페이지 (http://www.windowsazure.com/)와 더불어 Windows Azure Café (http://cafe.naver.com/wazure), 그리고 .NET 기반 소프트웨어 개발을 위하여 Visual Studio 2010 한국 공식 팀 블로그 (http://www.vsts2010.net/)을 자주 찾아주기 바란다.

글쓴이 이력

  • Blog: http://www.rkttu.com / E-MAIL: rkttu@rkttu.com / Twitter: @rkttu
  • Windows Azure MVP (2011) / Visual C# MVP (2009-2010)
  • ㈜코아뱅크 코아기술연구소 (http://www.corebank.net) 연구원 재직 중
  • Windows Azure Café SYSOP (http://cafe.naver.com/wazure)
  • Visual Studio 2010 Team Blog (http://www.vsts2010.net) 집필진 활동 중
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

세미나 등록 : http://onoffmix.com/event/2600

스마트한 당신은 진정한 VS 2010의 개발자입니다.Visual Studio 2010 IDE를 이용한 유용한 도구 모음과 사용, 그리고 Visual Studio 개발자를 위한 앱스토어 “Visual Studio 온라인 갤러리”에서 개발자들에게 유용한 도구와 기능을 소개합니다

Visual Studio 공식 팀 세미나

- 주최 : 한국Visual Studio 공식 팀
- 일시 :2011 4 6일 수요일
- 시간 : 늦은 오후 7 30 ~ 9 30
- 장소 : 한국 Microsoft Korea 5
- 참가비 : 무료
- 경품 : 삼성동 코엑스 바이킹 뷔페 식권 3

세미나 아젠다

시간

발표자

제목

730~ 735

강성재 차장

VS 2010 개발자 앱스토어 Introduction

735 ~ 750

남정현MVP

VS 2010 Service pack 1 소개

7 50 ~ 8 10

강보람MVP

VS 2010 PowerTools

8 10 ~ 8 20

엄준일MVP

VS 2010 성능 프로파일러

8 20 ~ 8 30

휴식

8 30 ~ 8 50

김병진MVP

P&P 설계 구성하기

8 50 ~ 9 10

오태겸

WCF템플릿과 사용하기

9 10 ~ 9 30

박종혁

VS TFS 2010 Power Tools 업그레이드

경품추첨

섹션 내용

VS 2010 Service pack 1 소개


3
8일 이제 Visual Studio 2010 Service pack1이 발표되었습니다. 이번 Service pack1에 포함된 주요 내용을 알아보고 업데이트를 고민하는 개발자의 고민을 해결해 줄 것입니다

VS 2010 PowerTools


Visual Studio 2010 IDE
만 잘 써도 Smart 한 개발자가 될 수 있습니다. Microsoft 에서 개발자들을 위한 무료앱 천국에 있는 VS 2010 Power Tools에 대한 궁금증을 풀어드립니다.

VS 2010 성능 프로파일러


Visual Studio
에서 개발한 프로그램에 대한 성능을 알수 있을까? ~ 이제 Visual Studio 성능 프로파일러를 이용한 성능 검증에 대한 내용을 알아봅니다.

P&P 설계 구성하기


설계? 이건 어려운 거야 너무 힘들어?

아닙니다. 이제Microsoft 개발자 앱 스토어와 P&P에서 제공하는 무료 템플릿을 이용하면 쉽게 여러분들도 설계를 할 수 있습니다

WCF템플릿과 사용하기


WCF?
이거 그냥 구현하면 되는데. 그런데.. REST 서비스는? 이제 걱정하지 마십시요. Microsoft 갤러리에서 WCF 템플릿에 추가된 REST 서비스 템플릿을 이용하면 쉽게 WCF REST 서비스를 개발할 수 있는 환경을 제공합니다.

VS TFS 2010 Power Tools 업그레이드


Visual Studio Team Foundation Server
관리가 어려우시나요? 아 지긋지긋한 백업 ㅠㅠ DB도 해야하고 SharePoint도 해야하고 너무힘드셨죠? 이제 Power Tools에서 한번에 해결하십시요.

경품

코엑스 오크우드 호텔 뷔페 레스토랑 바이킹 식권 3(1 1인입니다)


세미나 등록 :
http://onoffmix.com/event/2600

저작자 표시 비영리 동일 조건 변경 허락
이 장소를 Daum지도에서 확인해보세요.
서울특별시 강남구 대치4동 | 한국 Microsoft
도움말 Daum 지도
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)

올해에도 어김없이 Microsoft TechDays가 찾아왔습니다. 올해 봄 시즌에는 "N 스크린 시대의 IT 전문가들을 위한 온라인 컨퍼런스"라는 주제로 여러 Microsoft MVP들의 온라인 세션이 준비되어있습니다. 그리고, 지금 한창 진행 중인 Imagine Cup 2011 한국 대표 선발전과 더불어서, IT 기술을 통하여 실력을 업그레이드하기도 하고, 전 세계의 수많은 대학생들과 아이디어로 경진해볼 수 있는 Imagine Cup에 대한 상세한 소개도 온라인 세션으로 같이 준비되어있습니다.

이번에도 여러 세션들이 있지만 오늘 제가 소개해드리려고 하는 세션은 개발 - 또는 - Microsoft N 스크린 개발에 처음 입문하시는 분들을 위한 내용, 그리고 모바일, 클라우드, 이매진컵에 대한 내용들을 따로 발췌하여 찾아보시기 편하도록 블로그 포스팅을 재구성해 보았습니다.

개발에 처음 입문하시는 분들께 추천해드립니다.
* Visual Studio 2010 How To Start : 개발자를 꿈꾸는 분들을 위한 입문서 - (주)코아뱅크 연구원 남정현 / Windows Azure MVP
* N-스크린 시대의 필수 Agile 개발 : 1부 모바일 - 강보람 Visual C# MVP
* N-스크린 시대의 필수 Agile 개발 : 2부 WEB - 유니위스 박세식 대리
* N-스크린 시대의 필수 Agile 개발 : 3부 클라이언트 - 엄준일 Visual Studio ALM MVP

Windows Phone 7 개발에 입문하시는 분들께 추천해드립니다.
* 모다의 Windows Phone 뚝딱 팩토리 1. 헬로우 Windows Phone - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 2. 실버라이트, Windows Phone 을 만드는 기술! - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 3. Windows Phone 의 얼굴 만들기, UI - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 4. 인터넷, Windows Phone 과손을 잡다 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 5. 데이터 바인딩의 기초 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 6. 우리 하드디스크가 달라졌어요, 격리된 저장소 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 7. 메뉴? 아니죠, 어플리케이션 바? 맞습니다 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 8. 어플리케이션 속으로 들어간 인터넷 익스플로러 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 9. Where am I? - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 10. 레이싱 게임의 핸들을 구현하는 기술, 가속도계 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 11. 꼭꼭 숨어라 데이터가 보인다 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 12. 잠시 대출(?)이 가능한 기술들, 카메라/주소록/이메일.. - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 13. 다양한 상황에 따라 모양이 변하는 터치 키보드 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 14. LINQ를 이용한 간단한 실전 예제! 블로그 보기 - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 15. 손가락이 하나 더 늘어나면? 멀티터치! - 한국 Microsoft 홍준모 Evangelist Intern
* 모다의 Windows Phone 뚝딱 팩토리 16. 앱 속의 미디어 플레이어 - 한국 Microsoft 홍준모 Evangelist Intern

Windows Azure 개발에 입문하시는 분들께 추천해드립니다.
* 클라우드 응용 프로그램 개발 - Ty Anderson VSTO MVP
* Windows Azure에서 클라우드 응용 프로그램 개발 시작하기 - Hilton Giesenow MVP
* Windows Azure에서 클라우드 응용 프로그램 처음 만들기 - Hilton Giesenow MVP
* SQL Azure : SQL Azure를 사용하여 데이터 액세스를 포함한 클라우드 응용 프로그램 만들기 - Hilton Giesenow MVP
* Windows Azure 현재와 미래 - 한국마이크로소프트 박중석 개발자 에반젤리스트
* Windows Azure 보안 - 한국마이크로소프트 박중석 개발자 에반젤리스트
* Windows Azure 비용 - 한국마이크로소프트 박중석 개발자 에반젤리스트
* Windows Azure 성능 - 한국마이크로소프트 박중석 개발자 에반젤리스트
* 해외 실제 사례로 살펴보는 마이크로소프트 클라우드 개발 - 한국마이크로소프트 박중석 개발자 에반젤리스트
* 마이크로소프트 클라우드 기술 방향성 - 한국마이크로소프트 박중석 개발자 에반젤리스트

Imagine Cup을 준비하시는 분들께, 그리고 대학생 여러분들께 추천해드립니다.
* Imagine Cup : 세상의 난제를 IT기술로 해결하라! - 홍익대학교 황채영 MSP,한국마이크로소프트 최은지 DPE Intern
* Windows Live Mesh 2011 : 동기화 되는 삶  - 프리랜서 박광수 MSP&MVP
* Microsoft Expression Studio 4 : 협력 툴의 결정체 - 프리랜서 노희상 MSP
* Web Matrix : 나만의 블로그를 쉽게 만드는 방법 - 한국기술교육대학교 허찬 MSP, 성신여자대학교 이서연 MSP

더 많은 내용을 보시려면 http://www.techdays.co.kr/2011Spring/ 페이지를 방문해주세요. :-)
저작자 표시 비영리 동일 조건 변경 허락
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)



지난번에 소개드렸었던 QRCODE 소셜 앱에 이어, 이번에는 좀 더 다양하고 편리한 기능들을 바탕으로, 그리고 Windows Azure Platform을 기반으로 소셜 앱을 새롭게 업그레이드 런칭하였습니다. 이번 버전에서는 좀 더 다양한 QRCODE 리더 응용프로그램과 상호작용하고, iPhone과 Android 버전 CASEQRCODE Reader App을 설치하시면 일정 관리 등의 기능도 QRCODE를 이용하여 관리하실 수 있습니다.

체험하러 바로 가기 (싸이월드/네이트온 로그인이 필요합니다.)
http://appstore.nate.com/Main/View?apps_no=1376

이번 버전에서 제일 많은 비중을 두고 사용된 것은 Windows Azure Platform의 상호 운용성 기술에 대한 부분으로, Compute의 경우 내부 역할이 2개의 역할로 구성되어있습니다. 앱 스토어에 올라갈 실버라이트 애플리케이션이 호출할 백그라운드 서비스와 더불어, iPhone과 Android 버전 CASEQRCODE Reader App과 상호작용할 REST 기반 API를 호스팅하는 Web Role이 있으며, Java JSP를 기반으로 작성된 QRCODE Image Rendering을 위한 Apache Tomcat 기반의 Worker Role이 있습니다. 그리고 이 둘 사이를 중계하기 위하여 사용자가 직접 업로드하는 이미지들은 물론, 생성되는 QR 코드를 보관하기 위한 Windows Azure Storage가 있으며, SQL Azure를 Web Role과 Worker Role에서 모두 사용합니다. 그리고 실버라이트의 경우, 빠른 다운로드 속도를 제공할 수 있도록 Windows Azure Storage에 현재 게시하였으며 필요한 경우 CDN으로 전환하는 것을 검토 중에 있습니다.

이번 Social App을 런칭하기까지 많은 분들의 기술적 도움과 자문을 바탕으로 성공적으로 Cloud Application을 런칭할 수 있었습니다. 이번에 쌓인 노하우를 다양한 자리에서 다양한 방법으로 전달하고, 또한 많은 발전을 할 수 있도록 노력하고자 합니다. 이번 런칭에 많은 격려와 조언을 아낌없이 해주신 SHESTORY의 김의준 사장님께도 깊은 감사를 드립니다.

감사합니다. :-)

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

다음 글: [Windows Azure Platform/A Lap around Cloud Computing] - A Lap around cloud computing – 1인 1근두운 시대
이전 글: [Windows Azure Platform/A Lap around Cloud Computing] - A Lap around Cloud Computing – 당신이 어디에 있든 관계없는 세상

이력서 안 고친지 꽤 지났는데……

지난 글에서는 Windows Live, Live@edu, Office 365를 통하여 사람들이 가정에서, 학교에서, 그리고 직장에서 Cloud Computing과 어떻게 친하게 지낼 수 있는지를 살펴보았다. 오늘은 기업 내에서 충실하게 제 몫을 다하고 있는 전산 자원들을 Cloud Computing 환경에 맞도록 업그레이드시키기 위한 방법인 가상화에 대하여 살펴보려고 한다. 가상화는 Cloud Computing의 한 축을 이루는 중요한 기술이다.

일각에서는 Cloud Computing의 도래를 두고, Microsoft나 유명 IT 기업들만의 잔치판이 될 것이므로 기업 내에서 일하는 모든 IT 전문가와 개발자들이 스스로 사표를 내도록 종용 당하게 만들 것이라고 좌절하는 목소리가 심심치 않게 들려온다. 그러나 필자의 생각은 다르다. 오히려 이전보다 더 뛰어나고 완벽한 IT 기술을 필요로 하게 될 것이며, 한 층 더 자동화되고 지능적인 시스템과 같이 일할 수 있도록 해야 하며, 사실 지금이 바로 열심히 여러분의 이력서의 새 버전을 작성해야 할 때인 것이다.

가상화에 대한 이해

이 글을 읽는 독자 대다수는 집에서 여러분의 배우자나 어머님께서 설거지하시는 모습을 잘 기억하고 있을 것이다. 그릇을 닦기 위하여 수세미를 사용하고, 그릇에 묻어있는 기름기를 걷어내기 위하여 매직 블록을 조각 내어 주방 세제에 묻혀 사용하는 그런 모습 말이다. 필자는 서버 가상화를 설명하는데 이보다 더 좋은 소재는 없다고 생각한다.

방금 이야기한대로 서버 가상화는 멀티 코어로 확장되는 엄청난 성능의 서버 컴퓨터를 효율적으로 사용할 수 있도록 도와주는 매우 똑똑한 전략이다. 매직 블록을 통으로 다 쓰는 것보다는, 잘게 조각 내어 여러 차례 필요한 만큼 사용하는 것이 더 오래 쓰고 좋은 세척 능력을 보여준다. 이전과는 다르게 서버 컴퓨터도 이러한 방법으로 나누어 쓰는 것이 대세인 시대가 되었다. 그렇지만 이를 어떻게 나누고 관리할 것인가?

응용프로그램 개발자들에게 있어서 이 질문에 대한 답은 병렬 프로그래밍 기법이다. 병렬 프로그래밍 그 자체는 이전부터 계속 사용이 가능했던 기법이었지만 최근에 중요한 변화를 맞이하게 되었다. 병렬 프로그래밍은 엄밀히 말하면 사람이 인지하기 어려울 정도로 빠른 속도로 사용자가 컴퓨터에게 지시하여 형성한 문맥들을 회전하면서 작업을 처리하는 것으로, CPU의 발전 과정과 연계를 지어보면 쉽게 이해할 수 있다. 초창기의 CPU들은 회전의 빠르기를 뜻하는 주파수가 높지 않았기 때문에 많은 작업을 할 수 없었지만, 어느 순간에 이르러서는 단일 CPU가 GHz 단위까지 주파수를 높여서 만족스러운 성능을 보여주기도 하였다. 그러나 속도가 아무리 빠르다 한들 결국 문맥들 사이를 전환할 수 있는 성능 상의 임계는 변치 않기 때문에 이를 원점에서 극복할 수 있도록 다중 CPU의 시장 진출이 활성화된 것이다. 이에 따라 여러 개의 CPU를 기본적으로 운영 체제의 재량에 따라 활용할 수 있는 기회가 생겼고, 응용프로그램 개발자들에게도 같은 기회가 주어진 셈이다.

서버 가상화는 여기에서 출발한다. 운영 체제가 사용자에게 제공할 수 있는 병렬 연산은 두 가지로 볼 수 있는데, 비교적 실행 시간이 짧거나 유한한 범위 내에서 작업이 완료될 수 있는 알고리즘의 병렬화를 커버하기 위한 Multithread 연산은 개발자들을 위한 영역이다. 그러나 유한한 시간 내에 종결되는 작업이 아닌, 독립적인 세션을 만들어서 운영하는 방법도 필요했는데 그것이 가상화 기술이다. 초창기의 가상화 기술은 Emulation에 가까웠던 것으로 다른 시스템의 동작을 모방하여 특정 프로그램이나 동작을 재현하는 경우가 많았다. 그러나 시간이 흐를수록 좀 더 실용적으로 가상화 기술을 개발하기 시작하여 실제로 사용할 수 있는 형태로 만들기 시작하여 현재의 가상화 기술에 이르게 되었다. 이러한 가상화 기술을 Hypervisor라고 하며, 우리가 흔히 이해하는 것은 Type 2의 개념이고, 요즈음 주목을 받는 것은 Type 1의 개념이다.

Type 1과 Type 2 사이의 차이점은 한 마디로, 가상화 기술을 사용자에게 서비스하는 관점의 차이이다. Type 2의 경우 사용자는 가상화 기술을 하나의 하위 응용프로그램으로 보는 구조이고, Type 1은 가상화 기술로 생성된 다수의 독립적인 서브 시스템 앞에 사용자가 한 명 이상 접근하는 구조이다.

사실 Type 1의 Hypervisor 자체는 1960년대부터 지속적으로 개발해온 시스템이지만, 일부 고가의 하드웨어에 한정되는 사양이었기 때문에 많은 관심을 받지 못하였다. 뿐만 아니라 일반 PC에서 이를 구현하기에는 성능도 부족하였고, 또한 일반 PC에서 실행되는 운영 체제의 전부를 Type 1의 가상화를 구현하는 데에 모두 바치는 것 또한 굉장한 낭비였기 때문이다. 그러나 PC 및 Workstation Computer의 사양이 드디어 이런 기능을 구현하기에 충분한 수준까지 이르게 되면서 다시금 주목 받게 된 것이다.

가상화를 구현하는 방법에 있어서는 전 가상화와 반 가상화로 나눌 수 있는데 전 가상화는 동일한 아키텍처의 시스템을 하나의 격리된 영역에서 다시 구축하는 것을 말하는데, CPU, BIOS 등 가장 하단에 위치하는 하드웨어까지 Emulation을 하는 것을 말한다. 가상화를 통하여 모든 운영 체제를 완전히 독립적으로 실행할 수 있는 것은 이런 사양을 전제로 하기 때문이다. 그러나 전 가상화 이외에도 호스트 시스템과의 상호작용, 연동 제어 등의 요구 사항이 실제로는 더 필요했기 때문에 가상과 실제 사이의 경계를 가로지를 수 있는 인터페이스가 필요한데 이를 반 가상화를 통하여 구현하고, 반 가상화 기술을 통하여 가상 환경 상의 성능 저하를 개선하는 경우도 있다. 즉, 현실과 타협한 것이 반 가상화에 의한 구현인 셈이다.

반 가상화를 구현하는 방법은 가상화 기술 제조 업체마다 차이가 많지만, 호스트 운영 체제를 처음부터 가상화 기술을 잘 수용할 수 있도록 개조하는 방법이 있고, 기본 목적을 유지하면서 확장된 아키텍처를 수용할 수 있도록 확장하는 방법이 있는데, Microsoft의 Hyper-V는 후자에 속하는 방법을 제공한다. 뿐만 아니라 Windows Server Core 환경 위에도 Hyper-V Hosting 기능을 제공하여 호스트 컴퓨터가 외부 네트워크에 노출되는 표면적을 최소화하고 안정성을 보장하는 기법을 구상하는 것 역시 다른 오픈 소스 플랫폼들과 마찬가지로 가능하다. 기존에 구매한 Windows Server 인프라를 버리고 중복 투자할 필요 없이, 약간의 방법 터득 만으로도 충분히 만족스러운 Private Cloud를 구현할 준비가 이미 되어있는 것이다. 그러므로 부디 멀리 떠나지 말자.

IT 전문가들은 가상화로 무엇을 어떻게 할 것인가?

가상화 기술로 시스템을 분할하고 나면 그 다음에는 무엇을 할 것인가? 이 질문에 대해 IT 전문가들이 찾을 수 있는 방안은 시스템 구성 복잡도의 감소, 빠른 테스트 환경 구축, 가상 데스크톱 인프라 구축으로 분류할 수 있다.

서버를 한 대 이상, 여러 대를 배치할 수 있는 전산 환경에서는 한 서버에 1개 이상의 역할을 맡기지 않지만 현실적인 이유와 비용 상의 문제 때문에 이런 규칙은 쉽게 깨진다. 가상화를 이용하여 시스템을 나눈다면 이 규칙을 다시금 당연하게 받아들일 수 있게 될 것이다. 여기에, 게스트로 사용하려는 서버 운영 체제가 Windows Server 2008에 해당하는 경우 테스트 환경까지 자동화할 수 있는 혜택도 덤으로 얻는다. Windows AIK를 사용하여 자동 응답 파일을 만들 수 있고, 이렇게 만들어진 자동 응답 파일을 WIM2VHD와 같은 도구에 매개 변수로 지정하여 Windows 설치 디스크 이미지를 곧바로 부팅 가능한 가상 하드 디스크로 Provisioning하는 것뿐만 아니라 기초 설정까지 단번에 Customizing하는 것이 가능하다.

이렇게 만들어진 원본 가상 하드 디스크를 기점으로 차이점 보관 디스크 등을 사용하여 가상 하드 디스크들을 버전 관리할 수 있으므로 각종 업데이트와 Hotfix 설치에 민감하게 반응하는 시스템을 가상화해야 하는 경우 이는 매우 이상적인 환경이 아닐 수 없다. 이러한 작업들을 Private Cloud Computing 환경에 알맞게 솔루션 차원에서 도와주는 것이 바로 System Center Virtual Machine Manager이며, 관리자가 수작업으로 이러한 과정을 수행하지 않고 Active Directory 인프라를 이용하여 인증부터 시스템 Provisioning까지 웹 상에서 처리할 수 있도록 돕는 것이 SCVMM Self Service Portal이다.

가상 데스크톱 인프라는 앞서 설명한 기술들로 갖추어진 인프라를 이용하여 종전에 널리 사용되었던 터미널 서비스가 결합되어 완성된다. 종전의 터미널 서비스에서 보여지던 것은 동일하게 구성된 서버들 사이를 라운드 로빈 등의 알고리즘을 이용하여 연결을 분산시키고, 사용자가 응용프로그램을 빌려 쓰는 방식이었다. 반면 VDI는 응용프로그램 대여가 아닌 가상 PC 전체를 완전히 특정 사용자에게 임대하는 방식이기 때문에 VDI로 만족할만한 성과를 얻을 수 있으려면 얼마나 빠르게 VDI용 가상 PC를 Provisioning할 수 있는지도 관건이 된다. 뿐만 아니라, 이런 식으로 만들어진 가상 PC들에 대한 최신 업데이트와 보안 점검을 수행하기 위해서는 종전에 잘 알려진 WSUS나 Forefront를 쉽게 제어할 수 있는 System Center 솔루션 전반이 역시나 필요하다.

지금 언급한 사항들만 대충 살펴보더라도 관리자가 가상화나 Private Cloud 기술 때문에 직업을 잃어버리기는커녕 한층 더 복잡하고 높은 수준의 기술에 대한 이해가 필요함을 알 수 있다. Microsoft VDI에 대한 전반적인 Overview 및 Licensing 정보를 살펴보려면 아래의 동영상을 살펴보기 바란다.



http://www.microsoft.com/showcase/en/us/details/9291a982-2f32-4d25-84bb-671accbcb002

그리고 여기에 여러분들은 한 가지 더 이점을 얻을 수 있다. Windows 7 SP1과 Windows Server 2008 R2 SP1의 출시와 더불어서 가상 컴퓨터 상의 게스트 운영 체제들의 성능을 미리 계산된 불연속적인 값에 의한 설정이 아닌, 연속적이고 유동적으로 변경 가능한 설정으로 재 구성이 가능한 Dynamic Memory 기능과 더불어, 다소 비싼 하드웨어를 필요로 하지만 Remote Session을 경유하더라도 3D 그래픽과 렌더링을 경험할 수 있는 RemoteFX 기술 지원까지 가능하게되어 한 층 더 높은 활용도를 제공한다. Windows 7 SP1과 Windows Server 2008 R2 SP1은 지금 Windows Update를 통하여 업데이트가 가능하며, 기술적인 상세 정보는 http://blogs.technet.com/b/koalra/archive/2011/02/10/windows-7-windows-server-2008-r2-1-rtm.aspx 의 내용을 확인하기 바란다.

개발자들은 가상화로 무엇을 할 것인가?

개발자들에게도 가상화는 작업하는 방법에 많은 변화를 가져다 준다. 그 중에서도 테스트 과정에 지대한 영향을 가져다 준다. 가상화를 통해서 가장 먼저 수혜를 누리는 것은 바로 Mobile 및 Embedded 장치 개발이다. 원칙적으로, Mobile과 Embedded 장치를 대상으로 응용프로그램을 개발하기 위해서는 개발자 당 1대 이상의 실제 장치가 필요한 것이 당연하다. 하지만, 앞에서 언급한 전 가상화 기술을 통해서 Intel CPU가 아닌 Mobile 장치의 CPU를 Emulation하여 약간의 제한 사항이 있지만 기본적인 테스트에는 문제가 없도록 해주는 테스트 및 디버깅 환경을 완성시켜준다. 이는 Windows Mobile 6.x, Windows Phone 7, Windows Embedded Compact 7을 통해서 쉽게 경험할 수 있었던 부분들이다.

그러나 한 발 더 나아가서, 테스트와 디버깅을 실제 Windows 운영 체제에서도 실행할 수 있어야 하고, 테스트 주도 개발 (TDD) 방법론에 입각하여 테스트를 수행하고, 확실한 QA를 수행하여 개발자와 직접 상호 작용할 수 있는 개발 방법론을 구현할 수 있도록 하려면 그 다음은 무엇이 필요할까? 답은 Visual Studio 2010 Ultimate부터 제공되는 Test Lab Management이다.

Test Lab Management는 내부적으로 SCVMM와 Hyper-V를 사용하여 테스트 환경을 구축하게 되며, Team Foundation Services (TFS) 영역 내에서 관리되는 프로젝트와 통합되어 자동 및 수동 테스트 케이스에 따라 테스트를 진행하고 Screenshot과 같은 일차원적인 정보 수집 말고도 시스템 상태, 문제가 발생했던 시점의 Stack Trace 기록은 물론 변수 상태까지 기록하여 데이터베이스로 저장하는 IntelliTrace 로그 수집까지 처리한다. 필요한 모든 주변 정황들이 소프트웨어 통제 환경 아래에 놓이게 되므로 재현 불가능한 버그가 나타나지 않도록 도와준다. 아래의 동영상은 Test Lab Management로 실제로 QA를 진행하는 과정을 보여주는 Overview 동영상이며 한 번 재미 삼아 보기를 권한다.




http://msdn.microsoft.com/en-us/vstudio/ff945982

다음 시간에는

기본적으로 가상화를 통하여 일상적인 시스템 관리 작업 및 테스트 작업들을 소프트웨어가 서 있는 땅 아래로 가져다 놓고 모든 것을 Top-Down으로 관리하는 것이 이루려고 하는 목표이다. 이전에 언급하였던 대로, 개념적으로는 간단할 수 있지만, 이러한 작업들을 성공적으로 수행할 수 있으려면 적어도 규모에 관계없이 여러분이 완전히 제어하고 통솔할 수 있는 데이터 센터의 소유와 IT 전문가, 그리고 개발자들을 필요로 한다. 그리고 이런 환경을 가지고 있든, 가지고 있지 않든 진정으로 뛰어난 성능을 필요로 하고, 비즈니스의 핵심 가치에 집중하기를 원한다면, 다음 시간에 언급할 Windows Azure Platform으로의 이동을 바로 지금 준비할 때이다.

처음 Windows Azure Platform이 발표된 이후부터 지금 이 순간까지 많은 변화가 있었고, 지난 PDC'10에서 발표된 업데이트에는 IT 전문가들이 Private Cloud 뿐만 아니라 Public Cloud에서도 역량을 펼칠 수 있도록 도와주는 Windows Azure Connect 및 Virtual Machine Role이 발표되었다. 앞으로 2회 연재에 걸쳐서 Windows Azure Platform이 IT 전문가들과 개발자들에게 어떤 변화를 가져다 줄 수 있는지 더 살펴보려고 한다.

글쓴이 이력

  • Blog: http://www.rkttu.com / E-MAIL: rkttu@rkttu.com / Twitter: @rkttu
  • Windows Azure MVP (2011) / Visual C# MVP (2009-2010)
  • ㈜코아뱅크 코아기술연구소 (http://www.corebank.net) 연구원 재직 중
  • Windows Azure Café SYSOP (http://cafe.naver.com/wazure)
  • Visual Studio 2010 Team Blog (http://www.vsts2010.net) 집필진 활동 중
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Windows Azure MVP 남정현 (rkttu.com)